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

时间:2008-10-03 20:48:02

标签: database-design

我希望在不同时间进行一次实验。在每次试验之后,我都会留下一个“大”的输出统计数据 - 比方说,1000。我想将实验的输出存储在一个表中,但最好的方法是什么......?

选项1

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

选项2

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

有什么建议吗?

7 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:5)

我的第二个Cody的回答(here),还有一些额外的想法和解释。

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

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

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

玩得开心!

答案 2 :(得分:2)

关系数据库中的列是存储搜索,排序和其他信息处理中引用的数据的好地方。如果您只是要存储大量值,则可以使用其他格式(如XML),并将它们全部存储在一个列中。在这种情况下,XML将为您提供可读性,可维护性,灵活性,甚至可能具有一些可搜索性(SQL Server 2005+)。

答案 3 :(得分:1)

您可以有一个表用于统计类型,包括它们的数据类型,然后是每个数据类型的单独表,例如NumericStats,TextStats,DateTimeStats,它们都具有StatisticTypes表的外键。

答案 4 :(得分:1)

如果您的DBMS提供XML数据类型,您可能需要考虑它。

优点:

  • 从一行试用中获取所有输出统计信息
  • 使用正确的架构,统计数量可能因试验而异
  • 大多数使用XML的DBMS很好地压缩您的数据

缺点:

  • 将您的实施与特定的DBMS联系起来
  • 查询结果不容易

干杯。

答案 5 :(得分:1)

没关系。由于您尚未提及您计划使用数据的内容,因此如何存储数据几乎毫无意义。您可以将其存储为CSV,并满足您的要求(基本上,我如何存储1000个值)。

您希望针对此数据运行的查询以及您正在建模的域会在世界中产生重大影响

答案 6 :(得分:0)

三栏:ID,实验和价值。从一个实验中获得结果并不复杂,例如:SELECT * FROM table WHERE Experiment = 5;