1

表 - 人员 {ID, Name, Age, Line1, City, State, Zip}

FD集

1) ID -> 其他所有属性,因为它是 PK

2)我无法确定是否

 zip -> {Line1, City, State} or.. 

{Line1, City, State} -> zip?  

[both of these are candidate keys I guess]

在任何一种情况下,它都成为传递依赖,因为

ID -> Zip -> 其他地址(或 ID -> 地址相关 -> Zip)。

它违反了 3NF(传递依赖)。

您能否解释一下我如何分解给定的关系,以及在包含地址相关的其他关系中什么变成 PK。

4

2 回答 2

1

如果您知道 (Line1, City, State),您可以确定 zip。所以,

{Line1, City, State} -> zip

不是反过来。因为同一个 zip 可能包含同一个城市和州的多个 Line1 值(例如,同一条街道上的不同门牌号)。

对于 3NF,关系可以是

  • 人{ID、姓名、年龄、Line1、城市、州}
  • 地址 {Line1, City, State, Zip}

从实用性来看,这似乎是数据库表中的多余和浪费空间。

于 2011-11-17T03:19:27.150 回答
1

假设 {Line1, City, State}->{Zip} 和 {Zip}->{City, State} 则以下分解在 3NF 中:

Person {ID, Name, Age, Line1, Zip} (key= {ID})
Address {City, State, Zip} (keys = {City, State} and {Zip])

在实践中,这可能没有用,因为实际地址数据通常不一致或缺少部分。真正的问题是您实际上想要在数据库中强制执行哪些依赖项。这就是为什么仅依赖于从属性名称列表中识别依赖关系的练习是如此主观的原因。给出明确答案的唯一方法是从您希望架构满足的依赖项集开始。

于 2011-11-17T07:27:35.647 回答