2

我们能否furthur正常化这个SQL表 药结构是 主键是ID,Date,NAme,Type规范化SQL表

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

数据表明其可能,但您需要提供表中实际包含的内容,然后才能得到答案 – Fabian 2010-08-18 19:37:40

+0

ID,名称,类型是nvarchar 值是实数 – EvenPrime 2010-08-18 19:42:06

+1

数据类型不重要。重要的是这些字段实际上是什么意思*。这是决定正确归一化的唯一方法。例如,是否有两个具有相同Name值的行可以具有不同的Date值? – 2010-08-18 19:55:16

回答

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 


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

1

是类型和名称将出一组特定的?你可以把它们分解成lib表格并引用它们。这是我能想到的唯一的事情。例如,如果你的类型总是只是A1,A2,B1,B2和C1,你可以把它们放到一个单独的表中,然后不用不断地把A1输入到数据库中,你可以有一个外键关闭引用A1行的类型表。

+1

+1:这就是我所能看到的 – 2010-08-18 19:40:51

+4

是的,它看起来像名称在功能上依赖于类型,在这种情况下这将违反2NF。 – 2010-08-18 19:41:29

+0

-1您将自然值分离到查找表中的建议与标准化无关。 – 2010-08-28 14:35:22

2

你能做到这一点

alt text

+0

如何使用SQL SERVER 2005 Exp – EvenPrime 2010-08-18 19:45:38

+0

+ 1为“purty”图片创建使用degin模式的foreignKeys。 (^_^) – 2010-08-21 21:53:02

0

唯一明显的事情,我可以看到的是打破了名称和类型分开表,但我不能说肯定是因为我不太清楚他们实际上代表。