理解数据库设计几种范式后,恭喜你,你又进阶了!

数据库设计几种范式



前言

在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确的分布到数据库的表中。使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大的简化应用程序中的其他内容,比如查询窗体报表代码等。按照数据库规范化对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。相信我们大家都知道数据库的数据结构,一般是B+树和哈希索引。对于程序开发来说,我们更多的是用到搜索功能,因此好的搜索结果的基础是有好的搜索规范。

在这里插入图片描述

一、范式是什么?

1.1 范式定义

范式是在识别数据库中的元素,关系及其。定义所需的表和各表中的项目这些。初始工作之后的一个细化的
过程, 常见的范式有1NF,2NF,3NF,BCNF,4NF

1.2 范式之间的关系

关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。对于各种范式之间有如下关系:
在这里插入图片描述
在这里插入图片描述

每一层的关系如下图所示:

在这里插入图片描述

二、常见的范式

2.1 1NF理解

定义: 第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值及实体中的某个属性不能有多个值或者不能有重复的属性,如果出出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多的关系,第一范式的模式要求,属性值不可再分割成更小部分,仅属性项不能是属性组合,由主属性组成,简而言之第一范式就是无重复的列。

理解: 第一范式强调数据表的原子性,是其他范式的基础。如下图所示数据库就不符合第一范式:
错误示范:
在这里插入图片描述
正确示范:
在这里插入图片描述

2.2 2NF理解

定义: 第二范式是在第一范式的基础上建立的,即满足第2范式,必须先满足第一范式,第二范式要求,数据库表中的每一个实例的行,必须可以被唯一的区分,为了实现区分通常需要加一个列以存储各个实例的唯一标识,如果关系模式R为第一范式,并且R中的每一个非主属性完全函数依赖于R的某个后,选件则称R为第二范式,如果a是关系模式R的候选键的一个属性,则称a是R的主属性,否则称a是R的非主属性.

例如在选课关系表中学号,课程号,成绩,学分。关键字为组合关键字学号,课程号,但由于非主属性学分,仅依赖于课程号对关键字学号,课程号只是部分依赖,而不是完全依赖,因此这种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外观建制课程号联系,在需要时进行连接。

主属性: 所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。

在上面的学生表中,学号和姓名就是该关系的主属性,年龄和性别就是非主属性。

函数依赖: 设R(U)是属性集U上的关系模式,X、Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称Y函数依赖于X或X函数确定Y。

完全函数依赖: 设R(U)是属性集U上的关系模式,X、Y是U的子集。如果Y函数依赖于X,且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。记作:如果Y函数依赖于X,但Y不完全函数依赖于X,则称Y对X部分函数依赖。

理解: 第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。由此可知单主属性的关系均属于第二范式。

判断一个关系是否属于第二范式:

找出数据表中的所有码;
找出所有主属性和非主属性;
判断所有的非主属性对码的部分函数依赖。

以学生表为例,表中的码为学号(码可以为学号或者姓名,此处假定码为学号),非主属性为性别、年龄(其余都为主属性),当学号确定时,性别、年龄也都惟一的被确定为,故学生表的设计满足第二范式(学生表为单主属性的关系)。

下面举一个不满足第二范式的关系。
有关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade),其中Sno, Sdept, Sloc, Cno, Grade依次表示学生的学号、所在的系、住处、课程号、班级,并且每个系的学生住在同一个地方。可知S-L-C的码为(Sno, Cno),则存在以下函数依赖:

可以看到,非主属性Sloc、Sdept并不完全函数依赖于码,因此关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)不符合第二范式。

2.3 3NF理解

定义:如果关系模式R是第二,范式前每个非主属性都不传递,依赖于R的候选键,则称R是第三范式模式

在这里插入图片描述
理解: 第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上,消除了传递依赖。

他构建在第三范式的基础上,如果关系模式二是第一范式且每个属性。都不传递于R的候选键,那么称R为BC nf模式。

2.4 BCNF理解

定义:他构建在第三范式的基础上,如果关系模式二是第一范式且每个属性。都不传递于R的候选键,那么称R为BC nf模式。

理解: 根据定义我们可以得到结论,一个满足BC范式的关系模式有:
所有非主属性对每一个码都是完全函数依赖;
所有主属性对每一个不包含它的码也是完全函数依赖;
没有任何属性完全函数依赖于非码的任何一组属性。
例如有关系模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示课程号、课程名、先修课。可知关系C只有一个码Cno,且没有任何属性对Cno部分函数依赖或传递函数依赖,所以关系C属于第三范式,同时Cno是C中的唯一决定因素,所以C也属于BC范式。

在这里插入图片描述

2.5 4NF理解

定义:设R是一个关系模式,D是R上的多值依赖几何?如果D中存在凡多值依赖X指向Y时, X必是R的超键,那么称R是第四范式的模式。。

理解: 显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。
在这里插入图片描述

三、总结

实际生产中,很多数据表都不符合三范式的,磁盘不值钱,部分数据冗余,拿空间换时间是常态。所以大家如果没有深入理解,其实也可以开发,哈哈哈!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ILOVEMYDEAR/article/details/118372184
今日推荐