数据库功能依赖分解

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

表 - 人员 {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/

相关文章:

php - MySql 从具有多个条件的表中选择

mysql - 选择项目的订购日期 SQL

database - 我在数据库中需要多少张表

python - matplotlib imshow - 默认颜色归一化

database-design - 关系数据库设计 - 我想要一些行类型的额外字段,但不是全部

android - 克隆 firebase 项目时出错

mysql - 数据库结构——我怎么知道我需要多个表

mysql - Web 系统使用多少个数据库?

database - 如何存储一条 "primary"记录

PHP 5.3 找不到 normalizer_normalize()