表 - 人员 {ID、姓名、年龄、第 1 行、城市、州、 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 -> address related -> Zip)。
它违反了 3NF(传递依赖)。
能否请您解释一下我如何分解给定的关系,以及在包含地址相关的其他关系中什么变成了 PK。
最佳答案
假设 {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])
在实践中这可能没有用,因为真实地址数据通常不一致或有部分缺失。真正的问题是您实际想要在数据库中强制执行哪些依赖项。这就是为什么依赖于仅从属性名称列表中识别依赖关系的练习非常主观。给出明确答案的唯一方法是从您希望架构满足的依赖项集开始。
关于数据库功能依赖分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8161484/