在前面的文章中,我们介绍了关系数据库的基本概念,关系模型的三个部分以及关系数据库的标准语言SQL,那么接下来在本章我们将讨论一个具体的问题——如何构造一个合适的数据库模式,即应该构造几个关系模式,每一个关系模式由哪些属性构成。在具体的数据库设计过程之中,需要考虑属性之间的具体情况,因此考虑也变得更加复杂。本文主要介绍关于规范化的一些基本概念,以便了解后续如何进行规范化。
根据之前所学,关系模式由五部分组成,即它是一个五元组:R(U, D, DOM, F)
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值是否相等体现出来的数据间的相关联系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。许多种类型的数据依赖中,最重要的是函数依赖和多值依赖。
由于本章重点考虑模式设计,因此将五元组R(U, D, DOM, F)简化为三元组R,当且仅当U上的一个关系r满足F时,r称为关系模式 R的一个关系。
关系要符合一个最基本的条件:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。比如,当存储位置信息时,如果存储为“东经93°”,其实就已经违反了“不可分”的要求,因为“东西半球”已经“具体经度”是两个明显的可以区分的数据项,因此,在这个过程中不符合第一范式的要求。
在设计关系模式中,我们想要设计出好的关系模式,那么理想的关系模式应具备的特点:
但是,在真正的设计过程中,并非关系模式均为理想的,那么就需要我们考虑将非理想的关系模式转换为理想的关系模式:通过分解关系模式来消除其中不合适的数据依赖。
其实这个过程就是将一个复杂繁琐、存在问题的关系模式进行拆解,将其进行简化,化为更简易、更便于去分析的关系模式进行处理。
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
1.设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
2.在关系模式R(U)中,对于U的子集X和Y,如果
3.若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
4.若X→Y,Y→X,则记作X←→Y。此时X和Y为相互决定的函数依赖关系,也就是说X和Y是等价的。
5.完全依赖与部分依赖
6. 传递依赖
1.超码是一个或多个属性的组合,这些属性的组合可以在一个实体集中唯一的标识一个实体。【超码虽然可以唯一地标识一个实体,但是其中还包含其他冗杂的属性成分,因此还需要提出新的概念】
2.如果一个超码的任意一个真子集都不是超码,则称其为候选码。【候选码一定是超码】
3.如果候选码有多个,理论上可从中任意选出一个作为主码,但实际应用中,选择从不或者极少变化的候选码作为主码;如果候选码只有一个,那么该候选码就是主码。
4.包含在任何一个候选码中的属性,称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。
5.关系模式R中属性或属性组X并非R的码,但 X 是另一个关系模式的码,则称 X是R的外部码,也称外码。
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
范式之间存在联系:5NF ⊂ 4NF ⊂ 3NF ⊂ 2NF ⊂ 1NF
某一关系模式R为第n范式,可简记为R∈nNF。
低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。