我先举一个例子来回答我的问题。
假设我们有具有以下属性的表入口:
-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个表。然而,常识告诉我,我应该只有两个表,主要是R1(#name,street,city,zip)
R2(city,region)
。我可以删除以下两个关系:S,C -> Z
和Z -> C
?(我有N -> S,C
,S,C -> Z
和Z - > C
,所以在我看来,我已经删除了前2.)
发布于 2015-06-05 22:24:30
不,你不能在不失去信息的情况下删除这些关系。为了进一步了解您的示例,您将得到N -> C
,它删除了大部分属性。
问题是,您将所有->
关系视为平等,但它们不是。N -> S,C,R,Z
可能是1:1关系,但C -> R
是多:1关系(一个地区的许多城市),Z -> C
是1:多关系(一个邮政编码有多个城市)。
使用不同的符号来表示这些其他关系,如C =} R
和Z {= C
。然后让你的桌子关系正常化。
https://stackoverflow.com/questions/30672040
复制相似问题