第三范式算法
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 -> A
和 A -> B
的所有关系 V -> B
。
这让我想到了我的问题。在我看来,我没有什么可删除的,这意味着对于 FN3,我将拥有上述关系描述的 4 tables。然而常识告诉我,我主要应该只有 2 tables
R1(#name,street,city,zip)
R2(city,region)
。我可以删除以下两个关系吗:
S,C -> Z
和 Z -> C
? (我有 N -> S,C
和 S,C -> Z
和 Z - > 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 =} R
和 Z {= C
。然后正常化你的 table 关系。
我将从一个例子开始回答我的问题。
假设我们有具有以下属性的 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 -> A
和 A -> B
的所有关系 V -> B
。
这让我想到了我的问题。在我看来,我没有什么可删除的,这意味着对于 FN3,我将拥有上述关系描述的 4 tables。然而常识告诉我,我主要应该只有 2 tables
R1(#name,street,city,zip)
R2(city,region)
。我可以删除以下两个关系吗:
S,C -> Z
和 Z -> C
? (我有 N -> S,C
和 S,C -> Z
和 Z - > 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 =} R
和 Z {= C
。然后正常化你的 table 关系。