我先举个例子来回答我的问题。
假设我们有具有以下属性的表地址:
-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 -> B
和V -> A
。这就引出了我的问题。在我看来,我没有什么要删除的,这意味着对于fn3,我将拥有上述关系所描述的4个表。但是常识告诉我我应该只有两张桌子
A -> B
R1(#name,street,city,zip)
。我可以删除以下两个关系吗:R2(city,region)
和S,C -> Z
?(我有Z -> C
和N -> S,C
和S,C -> Z
所以在我看来我去了Z - > C
我已经删除了前面的2…) 最佳答案
不,你不能删除这些关系而不丢失信息。再举一个例子,您最终会得到N -> C
,它会删除您的大部分属性。
问题是你把所有的关系都看作是平等的,但事实并非如此。可能->
是一个1:1关系,但是N -> S,C,R,Z
是一个多:1关系(一个地区的许多城市),而C -> R
是一个1:多关系(一个邮政编码有许多城市)。
使用不同的符号来表示这些其他关系,如Z -> C
和C =} R
。然后规范化表关系。
关于database - 第三范式算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30672040/