【发布时间】:2016-07-20 11:50:21
【问题描述】:
我无法决定是规范化还是非规范化这部分数据库:
我有一个在给定样本点存在或不存在的约 50 个物种的列表。这 50 个将来可能会扩大到 75 个,但不会更多。该数据库的主要目的是生成报告。因此,如果给定区域有 10 个站点,一个平均问题将是:我们在其中多少个站点中检测到了物种 a?
我应该创建 50 t/f 位列吗:
网站,a,b,c,d,e...n
1, t, f, t, f ,t ,t ....
2,f,t,t,f,t,f.....
或者我应该创建一个一对多的表:
1个
1c ...
2b
2 c ...
我知道趋势是规范化,70 列可能会让其他用户望而生畏,但我真的很喜欢从非规范化版本中提取数据的想法。在这种情况下真的更好吗?
【问题讨论】:
-
50 - 75 列的版本未进行非规范化。您规范化数据,而不是数据的表示(布尔值)。将每个样本/物种放在单独的行上的唯一好处是您不必创建错误的行。如果样本中平均只有 5 个物种,则只有 5 行,而不是 50 行。如果样本中平均有 45 个物种,则没有优势。
-
我会选择第二种选择(多对多表),因为它会简化聚合函数的使用,例如如果您想计算每个站点记录了多少物种。
标签: database database-design normalization denormalization