规范化SQL表

时间:2010-08-18 19:31:38

标签: sql sql-server database normalization entity-attribute-value

我们可以进一步规范化这个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      

等等

4 个答案:

答案 0 :(得分:2)

你可以这样做

alt text

答案 1 :(得分:2)

这看起来很像组合EAV table和历史记录表。它的真正目的是什么?相关的表是什么?

根据给出的有限信息,您可以通过将其转换为纯历史表来对其进行标准化。 RatingComposition不应跨行分割,而应位于正确命名的列中。像这样:

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)

我能看到的唯一显而易见的事情是将名称和类型分解为单独的表格,但我不能肯定地说,因为我不太确定它们实际代表什么。