我将从一个例子开始回答我的问题。
假设我们有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 -> B
和V -> A
的所有关系A -> B
。
这让我想到了我的问题。在我的观点中,我没有什么可以删除FN3的意思,我将有上面关系描述的4个表。然而常识告诉我,我应该只有2张桌子
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 ...)
答案 0 :(得分:1)
不,你不能在不丢失信息的情况下删除这些关系。为了进一步展示您的示例,您最终会得到N -> C
,这会丢弃您的大部分属性。
问题是你将所有->
关系视为平等,但事实并非如此。也许N -> S,C,R,Z
是一个1:1的关系,但C -> R
是多个:1关系(一个地区中的许多城市),Z -> C
是1:多关系(一个邮政编码有很多市)。
使用不同的符号表示其他关系,例如C =} R
和Z {= C
。然后规范化你的表关系。