数据库三大范式讲解
一、为什么需要数据规范化(使用三大范式)?
二、什么是三大范式?
第一范式(1NF)
描述: 要求数据库表的每一列都是不可分割的原子数据项,保证每一列都不可再分!
举例说明:
-
错误示范(家庭信息和学校信息应该不可再分才行) -
正确示范
第二范式(2NF)
前提:满足第一范式
描述: 每张表只描述一件事情(职责分配),非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖),
? 要确保数据库表中的每一列都和主键有关,而不能只与主键的某一部分相关(主要针对联合主键而言)
第三范式(3NF)
前提:满足第一范式和第二范式
描述: 任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)
? 第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
三、任何情况下都适合用三大范式吗(面试的时候一定要往这个方向靠,加分项)?
规范性 和 性能的问题
关联查询的表不得超过三张(在阿里巴巴,因为多表联合查询的速度慢),所以鱼和熊掌不可兼得
- 考虑商业化的需求和目标(成本,用户体验),开发时数据库的性能更加重要
- 在规范性能的问题的时候,需要适当的考虑一下 规范性(三大范式)!
- 故意给某些表增加一些冗余的字段。(从多表查询中变为单表查询)
- 故意增加一些计算列(大数据量降低为小数据量的查询:索引)
|