当前位置:首页 » 操作系统 » 数据库关系规范化

数据库关系规范化

发布时间: 2022-05-05 09:27:28

1. 对数据库模式进行规范化处理是在数据库设计的什么阶段

逻辑设计阶段。

因为开发到后面数据库用的地方多了,数据库动一动都是大改。

关系模式的规范化就是根据一个关系属性间不同的依赖情况来区分其为第一,第二,第三,和第四范式,然后用直观的描述将具有不合适性质的关系转换为更合适的形式。

(1)数据库关系规范化扩展阅读:

如果关系模式在达到1NF的基础上,使每个非主属性都完全依赖于每个关系键,则该关系模式达到2NF的要求。

如果关系模式属于2NF,且每个非主属性都不传递依赖于关系的任何键,这该关系模式属于3NF的要求。

若关系符合1NF,且对于每个函数依赖X→Y,X必含有候选键,或者关系中的每个决定属性集都是候选键,则关系达到BCNF的要求。

2. 在数据库的() 阶段将关系模式进行规范化

是C
在关系数据库逻辑设计的时候我们要考虑的一个问题就是:如何构造一个适合于某一具体问题的数据模式。这就牵扯到数据库逻辑设计的工具——关系数据库的规范化理论。
关系模式的规范化就是根据一个关系属性间不同的依赖情况来区分其为第一,第二,第三,和第四范式,然后用直观的描述将具有不合适性质的关系转换为更合适的形式。

3. 数据库如何判断规范化程度

S➡D,D➡M,可以推出S➡M;所以存在传递依赖;
第三范式规定不存在函数依赖,所以不满足第三范式;
属性不可再分,满足第一范式;
第一范式基础上,不存在部分函数依赖,所以满足第二范式,即2NF;
你可能对部分函数依赖不理解,我解释一下:S➡D,意味着D依赖于S,也就是S的内容决定着D的内容;如果{A,B}➡M,同时有B➡M,那就有部分函数依赖了,因为{A,B}中的一个子集是B,B是集合中的一部分;这就是部分函数依赖。

4. 数据库中为什么要对关系模式进行规范化

关系模式进行规范化的目地:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新
关系模式进行规范化的原则:遵从概念单一化 "一事一地"原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
关系模式进行规范化的方法:将关系模式投影分解成两个或两个以上的关系模式。
要求:分解后的关系模式集合应当与原关系模式"等价",即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。
注意:一个关系模式结这分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。

5. 关系数据库规范化理论的基础和内容

一个关系数据库模式由一组关系模式组成,一个关系模式由一组属性名组成。关系数据库设计,就是如何把已给定的相互关联的一组属性名分组,并把每一组属性名组成关系的问题。然而,属性的分组不是唯一的,不同的分组对应着不同的数据库应用系统,它们的效率往往相差很远。
为了使数据库设计合理可靠,简单实用,长期以来,形成了关系数据库设计的理论——规范化理论。
6.1 关系规范化的作用
规范化,就是用形式更为简洁,结构更加规范的关系模式取代原有关系模式的过程。
如果将两个或两个以上实体的数据存放在一个表里,就会出现下列三个问题:
Ø 数据冗余度大
Ø 插入异常
Ø 删除异常
所谓数据冗余,就是相同数据在数据库中多次重复存放的现象。数据冗余不仅会浪费存储空间,而且可能造成数据的不一致性。
插入异常是指,当在不规范的数据表中插入数据时,由于实体完整性约束要求主码不能为空的限制,而使有用数据无法插入的情况。
删除异常是指,当不规范的数据表中某条需要删除的元组中包含有一部分有用数据时,就会出现删除困难。
(以P98工资表为例)
解决上述三个问题的方法,就是将不规范的关系分解成为多个关系,使得每个关系中只包含一个实体的数据。
(讲例子解)
当然,改进后的关系模式也存在另一问题,当查询职工工资时需要将两个关系连接后方能查询,而关系连接的代价也是很大的。
那么,什么样的关系需要分解?分解关系模式的理论依据又是什么?分解完后能否完全消除上述三个问题?回答这些问题需要理论指导。下面,将加以讨论:

6.2 函数依赖

6.2.1属性间关系

实体间的联系有两类:一类是实体与实体之间联系;另一类是实体内部各属性间的联系。数据库建模一章中讨论的是前一类,在这里我们将学习第二类。

和第一类一样,实体内部各属性间的联系也分为1:1、1:n和m:n三类:

例:职工(职工号,姓名,身份证号码,职称,部门)

1、 一对一关系(1:1)

设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中至多有一个值与之对应,反之,对于Y中的任一具体值,X中也至多有一个值与之对应,则称X、Y两属性间是一对一关系。

如本例职工关系中职工号与身份证号码之间就是一对一关系。

2、一对多关系(1:n)

设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中可以找到多个值与之对应,而对于Y中的任一具体值,X中至多只有一个值与之对应,则称属性X对Y是一对多关系。

如职工关系中职工号与职称之间就是一对多的关系。

3、多对多关系(m:n)

设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中有n个值与之对应,而对于Y中的任一具体值,X中也有m个值与之对应,则称属性X对Y是一对多(m:n)关系。

例如,职工关系中,职称与部门之间就是多对多的关系。

上述属性间的三种关系,实际上是属性值之间相互依赖与相互制约的反映,因而称之为属性间的数据依赖。

数据依赖共有三种:

Ø 函数依赖(Functional Dependency,FD)

Ø 多值依赖(Multivalued Dependency,MVD)

Ø 连接依赖(Join Dependency,JD)

其中最重要的是函数依赖和多值依赖。

6.2.2 函数依赖

函数依赖,是属性之间的一种联系。在关系R中,X、Y为R的两个属性或属性组,如果对于R的所有关系r 都存在:对于X的每一个具体值,Y都只有一个具体值与之对应,则称属性Y函数依赖于属性X。或者说,属性X函数决定属性Y,记作X→Y。其中X叫作决定因素,Y叫作被决定因素。

上述定义,可简言之:如果属性X的值决定属性Y的值,那么属性Y函数依赖于属性X。换一种说法:如果知道X的值,就可以获得Y的值,则可以说X决定Y。

若Y函数不依赖于X,记作:X→Y。

X Y

若X→Y,Y→X,记作:

前面学习的属性间的三种关系,并不是每种关系中都存在着函数依赖。

u 如果X、Y间是1:1关系,则存在函数依赖 X←→Y

u 如果X、Y间是1:n关系,则存在函数依赖: X→Y或Y→X(多方为决定因素)

u 如果X、Y间是m:n关系,则不存在函数依赖。

注意,属性间的函数依赖不是指R的某个或某些关系子集满足上述限定条件,而是指R的一切关系子集都要满足定义中的限定。只要有一个具体的关系r(R的一个关系子集)不满足定义中的条件,就破坏了函数依赖,使函数依赖不成立。

这里的关系子集,指的是R的某一部分元组的集合,例如:地测学院的学生关系中只包含了地测学院学生的数据,所以它是长安大学学生关系的一个子集。

6.2.3 码的定义

前面,我们对码进行了直观化的定义,下面用函数依赖的概念对码作出较为精确的形式化的定义:

设K是关系模式R(U,F)中的属性或属性组,K’是K的任一子集。若K→U,而不存在K’→U,则K为R的候选码(Candidate Key)

Ø 若候选码多于一个,则选其中的一个为主码(Primary Key);

Ø 包含在任一候选码中的属性,叫做主属性(Primary Attribute);

Ø 不包含在任何码中的属性称为非主属性(Nonprime Attribute)或非码属性(Nonkey Attribute)

Ø 关系模式中,最简单的情况是单个属性是码,称为单码(Single Key);最极端的情况是整个属性组是码,称为全码(All-Key)。

前面已多次遇到单码的情况,下面是一个全码的例子:

签约(演员名,制片公司,电影名)

外码:设有两个关系R和S,X是R的属性或属性组,并且X不是R的码,但X是S的码(或与S的码意义相同),则称X是R的外部码(Foreign Key),简称外码或外键。

如:职工(职工号,姓名,性别,职称,部门号)

部门(部门号,部门名,电话,负责人)

其中职工关系中的“部门号”就是职工关系的一个外码。

在此需要注意,在定义中说X不是R的码,并不是说X不是R的主属性,X不是码,但可以是码的组成属性,或者是任一候选码中的一个主属性。

如:学生(学生号,姓名,性别,年龄…)

课程(课程号,课程名,任课老师…)

选课(学生号,课程号,成绩)

在选课关系中,(学生号,课程号)是该关系的码,学生号、课程号又分别是组成主码的属性(但单独不是码),它们分别是学生关系和课程关系的主码,所以是选课关系的两个外码。

关系间的联系,可以通过同时存在于两个或多个关系中的主码和外码的取值来建立。如要查询某个职工所在部门的情况,只需查询部门表中的部门号与该职工部门号相同的记录即可。所以,主码和外码提供了一个表示关系间联系的途径。

6.2.4 函数依赖和码的唯一性

由上述码的形式化定义,我们可以说:码是由一个或多个属性组成的,可唯一标识元组的最小属性组。

码在关系中总是唯一的,即一个码函数唯一地决定一行。如果码的值重复,则整个元组都会重复。否则,违反了实体完整性规则。而元组的重复则表示存在两个完全相同的实体,这显然是不可能的,所以码是不允许重复取值的。

所以,只有当某个属性或属性组能够函数决定关系中的每一个其它的属性,且该属性组的任何一个真子集都做不到这一点时,该属性或属性组才是该关系的码。

函数依赖是一个与数据有关的事物规则的概念。如果属性B函数依赖于属性A,那么若知道了A的值,则完全可以找到B的值。这并非是可以由A的值计算出B的值,而是逻辑上只能存在一个B的值。

6.3 关系模式的规范化

一、非规范化的关系

当一个表中存在还可以再分的数据项时,这个表就是非规范化的表。非规范化表存在两种情况:

Ø 表中具有组合数据项(P102表6-4)

Ø 表中具有多值数据项(P103表6-5)

例:

职工号
姓名
工资

基本工资
职务工资
工龄工资

1002
张三
1000
800
200

职工号
姓名
职称
系名
系办地址
学历
毕业年份

001
张三
教授
计算机
1305
大学

研究生
1963

1982

那么什么是规范化关系呢?

当一个关系中的所有分量都是不可再分的数据项时,该关系是规范化的。即当表中不存在组合数据项和多值数据项,只存在不可分的数据项时,这个表是规范化的。

二维表按其规范化程度从低到高可分为5级范式(Normal Form),分别称为1NF、2NF、3NF(BCNF)、4NF、5NF。规范化程度较高者必是较低者的子集,即:

1NF 2NF 3NF BCNF 4NF 5NF

二、第一范式(1NF)

定义1:如果关系模式R中不包含多值属性,则R满足第一范式(First Normal Form),记作:

R∈1NF

1NF是对关系的最低要求,不满足1NF的关系是非规范化的关系。

非规范化关系转化为规范化关系1NF方法很简单,只要上表分别从横向、纵向展开即可。如下表:

职工号
姓名
基本工资
职务工资
工龄工资

1002
张三
1000
800
200

1005
李四
1200
900
150

职工号
姓名
职称
系名
系办地址
学历
毕业年份

1002
张三
教授
计算机
1305
大学
1963

1002
张三
教授
计算机
1305
研究生
1982

1005
李四
讲师
信电
2206
大学
1989

上表虽然符合1NF,但仍是有问题的关系,表中存在大量的数据冗余和潜在的数据更新异常。原因是(职工号,学历)是右表的码,但姓名、职称、系名、系办地址却与学历无关,只与码的一部分有关。所以上表还需进一步地规范化。

三、第二范式(2NF)

定义1:设X、Y是关系R的两个不同的属性或属性组,且X → Y。如果存在X的某一个真子集X’,使X’ → Y成立,则称Y部分函数依赖于X,记作:X P→ Y(Partial)。反之,则称Y完全函数依赖于X,记作:X F→ Y (Full)

定义2:如果一个关系 R∈1NF,且它的所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作:R∈2NF。

说明:上述定义中所谓的候选码也包括主码,因为码首先应是候选码,才可以被指定为码。

例如关系模式:

职工(职工号,姓名,职称,项目号,项目名称,项目角色)中

(职工号,项目号)是该关系的码,而职工号→姓名、职工号→职称、项目号→项目名称…

所以(职工号,项目号)P→ 职称、(职工号,项目号)P→ 项目名称

故上述职工关系不符合第二范式要求。它存在三个问题:插入异常、删除异常和修改异常。

其中修改异常是这样的,当职工关系中项目名称发生变化时,由于参与该项目的人员很多,每人一条记录,要修改项目信息,就得对每一个参加该项目的人员信息进行修改,加大了工作量,还有可能发生遗漏,存在着数据一致性被破坏的可能。

可把上述职工关系分解成如下三个关系:

职工(职工号,姓名,职称)

参与项目(职工号,项目号,项目角色)

项目(项目号,项目名称)

上述三个关系都符合定义2的要求,所以都符合2NF

推论:如果关系模式R∈1NF,且它的每一个候选码都是单码,则R∈2NF

符合第二范式的关系模式仍可能存在数据冗余、更新异常等问题。如关系

职工信息(职工号,姓名,职称,系名,系办地址)

虽然也符合2NF,但当某个系中有100名职工时,元组中的系办地址就要重复100次,存在着较高的数据冗余。原因是关系中,系办地址不是直接函数依赖于职工号,而是因为职工号函数决定系名,而系名函数决定系办地址,才使得系办地址函数依赖于职工号,这种依赖是一个传递依赖的过程。

所以,上述职工信息的关系模式还需要进一步的规范化。

四、第三范式(3NF)

定义1:在关系R中,X、Y、Z是R的三个不同的属性或属性组,如果X→Y,Y→Z, 但Y→X,且Y不是X的子集,则称Z传递函数依赖于X。

定义2:如果关系模式R∈2NF,且它的每一个非主属性都不传递依赖于任何候选码,则称R是第三范式,记作:R∈3NF

推论1:如果关系模式R∈1NF,且它的每一个非主属性既不部分依赖、也不传递依赖于任何候选码,则R∈3NF

推论2:不存非主属性的关系模式一定为3NF

五、改进的3NF——BCNF(Boyee-Codd Normal Form)

定义:设关系模式R(U,F)∈1NF,若F的任一函数依赖X→Y(Y X)中X都包含了R的一个码,则称R∈BCNF。

换言之,在关系模式R中,如果每一个函数依赖的决定因素都包含码,则R∈BCNF

推论:如果R∈BCNF,则:

Ø R中所有非主属性对每一个码都是完全函数依赖;

Ø R中所有主属性对每一个不包含它的码,都是完全函数依赖;

Ø R中没有任何属性完全函数依赖于非码的任何一组属性。

定理:如果R∈BCNF,则R∈3NF一定成立。

证明:(结合传递依赖的定义,用反证法)

注意:当R∈3NF时,R未必属于BCNF。因为3NF比BCNF放宽了一个限制,它允许决定因素不包含码。例如:

通讯(城市名,街道名,邮政编码)中:

F={(城市名,街道名)→邮政编码,邮政编码→城市名}

非主属性邮政编码完全函数依赖于码,且无传递依赖,故属于3NF,但邮政编码也是一个决定因素,而且它没有包含码,所以该关系不属于BCNF。

又如:

Teaching(Student,Teacher,Course) 简记为Teaching(S,T,C)

规定:一个教师只能教一门课,每门课程可由多个教师讲授;学生一旦选定某门课程,教师就相应地固定。

F={T→C,(S,C)→T,(S,T) →C}

该关系的候选码是(S,C)和(S,T),因此,三个属性都是主属性,由于不存在非主属性,该关系一定是3NF。但由于决定因素T没包含码,故它不是BCNF。

关系模式Teaching仍然存在着数据冗余问题,因为存在着主属性对码的部分函数依赖问题。

确切地表示:F={T→C,(S,C)P→T,(S,T) P→C}

所以Teaching关系可以分解为以下两个BCNF关系模式:

Teacher(Teacher,Course) Student(Student,Teacher)

3NF的“不彻底”性,表现在可能存在主属性对码的部分依赖和传递依赖。

一个关系模式如果达到了BCNF,那么,在函数依赖范围内,它就已经实现了彻底的分离,消除了数据冗余、插入和删除异常。
6.4 多值依赖和第四范式

一、多值依赖(Multivalued Dependency)

课程C
教员T
参考书B

物理
李勇
普通物理学

物理
李勇
光学原理

物理
李勇
物理习题集

物理
王军
普通物理学

物理
王军
光学原理

物理
王军
物理习题集

数学
李勇
数学分析

数学
李勇
微分方程

数学
李勇
高等代数

数学
张平
数学分析

数学
张平
微分方程

数学
张平
高等代数

计算数学
张平
数学分析

计算数学
张平
计算数学

计算数学
周峰
数学分析

计算数学
周峰
计算数学

课程C
教员T
参考书B

物理
李勇

王军
普通物理学

光学原理

物理习题集

数学
李勇

张平
数学分析

微分方程

高等代数

计算数学
张平

周峰
数学分析

计算数学

例:学校中某一门课程由多个教员讲授,他们使用相同的一套参考书,每个教员可以讲授多门课程,每种参考书可以供多门课程使用。下列是用一个非规范化的表来表示教员T,课程C和参考书B之间的关系。

把上表变换成一张规范化的二维表Teaching,如右表

关系模式Teaching(C,T,B)的码是(C,T,B),即All-Key。因而Teaching∈BCNF。按照上述语义规定,当某门课程增加一名讲课教员时,就要向Teaching表中增加与相应参考书等数目的元组。同样,某门课程要去掉一本参考书时,则必须删除相应数目的元组。

对数据的增、删、改很不方便,数据的冗余也十分明显。如果仔细考察这类关系模式,会发现它具有一种称之为多值依赖的数据依赖关系。

定义:设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,且Z=U-X-Y。如果对R(U)的任一关系r,给定一对(x,z)值,都有一组y值与之对应,这组y值仅仅决定于x值而与z值无关。则称Y多值依赖于X,或X多值决定Y,记作:X→→Y。――

例如,在关系模式Teaching中,对于一个(C,B)值(物理,普通物理学),有一组T值{李勇,王军},而这组值仅仅决定于课程C上的值(物理)。即对于另一个(物理,光学原理),它对应的T值仍然是{李勇,王军},所以T的值与B的值无关,仅决定于C的值,即C→→T 。

多值依赖的另一个等价的形式化定义为:

设关系模式R(U),X、Y、Z是U的子集,Z=U-X-Y,r是R的任意一个关系,t1、t2是r的任意两个元组。如果t1[X]=t2[X],并在r中存在两个元组t3、t4,使得:

t3[X]=t4[X]=t1[X]

t3[Y]=t1[Y],t3[Z]=t2[Z],

t4[Y]=t2[Y],t4[Z]=t1[Z]

成立,则X→→Y。

换句话说:如果X→→Y在R(U)中成立,则只要在R的任一关系r中存在两个元组t1、t2在X属性上的值相等,则交换这两个元组在Y(或Z)上的值后得到的两个新元组t3、t4也必是关系r中的元组。

定义中如果Z=Ф(空集),则称X→→Y为平凡的多值依赖,否则为非平凡的多值依赖。

多值依赖具有如下性质:

1. 对称性:若X→→Y,则X→→Z,其中Z=U-X-Y

2. 传递性:若X→→Y,Y→→Z,则X→→Z-Y

3. 若X→→Y,X→→Z,则X→→YZ

4. 若X→→Y,X→→Z,则X→→Y∩Z

5. 若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y

多值依赖与函数依赖相比,具有下面两个基本区别:

(1)多值依赖的有效性与属性集的范围有关

若X→→Y在U上成立,则在V(XY V U)上一定成立;反之则不然,即X→→Y在V(V U)上成立,在U上并不一定成立。这是因为多值依赖的定义中不仅涉及属性组X、Y,而且涉及U中的其余属性Z(Z=U-X-Y)。

一般地说,在R(U)上若有X→→Y在V(V U)上成立,则称X→→Y为R(U)的嵌入型多值依赖。

而在关系模式R(U)中函数依赖X→Y的有效性,仅决定于X和Y这两个属性集的值。只要在R(U)的任何一个关系r中,元组在X和Y上的值使得X→Y成立,则X→Y在任何属性集V(XY V U)上也成立。

(2)若函数依赖X→Y在R(U)上成立,则对于任何Y’ Y 均有X→Y’ 成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于任何Y’ Y有X→→Y’ 成立。

多值依赖的约束规则:在具有多值依赖的关系中,如果随便删去一个元组,就会破坏其对称性,那么,为了保持多值依赖关系中的“多值依赖”性,就必须删去另外的相关元组以维持其对称性。这就是多值依赖的约束规则。目前的RDBMS尚不具有维护这种约束的能力,需要程序员在编程中实现。

函数依赖可看成是多值依赖的特例,即函数依赖一定是多值依赖。而多值依赖则不一定就有函数依赖。

二、第四范式(4NF)

定义:如果关系模式R∈1NF,对于R的每个非平凡的多值依赖X→→Y(Y X),X含有码,则称R是第四范式,即R∈4NF

课程C
教员T
参考书B

物理
李勇
普通物理学

物理
李勇
光学原理

物理
李勇
物理习题集

物理
王军
普通物理学

物理
王军
光学原理

物理
王军
物理习题集

数学
李勇
数学分析

数学
李勇
微分方程

数学
李勇
高等代数

数学
张平
数学分析

数学
张平
微分方程

数学
张平
高等代数

计算数学
张平
数学分析

计算数学
张平
计算数学

计算数学
周峰
数学分析

计算数学
周峰
计算数学

Teaching关系

关系模式R∈4NF时,R中所有的非平凡多值依赖实际上就是函数依赖。因为每一个决定因素中都含有码,所以R一定属于BCNF。

4NF实际上就是限制关系模式的属性间不允许有非平凡,而且非函数依赖的多值依赖存在。反过来说,4NF所允许的非平凡多值依赖实际上是函数依赖。

例题中的Teaching关系属于BCNF,但它不属于4NF。因为它的码是(C,T,B),关系中存在非平凡多值依赖C→→T ,C→→B,但C不包含码,而只是码的一部分。

课程C
参考书B

物理
普通物理学

物理
光学原理

物理
物理习题集

数学
数学分析

数学
微分方程

数学
高等代数

计算数学
数学分析

计算数学
计算数学

CB关系

课程C
教员T

物理
李勇

物理
王军

数学
李勇

数学
张平

计算数学
张平

计算数学
周峰

CT关系

要使Teaching关系符合4NF,必须将其分解为CT(C,T)和CB(C,B)两个关系模式。如右表:

从表中显而易见,符合BCNF的关系Teaching仍然存在着数据冗余,而分解后的关系CT和CB中只有平凡多值依赖,所以符合4NF,它们已经消除了数据冗余。可以说:BCNF是在只有函数依赖的关系模式中,规范化程度最高的范式,而4NF是在有多值依赖的关系模式中,规范化程度最高的范式。

如果关系模式中存在连接依赖,即便它符合4NF,仍有可能遇到数据冗余及更新异常等问题。所以对于达到4NF的关系模式,还需要消除其中可能存在的连接依赖,才可以进一步达到5NF的关系模式。

关于连接依赖和5NF的内容,已超出了本课程教学大纲的要求,在此不再介绍。

6. 说明在关系数据库设计中为什么进行关系的规范化

进行数据库关系规范化原因:
规范的数据库关系可以有效的减少数据冗余量
规范的数据库关系可以提高查询的效率,特别是在多表查询时。
规范的数据库关系可以是程序设计更加合理,有效

7. 关系数据库的规范化理论是为了解决什么问题

关系数据库逻辑设计的好坏与其所含的各个关系模式设计的好坏相关。如果各个关系模式结构合理、功能简单明确、规范化程度高,就能确保所建立的数据库具有较少的数据冗余、较高的数据共享度、较好的数据一致性,并为数据库系统能够很好的应用于实际打下良好的基础。
因此,关系的规范化理论就是为解决数据冗余、删除异常和插入异常等问题而提出来的。

8. 理解什么是数据库规范化

理解数据库规范化的意义
【TechTarget中国原创】数据库规范化是由Edgar Frank Codd提出的,他是IBM公司的一位计算机科学家,他在自己的论文《20世纪70年代大型共享数据银行数据关系模型》中首次提出这种说法。数据库规范化是一个过程,这个过程中需要对现存表结构进行修改,把表转化使遵循一系列先进的范式。
它着重于消除开发人员和他们项目的“电子表格综合症”。电子表格综合症是指开发人员倾向于在尽可能少的表中挤下尽可能多的信息。
早些时候,由于受电子表格的概念以及在电子表格中管理数据思路的影响,开发人员们一直采用与涉及电子表格相同的思路设计MySQL数据库。现在,再用这种方法设计MySQL数据库被认为是不明智的做法,因为这种电子表格综合症设计的表在每次数据库有很小的改变时,都要持续不断地进行重新设计。
在MySQL中实现数据库规范化的好处
通过智能数据分类,降低存储空间使用量是对MySQL实现数据库规范化的众多好处之一。它帮助实现了更好,更快,更强的搜索功能,因为它与早期基于混合实体的搜索方式相比,需要扫描更少的实体。通过数据库规范化,数据完整性也得以改善,因为它把所有数据分成单独的实体,并用关联数据在实体间建立强连接。
Mike Hillyer是之前MySQL AB的一位技术作家,他解释说:“数据库规范化的目标是确保每个表中所有非键列都直接依赖于主键:整个都是键,除了键没有其它。有了这个目标,随之而来还有一些好处,我们降低了冗余,减少了异常,提高了效率。”
数据规范化很容易做到
下面的例子将说明数据库规范化如何帮助实现MySQL中的良好设计。下面的表展示了需要在数据库中捕获的数据。
Chad Russell is a programmer and system administrator who owns his own internet hosting company. Jon Stephens is a member of the MySQL AB documentation team.
在上面展示的例子中,如果任意一个条件作为识别主键的话,会有大量的存储空间被浪费掉。因此,数据库规范化是必不可少的。这是一个循序渐进的过程,不能随意进行。下面的步骤可以帮你在MySQL中实现数据库规范化。转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

9. 数据库的规范化设计方法~

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

例如,如下的数据库表是符合第一范式的:

字段1 字段2 字段3 字段4

而这样的数据库表是不符合第一范式的:

字段1 字段2 字段3 字段4
字段3.1 字段3.2

很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称) → (学分)

(学号) → (姓名, 年龄)

即存在组合关键字中的字段决定非关键字的情况。

由于不符合2NF,这个选课关系表会存在如下问题:

(1) 数据冗余:

同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

(2) 更新异常:

若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

(3) 插入异常:

假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

(4) 删除异常:

假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

把选课关系表SelectCourse改为如下三个表:

学生:Student(学号, 姓名, 年龄);

课程:Course(课程名称, 学分);

选课关系:SelectCourse(学号, 课程名称, 成绩)。

这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。

另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:

关键字段 → 非关键字段x → 非关键字段y

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

(学号) → (所在学院) → (学院地点, 学院电话)

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

把学生关系表分为如下两个表:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 地点, 电话)。

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。

假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

(仓库ID, 存储物品ID) →(管理员ID, 数量)

(管理员ID, 存储物品ID) → (仓库ID, 数量)

所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

(仓库ID) → (管理员ID)

(管理员ID) → (仓库ID)

即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

(1) 删除异常:

当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。

(2) 插入异常:

当仓库没有存储任何物品时,无法给仓库分配管理员。

(3) 更新异常:

如果仓库换了管理员,则表中所有行的管理员ID都要修改。

把仓库管理关系表分解为二个关系表:

仓库管理:StorehouseManage(仓库ID, 管理员ID);

仓库:Storehouse(仓库ID, 存储物品ID, 数量)。

这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

范式应用

我们来逐步搞定一个论坛的数据库,有如下信息:

(1) 用户:用户名,email,主页,电话,联系地址

(2) 帖子:发帖标题,发帖内容,回复标题,回复内容

第一次我们将数据库设计为仅仅存在表:

用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容

这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"发帖ID"、"回复ID"字段,即将表修改为:

用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容

这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行:

(用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)

10. 什么是数据库中的规范化

规范化理论把关系应满足的规范要求分为几级,满足最低要求的一级叫做第一范式(1NF),在第一范式的基础上提出了第二范式(2NF),在第二范式的基础上又提出了第三范式(3NF),以后又提出了BCNF范式,4NF,5NF。范式的等级越高,应满足的约束集条件也越严格。

第一范式(1NF)
在关系模式R中中,如果每个属性值都是不可再分的原子属性,则称R是第一范式的关系[2]。例如:关系R(职工号,姓名,电话号码)中一个人可能有一个办公室电话和一个住宅电话号码,规范成为1NF的方法一般是将电话号码分为单位电话和住宅电话两个属性,即 R(职工号,姓名,办公电话,住宅电话)。1NF是关系模式的最低要求。

第二范式(2NF)
如果关系模式R是1NF且其中的所有非主属性都完全函数依赖于关键字,则称关系R 是属于第二范式的[2]。例:选课关系 SC(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。 由以上条件,关键字为组合关键字(SNO,CNO)。在应用中使用以上关系模式有以下问题: (1)数据冗余,假设同一门课由40个学生选修,学分就重复40次;(2)更新复杂,若调整了某课程的学分,相应元组的CREDIT值都要更新,有可能会出现同一门课学分不同;(3)插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入;(4).删除异常,若学生已经结业,从当前数据库删除选修记录,而某些课程新生尚未选修,则此门课程及学分记录无法保存。以上问题产生的原因是非主属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。解决方法是将以上关系分解成两个关系模式 SC(SNO,CNO,GRADE)和C(CNO,CREDIT)。新关系包括两个关系模式,它们之间通过SC中的外键CNO相联系,需要时再进行自然联接,恢复原来的关系

第三范式(3NF)
如果关系模式R是2NF且其中的所有非主属性都不传递依赖于码,则称关系R是属于第三范式的[1]。例如关系模式S(SNO,SNAME,DNO,DNAME,LOCATION)中各属性分别代表学号、姓名、所在系、系名称、系地址。关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但关系S肯定有大量的冗余,有关学生所在系的几个属性DNO,DNAME,LOCATION将重复存储,插入、删除和修改时也将产生类似以上例的情况。原因在于关系中存在传递依赖,即SNO -> DNO,DNO -> LOCATION, 因此关键字SNO对LOCATION函数决定是通过传递依赖SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。解决方法是将该关系模式分解为两个关系S(SNO,SNAME,DNO)和D(DNO,DNAME,LOCATION),两个关系通过S中的外键DNO联系。

BC范式(BCNF)
如果关系模式R的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选关键字,那么称关系R是属于BCNF的。或者说关系模式R中,如果每个决定因素都包含关键字(而不是被关键字所包含),则R是BCNF[3]。 通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

热点内容
如何删除手机中的游戏缓存 发布:2024-10-07 02:11:28 浏览:873
解锁数据库用户 发布:2024-10-07 01:55:54 浏览:826
关系数据库的关键字是指 发布:2024-10-07 01:55:54 浏览:517
java数据库date 发布:2024-10-07 01:55:21 浏览:458
安卓12如何开通运用权限 发布:2024-10-07 01:29:54 浏览:134
电脑显示已连接图形服务器 发布:2024-10-07 01:24:38 浏览:797
如何恢复手机服务器的时速 发布:2024-10-07 01:22:30 浏览:749
c语言六套 发布:2024-10-07 01:22:26 浏览:383
安卓手机系统文件存在哪里 发布:2024-10-07 01:21:30 浏览:898
编译原理文字题 发布:2024-10-07 00:53:58 浏览:332