精华内容
下载资源
问答
  • 关系数据库规范化理论

    千次阅读 2016-03-16 22:53:23
    关系数据库规范化理论

    本文来源于:http://blog.sina.com.cn/s/blog_4d73b3a7010008st.html

    关系型数据库在设计时应该遵守一定的规则,即遵循数据库的范式理论。数据库的数据是一切操作的基础,如果数据库设计不好,利用其它方法来提高数据库性能的效果都将是有限的。而设计的关键是如何使数据库能合理地存储用户的数据,方便用户进行数据处理。
    规范化理论是将一个不合理的关系模式如何转化为合理的关系模式理论,规范化理论是围绕范式而建立的。规范化理论认为,一个关系型数据库中所有的关系,都应满足一定的规范。规范化理论把关系应满足的规范要求分为几级,满足最低要求的一级叫做第一范式(1NF),在第一范式的基础上提出了第二范式(2NF),在第二范式的基础上又提出了第三范式(3NF),以后又提出了BCNF范式,4NF,5NF。范式的等级越高,应满足的约束条件也越严格。规范的每一级别都依赖于它的前一级别,例如若一个关系模式满足2NF,则一定满足1NF。
    下面我按照范式设计级别依次介绍1NF(第一范式)、2NF(第二范式)、3NF(第三范式)和BCNF,4NF(第四范式)和5NF(第五范式)。
    第一范式(1NF):在数据库表中,要求每个属性值都是不可再分的,则该关系满足第一范式。
    如:某关系表SC由 STUDENT_ID(学生编号)和COURSE(课程名称)两个属性组成。这样的关系模式在实际应用过程中会存在这样问题,一个学生可以同时选择多门课程,现将此关系中STUDENT_ID作为关键字,COURSE字段中存在了多个值的情况,象这样:


    STUDENT_ID

    COURSE

    001

    中国文化史概要、音乐欣赏

    002

    音乐欣赏、程序设计

    这样的关系即不满足第一范式的要求。实际应用中,在设计表时,都应该满足第一范式要求。


    STUDENT_ID

    COURSE

    001

    中国文化史概要

    001

    音乐欣赏

    002

    音乐欣赏

    002

    程序设计

    解决方法:

     

     

     




    第二范式(2NF):如果某关系满足第一范式,而且它的所有非关键字属性都完全依赖于整个主关键字(不存在部分依赖),则该关系满足第二范式。
    如:关系LESSON(课程表):由SNO,CNO,GRADE,CREDIT四个属性组成,其中SNO为学号、CNO为课程号、GRADEGE为学生成绩、CREDIT为学分。根据这个关系,关键字为组合关键字(SNO、CNO)。
    在应用中使用这个关系模式可能存在以下问题:
    a.更新异常。若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一
    门课学分不同的情况。
    c.插入异常。如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程
    和学分存入。
    d.删除异常。若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则
    此门课程及学分记录无法保存。
    分析原因:非关键字属性CREDIT仅依赖于CNO这个字段,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。
    解决方法:将其实原有关系分成两个关系STUDENT(SNO、CNO、GRADE),LESSON(CNO、CREDIT)。这样的两个关系都满足第二范式的要求。

    第三范式(3NF):如果某关系模式满足第二范式,而且它的任何一个非主属性都不传递依赖于任何关键字,则满足第三范式。
    例:关系S1(SNO、SNAME、DNO、DNAME、LOCATION) ,属性依次代表学号、姓名、所在系编号、系名称、系地址。 关键字SNO决定各个属性,满足2NF。但这样的关系肯定会使数据有大量的冗余,有关学生DNO,DNAME,LOCATION三个属性将重复插入、删除和修改。
    分析原因:关系中存在传递依赖造成的。即SNO决定DNO,DNO决定LOCATION,但SNO不能直接决定LOCATION, 而是通过DNO传递依赖实现的,所以不满足第三范式。
    解决方法:将其分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)。

    BCNF:如果关系R的所有属性中,若每个决定因素都包含候选关键字,则称关系R属于BCNF。
    例:关系SLT(SID、LESSON、TEACHER),SID为学生编号、LESSON为课程名称、TEACHER为授课教师,其中SID为关键字,经分析该关系满足第三范式,分析(SID、LESSON)决定授课教师,(SID、TEACHER)决定课程,TEACHER决定LESSON,由于TEACHER不是关键字,所以不满足BCNF。
    解决方法:;C(SID、TEACHER),T(TEACHER、LESSON)。

    第四范式(4NF):若关系模式R每个非平凡多值依赖X→→Y,X都含有候选键,则该关系模式满足第四范式。
    如:关系RR(SBM、CZDM、SCCJ),其中SBM设备名称、CZDM厂站代码、SCCJ生产厂家。
    分析:对于设备名称,无论生产厂家是谁,都会有一组值对应厂站代码即SBM→→CZDM,同理对设备名称,无论厂站代码是谁,都会有一组值对应生产厂家即SBM→→SCCJ。由于两个多值依赖的左端都不含候选键,所以不满足第四范式。
    解决方法:RR_1(SBM、SCCJ),RR_2(SBM、CZDM)。

    第五范式(5NF):如果关系模式中,每一个连接依赖,都包含由关系中候选键,则称为该关系模式满足第五范式。
    例如有一个关系R1中


    A

    B

    C

    A1

    B1

    C1

    A2

    B1

    C2

    A1

    B2

    C1

    A2

    B2

    C2

    分析:在关系中A、B、C均为关键字。从上表中可以看出,表中存在大量冗余的数据。
    解决方法:可以将其拆分成下面的三个关系RA、RB、RC。

    RA

    RB

    RC

    A

    B

    B

    C

    C

    A

    A1

    B1

    B1

    C1

    C1

    A1

    A1

    B2

    B1

    C2

    C1

    A2

    满足第五个范式。
    将一个关系分解成多个关系,要使得分解有意义,起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据本身,而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度,但是分解的同时必须考虑两个问题:无损联接性和保持函数依赖。有时往往不可能做到既有无损联接性,又完全保持函数依赖。需要根据需要进行权衡。

    小结:
    规范化目的是使结构更合理,消除插入、修改、删除异常,使数据冗余尽量小,便于插入、删除和更新。
    原则:遵从概念单一化 “一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
    方法:将关系模式投影分解成两个或两个以上的关系模式。
    要求:分解后的关系模式集合应当与原关系模式“等价”,即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。
    注意:一个关系模式结这分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。
    现在做数据库设计,很少有人可以做到很符合范式的。一般说来,第一范式大家都可以遵守,如果设计的数据库能遵守前三个范式,就可以啦,因为范式越高,可能也会BCNF的范式出现机会较少,而且会破坏完整性,你可以在做设计之时不考虑它。希望大家在设计数据库时,一定要全面考虑各方面的问题,根据实际情况出发,然后再确定是否应该满足更高范式。


    展开全文
  • WORD格式 专业资料整理 关系数据库规范化理论常见试题及答案 1关系规范化中的操作异常有哪些它是由什么引起的解决的办法是什么 答关系规范化中的操作异常有插入异常 更新异常和删除异常 这些异常是由于关系中存在...
  • 关系数据库规范化理论之范式

    千次阅读 2017-11-09 22:27:30
    因为在写项目时与同伴关于数据库到底建多少张表,每张表应包含哪些属性产生分歧,所以又好好研究了一下关系型数据库在设计时应该遵守怎样的规则...在阅读本篇文章前读者须掌握关系数据库结构基础及函数依赖与键的定义。

    因为在写项目时与同伴关于数据库到底建多少张表,每张表应包含哪些属性产生分歧,所以又好好研究了一下关系型数据库在设计时应该遵守怎样的规则以提高数据库性能。

    在阅读本篇文章前读者须掌握关系数据库结构基础及函数依赖与键的定义。
    可直戳以下目录空降相关知识点↓↓↓


    首先要明确关系模型可能存在的异常有:**数据冗杂,更新异常,插入异常,删除异常。**所有范式存在的意义不过是为了消除这些异常。满足最低要求的一级叫做第一范式(1NF),在第一范式的基础上提出了第二范式(2NF),在第二范式的基础上又提出了第三范式(3NF),以后又提出了BCNF范式,4NF,5NF。范式的等级越高,应满足的约束条件也越严格。规范的每一级别都依赖于它的前一级别。

    首先我们给出一张数据表,该表涵盖我们所要记录的所有属性
    该关系模式为:
    SLC(Sno,Sname,Sdept(所在系),Loca(住处),Cno(课程号),Grade(成绩))
    Sno | Sname |Sdept|Loca|Cno|Grade
    -------- | —
    03001 | 甲|网络工程|A|C1|95
    03001 | 甲|网络工程|A|C2|88
    04001 | 乙|计算机科学与技术|B|C2|93
    04001 | 乙|计算机科学与技术|B|C4|75
    03002 | 丙|网络工程|A|C1|77
    02001 | 丁|网络工程|A|C5|82
    02002 | 戊|计算机科学与技术|B|C2|87

    第一范式(1NF)

    如果关系模式R中的所有属性都是不可分的数据项,则称R属于第一范式,记为R∈1NF。

    对数据表进行分析,可知其每个属性都不可再分,既满足1NF,但由于只有属性Grade对键(Sno,Cno)是完全函数依赖,而其他非主属性都是对键的部分函数依赖,也正是因为关系中存在部分函数依赖,导致数据操作中必然会存在异常,故需要运用投影运算将关系模式SLC进行分解,转向更高一级范式。

    第二范式(2NF)

    若关系模式R∈1NF,且每个非主属性都完全依赖于R的键,则R∈2NF。

    关系SLC中,Sno、Cno为主属性,Sname,Sdept,Loca,Grade均为非主属性,Grade对键是完全函数依赖,其余非主属性对键均为部分函数依赖,所以SLC∉2NF。
    为消除关系模式SLC中的部分函数依赖,我们采用投影分解法,将部分函数依赖从SLC中分解出来,得到以下两个关系模式:
    SC:(Sno,Cno)->[f]Grade
    SL:(Sno->[f]Sname, Sno->[f]Sdept, Sno->[f]Loca)
    分解后关系模式SC和SL的非主属性对键都是完全函数依赖,所以SC∈2NF,SL∈2NF。

    满足2NF后我们再分析对数据进行操作时可能出现的异常问题是否得到有效解决:
    ①插入异常:
    【已解决】若学生未选课,仍能将相关信息插入表SL中。
    【未解决】若某系还未进行招生,即Sno为空时,该系相关信息无法插入。
    ②删除异常:
    【已解决】即使删除SC表中某个学生的全部选课信息,但表SL中仍有其其余信息存在。
    【未解决】若某系所有学生毕业,删除全部学生信息的同时,该系的相关信息也被删除了。
    ③更新异常:
    【已解决】因为学生的选课信息与基本信息分别存储在两张表中,基本信息在SL表中只保存了一次,所以当学生的基本信息(如姓名)产生变化时,Sname的值只需要修改一次,减少了数据冗杂。
    【未解决】若某系改名,则要对每个学生记录中的Sdept进行修改。
    ④数据冗杂
    【未解决】一个系中有多个学生,对每个学生记录,相关的Sdept和Loca都要储存一次。

    因此SL仍不是一个好的关系模式,需要对其进行进一步分解,转化为更高一级的范式。

    第三范式(3NF)

    对于关系模式R,每一个非主属性键既不部分函数依赖于键,也不传递函数依赖于键,则R∈3NF。

    关系模式SC中非主属性Grade既不部分函数依赖于键,也不传递函数依赖于键,所以SC∈3NF,但在关系模式SL中,由于Sno->Sdept, Sdept->Loca, Sdept-(×)>Sno,所以Sno->[t]Loca,所以SL∉3NF。因此仍要对SL进行投影分解,得到以下两个关系模式
    S(Sno,Sname,Sdept)
    L(Sdept,Loca)
    现在关系模式S和L中既不存在部分函数依赖,也不存在传递函数依赖,所以S∈3NF,L∈3NF。

    通常情况下,数据库的设计满足3NF即已达到标准,此时所有异常问题都能得到解决,但由于3NF只是规定了非主属性对键的依赖关系,没有限制主属性对键的依赖关系,若存在主属性对键的部分函数依赖和传递函数依赖关系,同样会出现数据冗杂,插入异常,更新异常,删除异常等问题,因此我们引入BC范式。

    BC范式(BCNF)

    关系模式R∈1NF,若X->Y,且Y∉X时X必为键(),则R属于BCNF。即在关系模式R中,若每一个决定因素都为键,则R一定属于BCNF。

    对于满足BCNF的关系模式,具有以下性质:
    ①所有非主属性都完全函数依赖于每个候选键。
    ②所有主属性都完全函数依赖于每个不包含它的键。
    ③没有任何属性完全函数依赖于非键的任何一组属性。

    简单来说,相比3NF,BCNF更为严格的一点就是要求R的每一个属性都不部分函数依赖于候选键且不传递函数依赖于候选键
    若R∈BCNF则R一定∈3NF,但反之不一定成立。

    例如对关系模式S(Sno,Sname,Sdept),S∈3NF,同时S中Sno是唯一的决定性因素,因此S∈BCNF。

    再例如,有一个关系模式City(Cname,Street,Code),其中Cname表示城市名,Street表示街道名,Code表示街道所在地区的邮政编码,其上所具有的函数依赖关系为:
    (Cname,Street)->Code, Code->Cname
    候选键为(Cname,Street)和(Code,Street),不存在非主属性,故City∈3NF,但决定因素Code不是键,所以City∉BCNF。

    再举一例,有一个关系模式STJ(S,T,J),其中S表示学生,T表示教师,J表示课程,每个教师只讲授一门课程,每门课程可由多个教师讲授,某一学生选定某门课程,就对应一个确定的教师,因此可得如下函数依赖:
    (S,J)->T,(S,T)->J,T->J
    (S,J)和(S,T)都是候选键,所以该关系中的S、T、J均为主属性,不存在非主属性键,也就不存在非主属性对键的部分函数依赖和传递函数依赖,STJ∈3NF,但STJ∉BCNF,因为在T->J中,T是决定因素,但T不是键。

    对于关系模式STJ,我们可举一条实例分析不是BCNF的关系模式将会存在怎样的异常问题
    学生S |教师T|课程J
    -------- | —
    甲 | 教授A|大学语文
    乙 | 教授A|大学语文
    丙 | 教授B|大学语文
    丁 | 教授B|大学语文
    乙 | 教授C|大学英语
    乙 | 教授D|大学英语
    乙 | 教授E|C语言

    数据冗杂:每个教师只讲授一门课程,但选修了该门课程的多个学生记录中都要存储教师信息。
    插入异常:若学生还没有选课,则教师及课程的信息无法录入,因为主属性此时为空。
    更新异常:当课程改名后,所有选修了该课程的学生纪录需要逐条修改属性J的值,容易造成数据的不一致,破坏数据库完整性。
    删除异常:若选修了某门课程的所有学生毕业,在删除所有学生信息的同时,有关课程的信息也被删除了。
    因此,将该关系模式分解为以下两个关系模式:ST(S,T)和TJ(T,J),他们间存在的函数依赖为S->T,T->J
    此时关系模式ST和TJ均达到BCNF,从而解决上述提到的异常。

    一个关系模式如果达到了BCNF,那么在函数依赖范畴内,它就已经实现了彻底的分离,消除数据操作中可能出现的异常。

    多值依赖与第四范式(4NF)

    ###①多值依赖

    在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。
    简单来说,在函数依赖中,X与Y是否存在函数依赖关系,只需考察X,Y的两组属性,与别的属性无关。而在多值依赖中,X与Y是否存在多值依赖还需看属性Z。
    数学定义: 设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
    平凡的多值依赖与非平凡的多值依赖:
    若X->->Y,而Z为空集,则称X->->Y为平凡的多值依赖;若Z不为空,则称其为非平凡的多值依赖。
    多值依赖的缺点在于数据冗杂太大。

    举例:有这样一个关系 <仓库管理员,仓库号,库存产品号> ,假设一个产品只能放到一个仓库中,但是一个仓库可以有若干管理员,那么对应于一个 <仓库管理员,库存产品>有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。

    多值依赖具有以下性质:
    ①对称性:若X->->Y,则X->->Z,其中Z=U-X-Y
    ②传递性:若X->->Y,Y->->Z,则X->->Z-Y
    ③合并性:若X->->Y,X->->Z,则X->->YZ
    ④分解性:若X->->Y,X->->Z,则X->->(Y∩Z),X->->Z-Y,X->->Y-Z均成立,也就是说两个相交的属性子集均多值依赖于另一个属性子集,则这两个属性子集因相交而分割成的3部分也都多值依赖于该属性子集。
    **⑤函数依赖可以看作是多值依赖的特例。**若X->Y,则X->->Y,因为,当X->Y时,对X的每一个取值x,Y有一个确定的值y与之相对应,所以X->->Y。

    那么若想上例中的关系模式消除多值依赖,作模式分解,使子模式的Z=Ø,仅有平凡多值依赖,即子模式为R1(仓库号,仓库管理员),R2(仓库号,库存产品号)
    ###②第四范式4NF
    在多值依赖的基础上我们引入第四范式的概念

    设关系R(X,Y,Z),其中X,Y,Z是成对的、不相交属性的集合。若存在非平凡多值依赖,则意味着对R中的每个属性Ai(i=1,2…n)存在有函数依赖 X->Ai(X必包含键)。那么R∈4NF。
    第四范式限制关系模式的属性之间不允许出现非平凡且非函数依赖的多值依赖。因为对于每一个非平凡的多值依赖X->->Y,X都含有键,所以X->Y,故4NF所允许的非平凡的多值依赖实际上就是函数依赖。
    若关系属于4NF,则它必属于BCNF;而属于BCNF的关系不一定属于4NF

    在上述关系模式 <仓库管理员,仓库号,库存产品号>中,键是(仓库管理员,仓库号,库存产品号),仓库号->->仓库管理员,仓库号->->库存产品号,但仓库号并不是一个键,因此该关系不是4NF,而分解成R1(仓库号,仓库管理员),R2(仓库号,库存产品号)后,虽然仍存在仓库号->->仓库管理员,仓库号->->库存产品号,但他们是平凡的多值依赖,所以R1∈4NF,R2∈4NF。

    如果只考虑函数依赖,则BCNF的关系模式规范程度已经达到最高
    如果考虑多值依赖,那么4NF的关系模式规范化程度最高
    另外还有其他数据依赖如连接依赖,多值依赖是连接依赖的一种特殊情况。在消除4NF关系模式中存在的连接依赖后则可进一步达到5NF,这里不再赘述。

    关系模式的规范化步骤

    (1)取原始的1NF关系投影,消去非主属性对键的部分函数依赖,从而产生一组2NF关系。
    (2)取2NF关系的投影,消去非主属性对键的传递函数依赖,产生一组3NF关系。
    (3)取这些3NF的投影,消去决定因素不是键的函数依赖。产生一组BCNF关系。
    (4)取这些BCNF关系的投影,消去其中不是函数依赖的非平多值依赖,产生一组4NF关系。

    总结

    规范化程度越高,分解就越细,所得关系的数据冗杂就越小,异常情况也就越少,但同时也增大了系统对数据检索的开销,降低了数据检索的效率。系统只有对这些细分的关系进行自然连接,才能获取所需的信息,而连接操作所需的系统资源和开销是比较大的,因此,规范化程度越高的关系模式并非是最好的。
    规范化应满足的基本原则是由低到高,逐步规范,权衡利弊,适可而止。通常以满足第三范式为基本要求。

    参考文献:孟彩霞. 数据库系统原理与应用[M]. 人民邮电出版社: 2008.

    展开全文
  • 关系数据库规范化理论---范式

    千次阅读 2017-11-08 15:27:02
    此篇博文是我的第一篇文章,在复习数据库范式部分的时候做的笔记。 范式指:规范化的关系模式,由于规范程度不同,产生了不同的范式、 ...否则,所设计的关系数据库会产生一系列的问题。 关系模式应满足的基本要求:

    此篇博文是我的第一篇文章,在复习数据库范式部分的时候做的笔记。

    范式指:规范化的关系模式,由于规范程度不同,产生了不同的范式、

    一个低一级的关系范式通过模式分解可以转换成若干高一级范式的关系模式的集合。这个过程称为关系模式的规范化。
    关系模式规范化的必要性:关系模式规范化,使之达到较高的范式是设计好关系模式的唯一途径。否则,所设计的关系数据库会产生一系列的问题。
    关系模式应满足的基本要求:
    1 元组的每个分量必须是不可分的书记向
    2 数据库中的数据冗余应尽可能的少
    3 关系数据库不能因为数据更新操作而引起数据不一致的问题
    4 当执行插入操作时,数据库中的数据不能产生插入异常现象
    5 数据库中的数据不能在执行删除操作时产生删除异常问题
    6 数据库设计应考虑查询要求,数据组织应合理。

    范式是衡量关系模式优劣的标准,范式的级别越高,其数据冗余和操作异常现象就越少。范式之间的联系可以表示为  1NF←2NF←3NF←4NF←5NF,后面范式可以看做是前面范式的特例。1NF 2NF不重要,最重要的是3NF 和BCNF。
    第一范式:
    如果一个关系模式R的所有属性都是不可分的基本数据项,则这个关系属于第一范式。
    第二范式:
    若关系模式R属于第一范式,且每个非主属性都完全函数依赖于主键,则R属于第二范式。
    第二范式不允许关系模式中的非主属性部分函数依赖于主键。
    第三范式:
    若关系模式R属于第一范式,且每个非主属性都不传递函数依赖于主关键字,则R属于第三范式。若R属于第三范式,则每个非主属性既不部分函数依赖于主键,也不传递函数依赖于主键。

    3NF是一个可用的关系模式应满足的最低范式,也就是说,一个关系模式如果不服从3NF,实际上它是不能用的。

    BC范式:

    若关系模式R属于第一范式,且每个属性都不传递依赖于主关键字,则R属于BC范式,通常BC范式的条件有多重等价的表示:每个非平凡以依赖的左边必须包含主关键字;每个决定因素必须包含主关键字。从定义可以看出,BC范式既检查非主属性,又检查主属性,显然比第三范式限制更严,当只检查非主属性而不检查主属性时,就成了第三范式。因此可以说任何满足BC范式的关系都必须满足第三范式。

    在关系数据库中,对关系模式的基本要求是满足第一范式。在此基础上,为了消除关系模式存在插入异常、删除异常、修改异常和数据冗余等毛病,要对关系模式进一步规范化,使之逐步达到2NF、3NF、BCNF、4NF。
    对于一个已经满足1NF的关系模式,当消除了非主属性对主键的部分函数依赖后,它就属于2NF,当消除了主属性对主键的部分和传递依赖函数,它就属于3NF,当消除了主属性对主键的部分和传递函数依赖,它就属于BCNF,当消除了非平凡且非函数依赖的多值依赖,它就属于4NF。







    展开全文
  • 1.5 关系数据库规范化理论 数据库设计是数据库应用领域中的一个主要研究课题。数据库设计的任务是在给定的应用环境下,创建满足用户需求且性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理...

    1.5 关系数据库规范化理论

    数据库设计是数据库应用领域中的一个主要研究课题。数据库设计的任务是在给定的应用环境下,创建满足用户需求且性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理数据,满足企业或单位各类用户的业务需求。
    数据库设计需要一些理论作为指南,关系数据库规范化理论就是数据库设计的一个理论指南。规范化理论研究的是关系模式中各属性之间的依赖关系及其对关系模式性能的影响,探讨“好”的关系模式应该具备的性质,以及达到“好”的关系模式的方法。规范化理论为我们提供了判断关系模式好坏的理论标准,帮助我们预测可能出现的问题。规范化理论又是数据库设计人员的有力工具,同时也使数据库设计工作有了严格的理论基础。
    本节主要讨论关系数据库规范化理论,即如何判断一个关系模式是否是好的关系模式,以及如何将不好的关系模式转换成好的关系模式。

    1.5.1 函数依赖

    数据的语义不仅表现为完整性约束,对关系模式的设计也提出了一定的要求。针对一个问题,需要解决的是如何构造一个合适的关系模式、应构造几个关系模式,以及每个关系模式由哪些属性组成等。这些都是数据库设计问题,确切地讲是关系数据库的逻辑设计问题。
    下面首先介绍与函数依赖相关的一些内容。

    1. 函数依赖的基本概念
      函数对我们来说已经是非常熟悉的概念了,对于公式,Y=f(X),自然也不会陌生,但读者熟悉的大多是X和Y之间数量上的对应关系,也就是给定一个X值,都会有一个Y值和它对应,也可以说X函数决定Y,或Y函数依赖于X。在数据库中,函数依赖注重的是语义上的关系,例如:省=f(城市),只要给出一个具体的城市名称,就会有唯一一个省名称和它对应,如“武汉市”在“湖北省”,“城市”是自变量X,“省”是因变量或函数值Y。这里把X函数决定Y,或Y函数依赖于X表示为:X→Y。

    由以上说明可以写出较直观的函数依赖定义:设有关系模式R(A1,A2,…,An),X和Y为{A1,A2,…, An}的子集,如果对于R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于X。
    例如,对于学生关系模式Student,Sno,Sname,Sdept,Sage),有:Sno→Sname, Sno→Sdept, Sno→Sage。
    对于学生选课关系模式SC(Sno,Cno,Grade),有:(Sno,Cno)→Grade。
    显然,函数依赖讨论的是属性之间的依赖关系,它是语义范畴的概念,也就是说,关系模式的属性之间是否存在函数依赖只与语义有关。

    1. 一些术语和符号
      下面给出经常用到的一些术语和符号。设有关系模式R(A1,A2,…,An),X和Y均为{A1,A2,…, An}的子集。

    1)如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。如不作特别说明,我们总是讨论非平凡函数依赖。
    2)如果X→Y,则称X为决定因子。
    3)如果X→Y,并且对于X的任意一个真子集X',都有X'—/→Y,则称Y完全函数依赖于X,记作X→Y;如果X'→Y成立,则称Y部分函数依赖于X,记作X→Y。
    4)如果X→Y、Y→Z,则称Z传递函数依赖于X。
    【例1-6】设有关系模式SC(Sno,Sname,Cno,Credit,Grade),其中各属性含义分别为:学号、姓名、课程号、学分、成绩。该关系模式主键为(Sno,Cno)。
    其函数依赖关系有:
    Sno→Sname Sname函数依赖于Sno
    (Sno, Cno)→Sname Sname部分函数依赖于(Sno,Cno)
    (Sno, Cno)→Grade Grade完全函数依赖于(Sno,Cno)
    【例1-7】设有关系模式S(Sno,Sname,Dept,Dept_master),其中各属性含义分别为:学号、姓名、所在系和系主任(假设一个系只有一个主任)。该关系模式的主键为Sno。
    其函数依赖关系有:
    Sno→Sname Sname完全函数依赖于Sno
    由于:
    Sno→Dept Dept完全函数依赖于Sno
    Dept→Dept_master Dept_master完全函数依赖于Dept
    所以有:
    Sno→Dept_master Dept_master传递函数依赖于Sno

    1. 为什么要讨论函数依赖
      讨论属性之间的关系以及函数依赖有什么必要呢?让我们通过例子来看一下。

    设有描述学生选课及住宿情况的关系模式:
    S-L-C(Sno,Sdept,Sloc,Cno,Grade)
    其中各属性的含义分别为:学号、学生所在系、学生所住公寓楼号、课程号和考试成绩。假设每个系的学生都住在一个公寓楼里。该关系模式的主键为(Sno,Cno)。
    考虑一下这个关系模式存在什么问题。假设有如表1-4所示的数据。
    screenshot

    从表1-4可以看出如下问题。
    数据冗余问题:在这个关系中有关学生所在系和其所对应的公寓楼的信息有冗余,因为一个系有多少个学生,这个系所对应的公寓楼的信息就要重复存储多少遍。
    数据更新问题:比如某一学生从计算机系转到了信息管理系,不但要修改此学生的Sdept列的值,而且还要修改其Sloc列的值,使修改复杂化。
    数据插入问题:如果某个学生还没有选课,但已经有了Sdept和Sloc信息,我们也不能将此学生的这些已知信息插入到数据库中,因为Cno为空,而Cno为主属性,不能为空,因此不能插入该学生的其他基本信息。
    数据删除问题:如果一个学生只选了一门课,而后来又不选了,则我们需要删除此学生选此门课的记录。但由于这个学生只选了一门课,删掉此学生选课记录的同时也删掉了此学生的其他基本信息。
    类似的种种问题统称为操作异常。为什么会出现以上种种操作异常呢?因为这个关系模式没有设计好,在它的某些属性之间存在着“不良”的函数依赖。如何改造这个关系模式?克服以上种种问题,是我们这里要解决的问题,也是我们讨论函数依赖的原因。
    解决上述种种问题的方法就是进行模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得好的关系模式。关于模式分解将在后续章节介绍。

    1.5.2 关系规范化

    1. 范式
    在上节已经看到了设计“不好”的关系模式所带来的问题,本节将讨论“好”的关系模式应具备的性质,即关系规范化问题。
    关系数据库中的关系要满足一定的要求,满足不同程度要求的为不同的范式。满足最低要求的为第一范式,简称1NF(First Normal Form)。在第一范式中进一步满足一些要求的为第二范式,简称2NF,依此类推,还有3NF、BCNF、4NF和5NF。
    所谓“第几范式”表示的是关系模式满足的条件,实际应用中,经常称某一关系模式为第几范式的关系模式。通常又把这个概念理解为符合某种条件的关系模式的集合,因此,R为第二范式的关系模式也可以写为:R∈2NF。
    各种范式都是以对关系模式的属性间的函数依赖加以限制的形式表示的。这些范式是递进的:如果一个关系模式是1NF的,它比不是1NF的要好;同样,2NF的要比1NF的好,依此类推。这种方法的目的是让我们从一个关系模式或关系模式集合开始,逐步产生一个与初始集合等价的关系模式集合(即提供同样的信息)。范式越高、规范化的程度越高,关系模式就越好。
    规范化的理论首先由E. F. Codd于1971年提出,目的是设计“好的”关系数据库模式。关系规范化实际就是对有问题(操作异常)的关系模式进行分解以消除这些异常。
    (1)第一范式
    第一范式定义:不包含重复组的关系(即不包含非原子项的属性)是第一范式的关系。
    如图1-12所示的关系就不是第一范式的,因为在这个关系中,“高级职称人数”不是基本的数据项,它是由两个基本数据项组成的一个复合数据项。非第一范式的关系转换成第一范式的关系非常简单,只需要将所有数据项都表示为不可再分的最小数据项即可。如图1-13所示的关系为将图1-12中的非第一范式关系转换为第一范式关系的情况。
    screenshot

    (2)第二范式
    第二范式定义:如果关系模式R∈1NF,并且R中的每个非主属性都完全函数依赖于主键,则R∈2NF。
    从定义可以看出,所有主键只由一个列组成的1NF关系都是2NF的。但如果主键是由多个属性共同构成的复合主键,并且存在非主属性对主属性的部分函数依赖,则这个关系就不是2NF关系。
    例如前文中提到的S-L-C(Sno,Sdept,Sloc,Cno,Grade)就不是2NF的。
    因为(Sno,Cno)是主键,而又有Sno→Sdept, 因此有:(Sno,Cno)→Sdept。即存在非主属性对主键的部分函数依赖关系,所以,此S-L-C不是2NF的。前面我们已经发现这个关系存在操作异常,这些操作异常就是因为它存在部分函数依赖造成的。
    可以用模式分解的办法将非2NF的关系模式分解为2NF的关系模式。
    去掉部分函数依赖的分解过程如下:
    1)对于组成主键的属性集合的每一个子集,用它作为主键构成一个关系模式。
    2)对每个关系模式,将依赖于此主键的属性放置到此关系模式中。
    3)去掉只由主键的子集构成的关系模式。
    S-L-C关系模式分解后的形式为:S-L(Sno,Sdept,Sloc)和S-C(Sno,Cno,Grade)。
    S-L的主键是(Sno),并且有Sno→Sdept,Sno→Sloc,因此S-L已是2NF关系模式。
    S-C的主键是(Sno,Cno),并且有(Sno,Cno)→Grade,因此S-C也是2NF关系模式。
    下面考虑一下分解到2NF之后,关系模式是否还会存在问题,先讨论S-L关系模式。
    首先,在这个关系模式中,描述多少个学生就会重复描述每个系和其所在的公寓楼多少遍(见表1-5),因此还存在数据冗余。其次,当新成立一个系时,如果此系还没有招收学生,但已分配了公寓楼,则无法将此系的信息插入到S-L中,因为这时的学号为空。这是插入异常。
    screenshot

    由此可以看出,第二范式的关系同样可能存在操作异常情况,因此需要对第二范式的关系模式进行进一步的分解。
    (3)第三范式
    第三范式定义:如果关系模式R∈2NF,并且所有非主属性都不传递函数依赖于主键,则R∈3NF。
    从定义可以看出,如果存在非主属性对主键的传递函数依赖,则关系模式就不是3NF的。
    先分析关系模式S-L(Sno,Sdept,Sloc),因为有:Sno→Sdept,Sdept→Sloc,因此有:
    Sno→Sloc
    从对表1-5的分析已经知道,当关系模式中存在传递函数依赖时,这个关系模式仍然有操作异常,因此,还需要对其进行进一步的分解。
    消除传递函数依赖的分解过程为:
    1)对于不是候选键的每个决定因子,从表中删去依赖于它的所有属性。
    2)新建一个关系模式,新关系模式中包含原关系模式中所有依赖于该决定因子的属性。
    3)将决定因子作为新关系模式的主键。
    S-L分解后的关系模式为:
    S-D(Sno,Sdept)(主键为Sno)和S-L(Sdept,Sloc)(主键为Sdept)
    对S-D,有Sno→Sdept,因此S-D是3NF的。
    对S-L,有Sdept→Sloc,因此S-L也是3NF的。
    由于3NF关系模式中不存在非主属性对主键的部分函数依赖和传递函数依赖,因而消除了很大一部分数据冗余和更新异常,因此,在通常的数据库设计中,一般要求将关系模式分解到3NF即可。

    1. 关系模式的分解准则
      提高关系模式规范化程度,一般是通过把范式程度低的关系模式分解为若干个范式程度高的关系模式来实现的。每个规范化的关系模式应该只描述一个主题,如果某个关系模式描述了两个或多个主题,则应该将其分解为多个关系模式,使每个关系模式只描述一个主题。当发现一个关系模式存在操作异常时,通过把关系模式分解为两个或多个独立的关系模式,使每个关系模式只描述一个主题,就可以消除这些异常。

    关系规范化的方法是进行模式分解,但分解后产生的关系模式应与原关系模式等价,即模式分解必须遵守一定的准则,不能表面上消除了操作异常现象,却留下了其他的问题。为此,模式分解要满足:
    模式分解具有无损连接性。
    模式分解能够保持函数依赖。
    无损连接是指分解后的关系通过自然连接可以恢复成原来的关系,即通过自然连接得到的关系与原来的关系相比,既不多出信息,又不丢失信息。
    保持函数依赖的分解是指在模式分解过程中,函数依赖不能丢失的特性,即模式分解不能破坏原来的语义。
    为了得到更高范式的关系而进行的模式分解,是否总能既保证无损连接,又保持函数依赖呢?答案是否定的。我们这里对在分解过程中如何保持函数依赖以及如何保证无损连接不作讨论。一般情况下,在进行模式分解时,应将有直接依赖关系的属性放置在一个关系模式中,这样得到的分解结果一般能保证具有无损连接性,并且能保持函数依赖关系不变。

    展开全文
  • 数据库规范化理论

    千次阅读 2018-05-11 16:59:31
    函数依赖的定义设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X函数决定Y,或Y函数依赖于X,记做.....
  • 数据库设计中关系规范化理论总结

    千次阅读 多人点赞 2020-07-31 11:08:14
    数据库是一门对数据进行有效管理的技术,它研究信息资源如何被...经过科学家的讨论研究,最终形成我们今天所看到的关系数据库规范化理论。本文通过例举具体事例来探讨关系规范化理论在数据库逻辑设计中的形成和方法。
  • 第一范式,所有属性值不可再分。 理解:(原子)每一列都是不可再分的最小数据单元, 第二范式,所有的非主属性(非候选...理解:(传递)数据库表中不包含已在其他表中已包含的非关键字的信息。 BC范式 设关系模...
  • 逻辑设计:模型校验,设计规范化(生成关系表/二维表) 什么是不好的关系模式   函数依赖 数据依赖:在计算机科学中,数据依赖是指一种状态,当程序结构导致数据引用之前处理过的数据时的状态。其中最重要的是...
  • 关系数据库设计 E.F.Codd提出规范化理论;后经深入的研究形成了系统的设计理论 关系数据库系统中关系模型包括一组关系模式各个关系模式相互有联系 一个合适的关系数据库系统的设计关键是关系数据库模式的设计 ;关系...
  • 关系数据库规范化的通俗理解

    千次阅读 2019-05-26 11:17:35
    最近参加数据库系统工程师的考试,结合自己的工程经验,终于对数据库规范化理论有了一知半解。 本文试图从工程化的角度,用大白话去解释数据库规范化的结论,如果有不严谨之处,敬请指正。我不会去详细介绍每个范式...
  • 文章目录一、前言二、数据模式存在的问题2.1 例子2.2 问题2.3 什么是好的数据模式三、数据库规范化理论3.1 函数依赖的相关的概念3.1.1 函数依赖3.1.2 平凡函数依赖与非平凡函数依赖3.1.3 完全函数依赖与部分函数...
  • 数据库设计及其规范化理论包括关系模式的设计问题、函数依赖、范式等,还有数据库设计的各个阶段
  • 1.关系模式中可能存在的冗余和异常问题 数据冗余:指同一数据被反复存储的情况。 更新异常:数据冗余造成的,多个内容更改使操作错误。 插入异常: 删除异常: 2.函数依赖与关键字 2.1 函数依赖:关系中...
  •  数据库逻辑设计的一个强有力的工具--关系数据库规范化理论。  一个关系既可以用来描述一个实体及其属性,又可以用来描述实体间的联系。  关系模式是用来定义关系的。  一个数据库包含一组关系,定义这些...
  • 浅谈关系数据库理论

    2019-07-08 19:10:20
    浅谈关系数据库理论 1.规范化问题提出 1.规范化理论的主要内容 ​ 在关系数据库中,关系模型包括一组关系模式,并且关系之间并不是完全孤立的。...​ 关系数据库规范化理论主要包含三个方面的内容 (1)函数依赖 ...
  • 关系数据库规范化总结

    千次阅读 2014-05-21 19:23:04
    在做软考的试题中遇到了几个常遇到的问题,在这里就讨论一下关系数据库规范化的问题。关系型数据库设计的理论核心是数据间的函数依赖问题,衡量的标准是关系规范化的程度及分解的无损连接和保持函数的依赖性。函数...
  • 根据候选码判断关系F中的函数关系是否满足第二范式,若不满足则为关系模式的规范化最高为第一范式 然后判断是否存在非主属性传递依赖,如果存在则不满足第二范式,如果不存在则关系模式的规范化最高为第三范式. 通俗...
  • 为什么要学习关系数据库规范化理论?(1)基本概念回顾(2)关系模式的形式化定义(3)什么是数据依赖F?(4)数据依赖F对关系模式的影响1️⃣ 数据冗余(Data redundancy)2️⃣ 更新异常(update anomalies )3️⃣ ...
  • 数据库规范化理论---求候选键

    千次阅读 多人点赞 2018-01-21 11:16:01
    关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记为F+。 属性集X关于函数依赖集F的闭包: 设F为属性集U上的一组函数依赖,XÍU,XF+ ={A|X→A能由F根据Armstrong公理导出},XF+称为属性...
  • 关系规范化理论及非规范化设计在数据库中的运用 李俊平 (深圳职业技术学院 计算机应用工程系,广东深圳 518055) 摘要:本文首先介绍了数据库设计中的关系规范化理论,然后从提高数据库性能的角度,介绍了非规范...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,786
精华内容 18,714
关键字:

关系数据库的规范化理论主要包括