# 第一范式
- 列符合原子性,表中每个属性不可再分
- 不存在多值属性
- 能找到候选码
姓名 | 年龄 | 地址 |
---|---|---|
ZMC | 江西省赣州市 |
地址属性不符合原子性,应该拆分为:省 市
# 第二范式
非主属性必须依赖于整个主键或候选键,不能只依赖于主键或候选键的一部分属性
员工 ID | 姓名 | 部门 ID | 部门名称 | 在部门工作的年数 |
---|---|---|---|---|
ZMC | 牛马部 |
- 在部门工作的年数需要通过员工 ID 和部门 ID 共同确定
- 姓名仅通过员工 ID 确定
- 部门名称仅通过部门 ID 确定
属性不完全依赖整个主键确定,应拆分为员工表和部门表两张表
# 第三范式
任何非主属性不能依赖于其他非主属性
- 对于任意
- 要么 是超码
- 要么 是主属性
- 二者满足其一即可
员工 ID | 姓名 | 年龄 | 职位 ID | 职务 |
---|---|---|---|---|
ZMC | 牛马 |
职务不仅可以由职位 ID 决定,还可以通过员工 ID 决定
属性依赖于其他非主属性确定,应拆分为员工表和职务表
# BC 范式(BCNF)
在关系 中, 为主键, 属性是主键的一个属性,若存在 , 为主属性,则该关系不满足
在野者不能干政
- 对于任意
- 必须是超码
学号 | 课程号 | 教师 | 教师办公室 |
---|---|---|---|
0235089 | 001(数据结构) | 2201 | 荟庐 001 |
# 函数依赖为:
- 学号,课程号 教师
- 教师 教师办公室
# 反范式
为了提高查询性能,有时容忍一些数据冗余