2

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

4 回答 4

2

这看起来可疑地像一个组合EAV 表和历史表的组合。它的真正目的是什么?关联表是什么?

根据给定的有限信息,您可以通过将其转换为纯历史表来对其进行规范化。RatingandComposition不应跨行拆分,而应位于命名恰当的列中。像这样:

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

.
这将允许更简单和更快:检查约束、索引和查询。

于 2010-08-21T22:16:51.463 回答
2

你可以这样做

替代文字

于 2010-08-18T19:43:52.190 回答
1

类型和名称是否会超出特定集合?您可以将它们分解为 lib 表并引用它们。这是我唯一能想到的。

例如,如果你的类型总是只是 A1、A2、B1、B2 和 C1,你可以把它们做成一个单独的表,然后你可以有一个外键,而不是不断地把 A1 输入数据库转到引用 A1 行的类型表。

于 2010-08-18T19:37:20.720 回答
0

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

于 2010-08-18T20:36:29.913 回答