数据库设计:适用于大量列值的表设计

Jak*_*ake 1 database-design

我想做很多次不同的实验.在每次试验之后,我都会留下一个"大"的输出统计数据 - 比方说,1000.我想将实验的输出存储在一个表中,但最好的方法是什么......?

选项1

有一个1000列的表.看起来像个坏主意.如果一天的统计数量超过最大列数怎么办?

选项2

有一个有三列的表.比方说,ID,StatisticType和StatisticValue.这样,您可以拥有任意数量的统计信息.但是,阅读单个实验统计数据变得更加复杂.如果不同的统计数据是不同的数据类型怎么办?

有什么建议?

Cad*_*oux 7

选项2,包含ID,TrialID,StatisticID,StatisticValue

通过适当的索引,它将表现得相当好(您可以使用PIVOT在SQL Server 2005中相当容易地获取列上的值).

当统计数据是不同的数据类型时,问题变得更加有趣,但在许多情况下,我只是调整数据类型的大小(有时整数只是在money字段中).对于其他不兼容的类型,我认为最好的设计实际上是每种类型的单独表,但我也看到过多列或自由格式的文本列.


小智 5

我是科迪的回答(这里),还有一些额外的想法和解释.

表的关键是trialID,statisticType.每个试验的每个统计数据将有一行,每次试验将有1000行.要获取单个实验的值,请选择特定trialID的行(如matli所示).

您可以添加"试用主"表,每个试验具有单行(trialID作为关键字),其中包含有关该特定试验的相关信息(日期,时间,评论,人...).这将允许基于试验属性进行分组和分析.例如,早晨试验与下午试验的表现不同,或者Tarzan的试验表现与Jane的试验不同?

您还可以添加"Stat Master"表,该表包含每个statisticType的行,并包含有关统计信息的属性.如果各种统计数据具有不同的属性,或者您想要对某些统计数据进行分组,则这可能很有价值.

玩得开心!