SQL三大范式的个人理解
SQL的三大范式
为什么要三大范式,作用是
1、防止信息的重复
2、防止更新异常
3、防止插入异常(如:无法正常显示信息)
4、防止删除异常(如:删除了不因该的有用信息)
三大范式
第一范式(1NF):
要求数据库表的每一列都是不可分割的原子数据项(意思就是要写得更细一点)例子如下:
第二范式(2NF):
1、第二范式必须满足第一范式情况下执行。
2、非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。 可以理解为,表要细分为一个独立的事情,别两件事情公用一张表。 例子如下:
第三范式(3NF):
1、第三范式又建立在第二范式上
2、理解为非相同主键控制的尽量分开
- 阿里的要求,关联的表不能超过三张表
- 考虑商业的需求和目标,在不得不超过三张表的情况下数据的性能更加重要。(就是成本和用户体验更重要)
- 在规范,性能的时候,适当的考虑规范性。
- 故意给某些冗余字段。目的是将夺标查询变为单表查询
- 故意添加一些算列。将大的数据量变为小的数据量查询,如:索引