关系数据库逻辑设计

  • 针对某一个具体问题,应如何构造一个适合于他的数据模式,即应该构造几个关系,每个关系有那些属性组成等。

  • 数据库逻辑设计的工具-关系数据库的规范化理论。

数据依赖

关系:描述实体及其属性、实体间的联系。它是一个二维表,是涉及属性的笛卡尔积的一个子集

关系模式:用来定义关系{Student(StuNo,SName,SSex,SAge)}

关系数据库:基于关系模型的数据库,利用关系来描述现实世界。从形式上看,它由一组关系组成。

关系数据库的模式:定义这组关系的关系模式的全体。

关系模式的形式化定义

关系模式有五部分组成,即它是一个五元组:

R(U,D,DOM,F)

  • R:关系名

  • U:组成该关系的属性名集合

  • D:属性组U中属性来自的域

  • DOM:属性向域的映像集合

  • F:属性间数据的依赖关系集合

关系模式的简化表示

关系模式R(U,D,DOM,F),简化一个三元组:

R(U,F)

当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系

什么是数据依赖

完整性约束的表现形式:

  • 限定属性的取值范围

  • 定义属性值间的相互关联(主要体现在值的相等与否),这就是数据依赖,它是数据库模式设计的关键

数据依赖的主要类型

  • 函数依赖(简称FD)

  • 多值依赖(简称MVD)

  • 连接依赖

规范化理论

  • 规范化理论正是用来改正关系模式的

  • 通过分解关系模式来消除其中不合适的数据依赖

  • 已解决插入异常、删除异常、更新异常和数据冗余问题

相关概念:

  • 函数依赖

  • 平凡函数依赖与非平凡函数依赖

  • 完全函数依赖与部分函数依赖

  • 传递函数依赖

函数依赖

设R(U)是一个属性集U上的关系模式, X和Y是U的子集

若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。X称为这个函数依赖的决定属性集(Determinant)

函数依赖是指R中所有关系实例均要满足的约束条件,函数依赖是语义范畴的概念。

平凡函数依赖与非平凡的函数依赖

在关系模式R(U)中,对于U的子集X和Y

  • 如果X→Y,但Y∉X,则称X→Y是非平凡的函数依赖

  • 若X→Y,但Y∈X则称X→Y是平凡的函数依赖

例:

  • 非平凡函数依赖:(Sno,Cno)→Grade

  • 平凡函数依赖:(Sno,Cno)→Sno、(Sno,Cno)→Cno

对于任一关系模式,平凡函数依赖都是必然成立的, 它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖

完全函数依赖和部分函数依赖

在关系模式R(U)中

  • 如果X→Y,并且对于X的任何一个真子集X’,都有X’→/Y, 则称Y完全函数依赖于X,记作X→fY

  • 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作 X→pY(只可能是两个对应一个)

例:

关系数据库规范化理论 - 图1

传递函数依赖

在关系模式R(U)中

  • 如果X→Y, Y→Z,且Y∉X, Y→X,则称Z传递函数依赖于X

  • 如果Y→X, 即X←→Y,则Z直接依赖于X

例:

在关系Std(Sno,Sdept,Mname)中,

有:Sno→Sdept,Sdept→Mname,则:Mname传递函数依赖于Sno

  • 设K为关系模式R(U,F)中的属性或属性组合(K为R(U,F)的一个子集),若K完全函数依赖于U,则K称为R的一个侯选码(Candidate Key)

  • 若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)

  • 候选码能够唯一地标别关系的元组,是关系模式中一组最重要的属性,也称之为主属性

  • 主码又和外码一起提供了一个表示关系间联系的手段

范式

  • 关系数据库中的关系必须满足一定的要求,满足不同程度要求的不同范式。

  • 范式是符合某一种级别的关系模式的集合

范式的种类有:

  1. 第一范式(1NF)

  2. 第二范式(2NF)

  3. 第三范式(3NF)

  4. BC范式(BCNF)

  5. 第四范式(4NF)

  6. 第五范式(5NF)

各范式之间关系

1NF 被包含于 2NF 被包含于 3NF 被包含于 BCNF 被包含于 4NF 被包含于 5NF(高级别范式可以推出低级别范式)

  • 第一范式:某一关系模式R的所有属性都是不可分的基本数据项,则R属于1NF

    • 第一范式是对关系模式的最基本的要求,不满足第一范式的数据库模式不能称为关系数据库,但是满足第一范式的关系模式并不一定是一个好的关系模式
  • 第二范式:若关系模式R∈ 1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈ 2NF。

    • 例:SLC(Sno, Sdept, Sloc, Cno, Grade) ∈ 1NF,SC(Sno, Cno, Grade) ∈ 2NF,SL(Sno, Sdept, Sloc) ∈ 2NF
  • 第三范式:关系模式 R∈ 1NF ,且不存在非主属性对码的传递函数依赖,则称R∈ 3NF

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

    • 例:SL(Sno, Sdept, Sloc) ∈ 2NF,SD(Sno, Sdept) ∈ 3NF,DL(Sdept, Sloc) ∈ 3NF

  • BC范式:设关系模式R∈ 1NF,如果对于R的每个函数依赖,X→Y,若Y不属于X,则X必含有候选码,那么R∈ BCNF。换句话说,在关系模式R中,如果每一个决定属性集都包含候选码,则R∈ BCNF

    • BCNF的关系模式所具有的性质

      • 所有非主属性都完全函数依赖于每个候选码

      • 所有主属性都完全函数依赖于每个不包含它的候选码

      • 没有任何属性完全函数依赖于非码的任何一组属性

关系模式的规范化

  • 关系数据库的规范化理论是数据库逻辑设计的工具

  • 一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化

  • 规范化程度可以有6个不同的级别,即6个范式

问题:规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、 删除异常、 修改复杂、 数据冗余等问题

解决方法:就是对其进行规范化,转换成高级范式。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。

关系模式规范化步骤

关系数据库规范化理论 - 图2

  1. 被包含于规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“ 分离”

  2. 被包含于即采用“ 一事一地”的模式设计原则,让一个关系描述一个概念、一个实体或者实体间的一种联系

  3. 被包含于若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化

关系模式的规范化过程是通过对关系模式的分解来实现的

  • 把低一级的关系模式分解为若干个高一级的关系模式的方法并不唯一

  • 在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义

关系模式的分解

具有无损连接性的模式分解

  • 如果一个分解具有无损连接性,则它能够保证不丢失信息

  • 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况

  • 分解具有无损连接性和分解保持函数依赖是两个互相独立的标准

    • 具有无损连接性的分解不一定能够保持函数依赖

    • 同样,保持函数依赖的分解也不一定具有无损连接性

规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到

  • 若要求分解具有无损连接性,那么模式分解一定能够达到4NF

  • 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不定能够达到BCNF

  • 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF

小结

  • 规范化理论为数据库逻辑设计提供了理论的指南和工具,也仅仅是指南和工具

  • 并不是规范化程度越高,模式就越好,必须结合应用环境和现实世界的具体情况合理地选择数据库模式