面试又双叒叕被问到数据库三大范式,怎么答才能让面试官认可呢 (qq.com)
范式是我们设计数据库表时遵循的一种规范要求,主要有两个优点:
- 消除重复数据减少冗余数据,从而让数据库内的数据能划分的更合理,让磁盘空间得到更有效利用的一种标准化标准;
- 消除潜在异常(插入异常,更新异常,删除异常)
数据库范式主要分为1NF,2NF,3NF,BCNF等。范式越高,要求就越细。一般在我们设计关系型数据库的时候,通常考虑到第三范式(3NF)就足够。需要注意的是,每当要符合高一级范式的设计规范,必须要以符合低一级范式为前提。例如符合第二范式(2NF)的前提,必须符合第一范式(1NF)。
第一范式 (1NF):原子性,属性 (字段) 是最小单位不可再分。
比如”中国山东枣庄”,显然不符合第一范式要求,划分成国家、省、市三个字段比较好。当然,如果明确业务上没有省市区划分要求,也可不划分。
第二范式(2NF):满足1NF,每个非主属性完全依赖于主键,而不是部分主键。
所以只有一个主键的表如果符合第一范式,那一定是第二范式
比如部门描述由部门id决定,但是这个表的主键要是员工id、部门id。这就是部分依赖,需要拆表
第三范式(3NF):满足2NF,非主键列必须直接依赖于主键,无传递依赖
不能存在非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。比如工作描述这个字段依赖于工作,工作依赖于主键员工id,他们在同一个表中就是传递依赖
助记:原 玩 无传,原神玩家没有传人。
鲍依斯-科得范式 (BCNF):满足3NF,任何非主属性不能对主键子集依赖 (消除3NF 主属性对码的部分和传递函数依赖)
第四范式(4NF):满足3NF,属性之间不能有非平凡且非函数依赖的多值依赖(消除3NF非平凡且非函数依赖的多值依赖)
标签:3NF,依赖,范式,数据库,依赖于,主键,三大 From: https://blog.51cto.com/coderge/7445905有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。
一般某个数据经常被访问时,比如数据表里存放了语文数学英语成绩,但是如果在某个时间经常要得到它的总分,每次都要进行计算会降低性能,不如加上总分这个冗余字段。