数据库原理及应用 规范化设计(关系数据库理论)

基本概念

1.函数依赖

函数依赖是关系模式中属性之间的一种逻辑依赖关系。

设在关系R中,X、Y为R的两个属性子集,如果每个X值只有一个Y值与之对应(即对于R的任意两个元组T1和T2,只要T1[X]=T2[X],就有T1[Y]=T2[Y]),则称属性Y函数依赖于属性X;或称属性X惟一确定属性Y,记作X→Y
如果X→Y,同时Y不是X的子集,则称X→Y是非平凡的函数依赖

如果一个关系模式设计得不好,说明在它的某些属性之间存在“不良”的函数依赖。

2.完全函数依赖

设在关系R中,X、Y为R的两个属性子集,若X→Y,且对于X的任何一个真子集X’,都有X’ ↛ Y, 则称Y完全函数依赖于X。
记作:
x → f y x\overset{f}{\rightarrow}y xfy

X’→Y,则称Y部分函数依赖于X。
记作: x → p y x\overset{p}{\rightarrow}y xpy

3.传递函数依赖

设在关系R中,X、Y、Z为R的三个属性子集,若X→Y,但Y↛X,而Y→Z(Y∉X,Z∉Y),则称Z传递函数依赖于X 。

如果Y→X,则X↔︎Y,这时称Z对X直接函数依赖,而不是传递函数依赖。

规范化设计

规范化的基本思想是消除关系模式中的数据冗余,解决数据插入、更新、删除时发生异常的现象。这就要求关系数据库设计出来的关系模式满足规范的模式。

关系的规范化:按照一定规范设计关系模式,将结构复杂的关系分解成结构简单的关系,从而把不好的关系数据库模式转变为好的关系数据库模式。

规范化又可以根据不同的要求而分成若干级别。
把关系数据库的规范化过程中为不同程度的规范化要求设立的不同标准称为范式(Normal Form)

1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF

第一范式(First Normal Form):最基本的规范形式,即关系中每个属性都是不可再分的简单项。

每个规范化的关系都属于1NF。只要将所有的属性表示为不可分的数据项,转化后的关系即符合第一范式。

定义 如果关系模式R,其所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R∈1NF。
  • ⚠️数据依赖对关系模式的影响

 [例1]建立一个描述学校教务的数据库:
	学生的学号(Sno)、所在系(Sdept)
	系主任姓名(Mname)、课程号(Cno)
	成绩(Grade)

单一的关系模式 : Student

  • U ={ Sno, Sdept, Mname, Cname, Grade }
  • 属性组U上的一组函数依赖F:
    F ={ Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade }
    数据库原理及应用 规范化设计(关系数据库理论)_第1张图片
    ⚠️ 关系模式Student中存在的问题
    1. 数据冗余太大:
      浪费大量的存储空间。
      例:每一个系主任的姓名重复出现。
    2. 更新异常(Update Anomalies):
      数据冗余 ,更新数据时,维护数据完整性代价大。
      例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组,否则,不同的学生对应的系主任可能不同,造成数据的不一致。
    3. 插入异常(Insertion Anomalies)
      该插的数据插不进去。
      例,如果一个系刚成立,尚无学生,就无法把这个系及其系主任的信息存入数据库。
    4. 删除异常(Deletion Anomalies)
      不该删除的数据不得不删。
      例:如果某个系的学生全毕业了, 在删除该系学生信息的同时,这个系及其系主任的信息也被一并删除。
  • 解决方法: 分解关系模式

把这个单一模式分成3个关系模式:
学生S(Sno,Sdept,Sno → Sdept);
选课SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
系D(Sdept,Mname→ Mname)
这样上面提到的问题不存在了,将学生、成绩和系三个相对独立的实体划分开来,更符合现实世界的实际。

第二范式(Second Normal Form)

定义 如果关系模式R∈1NF,且每个非主属性都完全函数依赖于任意一个侯选关键字,则称R属于第二范式,简称2NF,记作R∈2NF。
投影分解法

过程:

(1) 将部分函数依赖关系的决定方和非主属性从关系模式中提出,单独构成一个关系模式。
(2) 将余下属性加上码(仍要保留部分函数依赖的决定方属性,起分解出来的新关系之间的关联作用)构成另一关系模式。

采用投影分解法将一个1NF的关系分解为多个2NF的关系:

  • 可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
  • 并不能完全消除关系模式中的各种异常情况和数据冗余。

[例2]关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
Sloc为学生住处,假设每个系的学生住在同一个地方

函数依赖包括:
( S n o , C n o ) → p G r a d e (Sno, Cno)\overset{p}{\rightarrow}Grade (Sno,Cno)pGrade
Sno → Sdept
( S n o , C n o ) → p S d e p t (Sno, Cno)\overset{p}{\rightarrow} Sdept (Sno,Cno)pSdept
Sno → Sloc
( S n o , C n o ) → p S l o c (Sno, Cno)\overset{p}{\rightarrow} Sloc (Sno,Cno)pSloc
Sdept → Sloc

数据库原理及应用 规范化设计(关系数据库理论)_第2张图片
⚠️S-L-C不是一个好的关系模式
(1) 插入异常
新生入学:假设Sno=95102,Sdept=IS,Sloc=N的学生还未选课,>因课程号是主属性,因此该学生的信息无法插入SLC。
(2) 删除异常
假定某个学生本来只选修了3号课程这一门课。现在因身体不适,他连>3号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的整个元组都要删除。
(3) 数据冗余度大
如果一个学生选修了10门课程,那么他的Sdept和Sloc值就要重复存储>了10次。
(4) 修改复杂
例如学生转系,在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元>组中全部Sdept、Sloc信息。

  • 原因
    Sdept、 Sloc部分函数依赖于码。
  • 解决方法
    S-L-C分解为两个关系模式,以消除这些部分函数依赖
               S-L(Sno, Sdept, Sloc)
               SC(Sno, Cno, Grade)

数据库原理及应用 规范化设计(关系数据库理论)_第3张图片数据库原理及应用 规范化设计(关系数据库理论)_第4张图片

第三范式(Third Normal Form)

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

若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。

例:2NF关系模式S-L(Sno, Sdept, Sloc)中
函数依赖: Sno→Sdept Sdept ↛ Sno Sdept→Sloc
数据库原理及应用 规范化设计(关系数据库理论)_第5张图片

  • 解决方法
    采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:
    S-D(Sno, Sdept) D-L(Sdept,Sloc)
    数据库原理及应用 规范化设计(关系数据库理论)_第6张图片
    S-D的码为Sno, D-L的码为Sdept。
    S-L(Sno, Sdept, Sloc) ∈ 2NF
    S-L(Sno, Sdept, Sloc) ∈ 3NF
    S-D(Sno,Sdept) ∈ 3NF
    D-L(Sdept, Sloc)∈ 3NF
    分解后的关系模式S-D与D-L中不再存在传递依赖。

BCNF(Boycee Codd Normal Form,巴斯范式)

定义 如果关系模式的所有属性(包括主属性和非主属性)都不传递依赖于R的任何侯选关键字,则称R属于BCNF,记作R∈BCNF。

等价于:每一个决定属性的因素都包含码。

若R∈BCNF:

所有非主属性对每一个码都是完全函数依赖
所有的主属性对每一个不包含它的码,也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性

如果R∈3NF,且R只有一个候选码:

R∈BCNF 在这里插入图片描述 R∈3NF


[例5] 关系模式C(Cno,Cname,Pcno)
C∈3NF C∈BCNF

[例6] 关系模式S(Sno,Sname,Sdept,Sage)
假定S有两个码Sno,Sname
S∈3NF
S ∈ BCNF
[例7]关系模式SJP(S,J,P)
函数依赖:(S,J)→P;(J,P)→S
(S,J)与(J,P)都可以作为候选码,属性相交
SJP∈3NF
SJP∈BCNF
[例8]在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
函数依赖:
(S,J)→T,(S,T)→J,T→J
(S,J)和(S,T)都是候选码
数据库原理及应用 规范化设计(关系数据库理论)_第7张图片
解决方法:将STJ分解为二个关系模式:
ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF
数据库原理及应用 规范化设计(关系数据库理论)_第8张图片

小结

关系模式规范化的目的和原则

一个关系只要其分量都是不可分的数据项,就可称作规范化的关系,但这只是最基本的规范化。
规范化的目的就是使结构合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。
规范化的基本原则就是遵从概念单一化“一事一地”的原则,即一个关系只描述一个实体或者实体间的联系。
若多于一个实体,就把它“分离”出来。
因此,所谓规范化,实质上是概念的单一化,即一个关系表示一个实体。

⚠️注意

规范化的优点是减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度,但在数据查询方面,需要进行关系模式之间的连接操作,因而影响查询的速度。

因此,并不一定要求全部模式都达到BCNF,有时故意保留部分冗余可能更方便数据查询。

数据库原理及应用 规范化设计(关系数据库理论)_第9张图片

你可能感兴趣的:(SQL,Server)