我们可以进一步规范化这个Sql表吗?
结构是
主键是ID,Date,NAme,Type
ID Date Name Type Value
-----------------------------------------------------
1 08/15/2010 Rating A+ 10
1 08/15/2010 Rating A- 10
1 08/15/2010 Composition MultipleChoice 33
1 08/15/2010 Composition YESNO 33
1 08/15/2010 Composition Fillin 33
1 08/16/2010 Rating A+ 30
1 08/16/2010 Rating A- 10
1 08/16/2010 Composition MultipleChoice 25
1 08/16/2010 Composition YESNO 50
1 08/16/2010 Composition Fillin 25
等等
答案 0 :(得分:2)
你可以这样做
答案 1 :(得分:2)
这看起来很像组合EAV table和历史记录表。它的真正目的是什么?相关的表是什么?
根据给出的有限信息,您可以通过将其转换为纯历史表来对其进行标准化。 Rating
和Composition
不应跨行分割,而应位于正确命名的列中。像这样:
ID Date Rating_A+ Rating_A- MultipleChoicePercent YESNOPercent FillinPercent
---------------------------------------------------------------------------------------------
1 08/15/2010 10.0 10.0 33.3 33.3 33.3
1 08/16/2010 30.0 10.0 25.0 50.0 25.0
。
这将允许更简单和更快:检查约束,索引和查询。
答案 2 :(得分:1)
类型和名称是否超出特定集合?您可以将它们分解为lib表并引用它们。这是我唯一能想到的。
例如,如果您的类型总是只是A1,A2,B1,B2和C1,您可以将它们放入一个单独的表中,然后不必经常将A1输入数据库,您可以拥有将外键移到引用A1行的类型表中。
答案 3 :(得分:0)
我能看到的唯一显而易见的事情是将名称和类型分解为单独的表格,但我不能肯定地说,因为我不太确定它们实际代表什么。