数据库设计 – 存储大量列的好方法是什么?

我在确定如何在数据库中存储此数据时遇到问题.有关最佳方法的任何建议吗?我可能会补充说,我不太了解数据库.

我有这样的数据格式,但不是4,列数约为240,因此每个日期有240个与之关联的唯一值:

Date/Time 200,00 202,50 205,00  
2010.11.12  13:34:00  45,8214 43,8512  41,5369   
2010.11.12  13:35:00  461,9364  454,2612  435,5222

行也与DataSites相关联.

我的第一个想法就是有这样一张桌子:
DataID(pk),DataSiteID,ParameterID,Date,Value,DataSite索引,参数和日期. ParameterID引用另一个存储输入列标题的表(200,00 …).

我的第二个想法就是拥有一张包含所有240多列的表格.我已经提出了其他一些方法,但它们也非常不令人满意.

我的第一个解决方案的问题(不是这么大的问题,但我不喜欢它),是对于该输入行中的所有240个值将重复Date和DataSiteID,因此它使用了相当多的额外的空间.

每年将有大约40GB的数据(以上面的文本格式),数据将由DataSite,参数和日期搜索.进入的数据量很可能在一年左右翻两番.

有什么好主意吗?
谢谢,詹姆斯

编辑:这是时间序列数据,列是不同波长的测量值.希望在相对窄的波长范围内分析数据.在未来的某个时刻也可能会增加额外的波长.

编辑:谢谢你的答案,我真的很感激:)我想我可能有时间用500g左右的测试数据进行一些实验.我会回复任何结论;)

解决方法

您可以以任何一种方式创建案例,但如果要将数据用于分析,并且您经常希望同时查看该数据中的多个列,请使用宽表.确保您知道数据库数量和行大小限制.确保您获得正确的数据类型.如果许多列为空,sql Server允许您为此优化表.您还可以考虑使用NOsql(Not Only sql)解决方案来分析此类数据.

如果此数据对分析的影响较小,您可能希望按照问题中的说明对其进行标准化.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...