第三范式算法

时间:2015-06-05 17:01:53

标签: database algorithm normalization

我将从一个例子开始回答我的问题。

假设我们有Adress表,其中包含以下属性:

-Name(which also is the primary key, I will give this column the symbol N)
-Street(will have the symbol S)  
-City(will have the symbol C)  
-Region(will have the symbol R)  
-Zip_Code(will have the symbol Z) 

属性之间给出了以下关系

N -> S,C,R,Z   
C -> R  
S,C,R -> Z  
Z -> C  

我通过以下规则消除了多余的状态: 如果A1 ...Ai ... An -> T并且还有{A1...An}/Ai -> Ai,那么Ai在第一个关系中是多余的。

因此我们有:

 N-> S,C  
 C -> R  
 S,C -> Z  
 Z -> C 

现在,我必须删除已有V -> BV -> A的所有关系A -> B

这让我想到了我的问题。在我的观点中,我没有什么可以删除FN3的意思,我将有上面关系描述的4个表。然而常识告诉我,我应该只有2张桌子 R1(#name,street,city,zip) R2(city,region)。我可以删除以下两种关系:  S,C -> ZZ -> C? (我有N -> S,CS,C -> Z以及Z - > C所以在我看来,我已经去了N -> S,C -> Z -> C我已经删除了前者2 ...)

1 个答案:

答案 0 :(得分:1)

不,你不能在不丢失信息的情况下删除这些关系。为了进一步展示您的示例,您最终会得到N -> C,这会丢弃您的大部分属性。

问题是你将所有->关系视为平等,但事实并非如此。也许N -> S,C,R,Z是一个1:1的关系,但C -> R是多个:1关系(一个地区中的许多城市),Z -> C是1:多关系(一个邮政编码有很多市)。

使用不同的符号表示其他关系,例如C =} RZ {= C。然后规范化你的表关系。