数据库三范式【面试+工作】
设计一个结构良好的数据库可以有效地减少数据冗余以及添加、删除和修改的问题。设计一个“健壮的数据库”需要深刻理解数据库设计的三种范式。数据库三范式是设计数据库时的参考标准。接下来,我们将逐一介绍它们:
一、数据库第一范式:
数据库表的每一列都是不可分割的基础数据项,同一列中不能有多个值,即一个实体中的一个属性不能有多个值,也不能有重复的属性。(保持数据的原子性)
数据的原子性很好理解,就是一个表中的字段不能分开。符合数据库第一范式的表。每个字段都有明确的含义。举个例子:
这是一个简单的员工信息表,包含三个字段:职务号码、姓名和电话号码。通过电话字段获得的信息可能是家用电话、工作场所的电话或手机,因此表达的信息不清楚,因此我们可以更改如下:
经过这个改动,表中表达的信息非常清晰。
第二,数据库的第二种范式:
在满足第一范式的基础上,实体的每个非主键属性完全依赖于主键属性(消除部分依赖)
主键:任何接触过数据库的人肯定都会知道主键,主键明确标识每条记录,通常是一个字段,可以由两个或两个字段组成。
依赖:对于X的每个值,Y都有对应的值,反之亦然,不一定成立。这叫X函数决定Y,Y函数依赖X(X往往是主键)。
以上表为例,每个工号都有一个对应的名称,即工号决定名称,名称取决于工号;但由于员工之间可能存在重名,一个姓名可能对应多个工号,因此姓名无法决定工号。
部分依赖:当主键由两个或多个字段组成,并且表中的某些信息可以由主键的一个字段唯一确定时,我们称这种依赖为部分依赖,例如:
学生选择课程(学号、姓名、专业、课程编号、课程名称、成绩)。在这个表中,一个学生可以选择多门课程,一门课程有多个学生。学生编号和课程编号可以唯一地确定一条记录,因此它们被用作主键。
表中的名称和专业可以由主键中的学号唯一确定,而课程名称可以由课程号唯一确定,这是部分依赖。这种设计不符合第二种范式。
不符合第二范式会带来什么问题?
1.在上表中可以看到数据信息的冗余
2.添加、删除、修改都会有问题。比如“微机原理”这门课如果没有考生,由于缺少学号(主键之一),这门课不能出现在表格中。
如何解决,可以用关系分解的方法消除部分依赖,把上表改成下面三个表:
第三,数据库的第三种范式:
在满足第二范式的基础上,实体中没有非主键属性,传递函数依赖于主键属性。(表中的字段[非主键]对主键没有传输依赖性)
转移依赖:a依赖b,b依赖C,所以可以说a依赖C..看看这张桌子:
此表中有以下决定性关系:学生人数->;姓名、性别、部门号->:决定部门名称和宿舍号->:决定宿舍电话号码时还有一个学生号->;系名,学号->:宿舍电话。
在这样的表中,有一个传递依赖关系。即系名取决于系号,系号取决于学号,所以间接系名取决于学号,宿舍号、宿舍电话、学号三者关系相同。这样设计表格也会带来数据冗余、操作异常等问题。那么我们也可以用关系分解的分解方法来消除转移依赖,把这个表分成三个表:
这就是数据可设计性的三种范式。在设计数据表的过程中注意三种范式的应用,多练习,有助于对三种范式有更深的理解。
1.《数据库范式 数据库三大范式【面试+工作】》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《数据库范式 数据库三大范式【面试+工作】》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/1630648.html