数据库三大范式

一、什么是数据库三大范式

范式的简介

        范式,是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。

        范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。

        目前,主要有6种范式,依次是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd 范式(BCNF)、第四范式(4NF)和 第五范式(5NF)。

        满足最低要求的叫第一范式,在第一范式基础上进一步满足一些要求的为第二范式,其余依此类推。

        通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

        数据往往种类繁多,而且每种数据之间又互相关联,因此,在设计数据库时,所需要满足的范式越多,那表的层次及结构也就越复杂,最终造成数据的处理困难。

        所以在使用范式的时候也要细细斟酌,是否一定要使用该范式,必须根据实际情况做出选择。


第一范式

        第一范式就是属性不可分割,每个字段都应该是不可再拆分的。

        即每一个字段应该是最小单位,不能被拆分成多个字段,否则它就是可分割的,不符合第一范式。

        比如学生表(Student)中有个字段为姓名(name),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME,这时候姓名这个字段就是还可以拆分为更小的单位的字段,就不符合第一范式了。


第二范式

        第二范式是在第一范式的基础上更进一步。第二范式就是要求表中要有主键,表中其他字段都依赖于主键,因此第二范式只要记住主键约束就好了。

        比如在学生表(Student)中,姓名(name)可以作为主键吗?不可以!因为学生的姓名可能会同名,这样就不唯一了。所以需要学号这样的唯一值作为主键才行。

        而表中其他字段都依赖于主键,意思是学生表中 “张三” 同学的年龄和性别等字段,不能存储别人的年龄性别,必须是和他自己相关的。因为张三的学号就决定了,这行记录归张三所有,不能给无关人员使用。


第三范式

        第三范式就是确保数据表中的每一列数据都和主键直接相关,而不能间接相关。也就是要消除传递依赖,方便理解,可以看做是消除冗余,因此第三范式只要记住外键约束就好了。

        比如在设计一个学生表的时候,可以将班主任的主键编号作为一个外键和学生表建立相应的关系,而不可以在学生表中添加关于班主任其它信息(比如姓名、年龄等)的字段。

        这样在查询学生信息以及学生的班主任信息的时候,就可以使用班主任编号来引用班主任表中的数据,也不必在学生表中多次输入班主任信息的内容,减小了数据冗余。


二、数据库三大范式的作用

        范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。但是操作困难,因为需要联系多个表才能得到所需要数据,而且范式越高性能就会越差。要权衡是否使用更高范式是比较麻烦的,一般在项目中,用得最多的也就是第三范式。

        实际上设计任何一种数据库应用系统,不论是基于何种数据模型的,都会遇到如何构造合适的数据模式即逻辑结构的问题。

        由于关系模型有严格的数学理论基础,并且可以向别的数据模型转换。所以要设计合适的关系模式,使其逻辑结构更加符合要求,出现了规范化理论。

        而三大范式即第一、第二和第三范式就是规范化理论重要部分,是为了在设计中更好的解决数据冗余,数据有效性检查,提高存储效率。


posted @ 2021-07-09 12:19  distance66  阅读(2768)  评论(2编辑  收藏  举报