第N范式总是满足第N-1范式。
范式化设计的优点:一般能解决写入的性能问题,原因:1. 范式化设计不存在重复数据,因此修改时写入更少。 2. 范式化的表比较小,因此操作起来更快。
范式化设计的缺点:真正投入使用时一般查询至少需要join一次,稍复杂一点需要join三到四张表,因此范式化设计会让查询代价变高昂。
正确姿势是根据业务来混合范式化和反范式化到设计中来,做一定的折中。
第一范式(1NF)
列拆无可拆
不符合范式:
员工号 | 信息 |
---|---|
1029 | 汤米 28岁 |
符合范式:
员工号 | 姓名 | 年龄 |
---|---|---|
1029 | 汤米 | 28 |
第二范式(2NF)
抽出关系表
不符合范式:
员工号 | 姓名 | 年龄 | 绩效 |
---|---|---|---|
1029 | 汤米 | 28 | A |
符合范式:
员工号 | 姓名 | 年龄 |
---|---|---|
1029 | 汤米 | 28 |
员工号 | 绩效 |
---|---|
1029 | A |
第三范式(3NF)
关系不能存在传递
不符合范式:
员工号 | 姓名 | 年龄 |
---|---|---|
1029 | 汤米 | 28 |
员工号 | 绩效 | 奖励 |
---|---|---|
1029 | A | 一级 |
奖励 | 年终奖(月) | 期权(%) |
---|---|---|
一级 | 6 | 5 |
注:表二存在传递关系。奖励和绩效有直接关系,绩效和员工号有直接关系,但奖励和员工号并非直接关系而是传递关系。应该拆成两张关系表。
符合范式:
员工号 | 姓名 | 年龄 |
---|---|---|
1029 | 汤米 | 28 |
员工号 | 绩效 |
---|---|
1029 | A |
绩效 | 奖励 |
---|---|
A | 一级 |
奖励 | 年终奖(月) | 期权(%) |
---|---|---|
一级 | 6 | 5 |
范式的建议
来源:CSDN
作者:Teddywen_lovejj
链接:https://blog.csdn.net/Teddywen_lovejj/article/details/104197422