数据库功能依赖分解

时间:2011-11-17 02:47:25

标签: database database-design normalization database-normalization functional-dependencies

表格 - 人员{ID,姓名,年龄,行1,城市,州,邮编}

FD set

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是什么。

2 个答案:

答案 0 :(得分:1)

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

{Line1, City, State} -> zip

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

对于3NF,关系可以是

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

从实用性来看,数据库表中的空间似乎更加冗长和浪费。

答案 1 :(得分: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])

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