第三范式算法

3rd Normal Form Algorithm

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

假设我们有具有以下属性的 table 地址:

-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  

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

因此我们有:

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

现在,我必须删除我已经拥有 V -> AA -> B 的所有关系 V -> B

这让我想到了我的问题。在我看来,我没有什么可删除的,这意味着对于 FN3,我将拥有上述关系描述的 4 tables。然而常识告诉我,我主要应该只有 2 tables R1(#name,street,city,zip) R2(city,region)。我可以删除以下两个关系吗: S,C -> ZZ -> C ? (我有 N -> S,CS,C -> ZZ - > C 所以我认为我去 N -> S,C -> Z -> C 我已经有所以删除前 2...)

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

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

使用不同的符号来表示这些其他关系,例如 C =} RZ {= C。然后正常化你的 table 关系。