数据库工程师复习重点:关系数据库逻辑设计
5.2 基本概念
5.2.1 关系模型
1、 关系模型采用一个二维表格在计算机中组织、存储、处理和管理数据。
(1) 关系名(数据库名):由字母数字组成;
(2) 属性名;
(3) 关系模式和关系:描述模式描述关系的静态结构,由模式名、关系模式所包含的属性及属性值所满足的条件组成模式定义。
(4) 元组:描述关系中的行;
(5) 域:它定义关系的每个属性取值的类型;
(6) 主码:能够惟一标识关系中每一个元组的属性或属性组;
(7) 关系的数学定义:关系模式是建立在集合集论的基础上的,用数学的概念定义关系有;
(A) 定义一:域是值的集合,同一个域中的值具有相同的数据类型;
(B) 定义二:
(C) 定义三:
(D) 当关系引用了属性名后关系具有以下属性:
[1] 不能有重复的元组;
[2] 元组上下无序;
[3] 按属性名引用时属性左右无序;
[4] 所有属性值都是原子项(不可再分);
(8) 总结:关系是一张二维表,表中的一行被称为一个元组,一列称为属性,由一组域值组成。关系是元组的集合,关系中的每个元组在数学上被定义为这个关系所涉及的全部域值中笛卡儿积的一个元素。
5.2.2 关系数据库
1、 关系数据库是按照二维表组织和存储的相互关联的关系的集合,关系数据库模式是关系模式的集合;
5.2.3 关系的完整性
1、 关系的完整性(完整性约束):是对关系的某种约束规则和关系满足的定义。通常这组约束规则用来限定和检查数据库所含实例的合法性和正确性;
2、 完整性约束分静态和动态两种,静态完整性约束是基于关系模式的,主要有主码、外码约束和域约束组成;动态完整性约束是基于企业的业务规则的。
3、 静态完整性约束规则:
(1) 主码约束:主码必须满足:
(A) 惟一性:在一个关系中不存在两个元组,它们具有相同的主码值;
(B) 最小性:不存在从组成主码的属性集中去掉一个属性,还仍能保持数据的惟一性;
(2) 外码约束:
(3) 用户定义的完整性:
5.3 关系数据库设计理论
5.3.1 问题的提出
究竟一个关系数据库包含哪些属性是合理的,如何评价一个关系模式设计的优劣?
5.3.2 函数依赖
函数依理论利用一个关系中属性之间的依赖关系评价和优化关系模式,以保证存储到数据库中的关系具有较好特性;
1、 函数依赖:
(1) 设R(U)为一关系模式,X和Y为属性全集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数决定Y”或“Y函数依赖于X”,并记作X
Y,其中X称为决定因素,因为根据函数依赖定义,给定一个X,就能惟一决定一个Y。
(2) 这里讨论的函数关系与数学上的不同,是不能计算的,是一个关系中属性之间存在的依赖关系;它是一种语义范畴的概念,只能根据两个属性之间的语义来确定一个函数依赖是否存在。
2、 完全与部分函数依赖:
(1) 在关系模式R(U)中,如果XàY成立,并且对X的任何真子集X’不能函数决定Y,则称Y对X是完全函数依赖,被记作X---f---àY。
(2) 若XàY,但Y不完全函数依赖于X,则称Y对X是部分函数依赖,记作X--pàY;
3、 传递函数依赖:
在关系R(U)模式中,如果X决定Y,(Y不属于X),Y不决定X,Y决定Z,则称Z对X传递函数依赖。
4、 平凡与非平凡函数依赖:
(1) 若X决定Y,但Y属于X,则称XàY是平凡函数依赖,否则称非平凡函数依赖;
(2) 即平凡函数依赖,仅当其右边的属性集是左边属性集的子集时成立;
(3) 非平凡函数依赖,仅当其右边的属性集至少有一个属性不属于左边有集合时成立;
(4) 完全非平凡函数依赖:仅当其右边的属性集中属性都不在左边的集合时成立;
5、 码:
(1) 在关系模式R(U)中,K为R的属性或属性组,若K函数决定A1.A2….An,则K为关系模式R的候选码,包含在候选码中的属性称为主属性,否则为非主属性;
(2) 若一个关系的候选码不止一个,则选定其中一个作为关系R的主码;
(3) 关系的码属性除了必须完全函数决定关系的所有其他属性外,还必须满足最小化规则,即在关系模式R(U)中,不存在一个K的真子集能够函数决定R的其他属性。
6、 函数依赖的推理规则:
(1) 自反律:若Y(包含于)X(包含于)U,则XàY成立;
(2) 增广律:若XàY,且Z(包含于)U,则XZàYZ成立;
(3) 传递律:若XàY,YàZ,则XàZ成立;
(4) 合并规则:若XàY,XàZ成立,则XàYZ;
(5) 分解规则:若XàY和Z(包含于)Y成立,则XàZ也成立;
(6) 伪传递规则:若XàY,YWàZ,则XWàZ成立;
7、 属性集闭包:
(1) 设F是属性集U上的函数依赖集,X为U的一个子集,那么对于F,属性集X关于F的闭包(用X+表示)为:X+={A|XàA}
(2) 由属性集团包的定义可知,若想判断函数依赖XàY是否成立,只要计算X关于函数依赖集F的闭包,若Y是X闭包中的一个元素则XàY成立;
8、 确定关系的码:
(1) 利用迭代算法计算X+,步骤如下:
(A) 选X作为闭包X+的初值X(0);
(B) 由X(i)计算X(i+1)时,它是由X(0)并上属性集合A所组成,其中A满足下列条件:Y(包含于)X(i),且F中存在函数依赖YàZ,而A(包含于)Z。因为U是有穷的,所以会得到X(i)=X(i+1),此时X(i)为所求的X+。
5.3.3 规范化设计方法
1、 第一范式:
(1) 定义:设关系模式R(F,U),如果R的每一个属性都是不可分的数据项,则此关系模式为第一范式;
(2) 一个给定关系和第一范式(1NF)的区别:
(A) 一个关系中的数据按照行和列的形式组织,每个元组具有相同数目的属性个数,且每一个元组的属性值具有统一的数据类型和长度;元组或属性的排列与顺序无关,每个元组必须通过一个属性或属性组惟一识别;
(B) 第一范式实际上对关系增加了一个约束,即关系中元组的每个属性都只取一个值,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。
2、 第二范式:
(1) 定义:若关系模式R(F,U)是1NF,且每个非主属性完全函数依赖于码,则称R为第二范式,即在2NF中不存在非主属性对码的部分依赖;
(2) 仅满足第一范式关系会存在种种问题,要消除必须用更高级的范式标准来设计,称为标准化;
(3) 具体做法是将大的关系分解成多个小的关系,使分解后的关系满足更高级范式的要求。
(4) 第二范式实际上对关系增加了一个约束,就是关系中的每一个属性必须完全依赖于主码,即在第一范式的基础上,消除非主属性对主码的部分函数依赖可达到2NF;
3、 第三范式:
(1) 定义:若关系R(U,F)为第一范式,且不存在非主属性对主码的传递函数依赖,则称R为第三范式;
(2) 第三范式是在第二范式的基础上对关系又增加了一个约束,就是关系中的每一个非主属性必须只依赖于主码。即2NF的基础上,消除非主属性对主码的传递函数依赖可达到3NF。
4、 改进的第三范式:
(1) 定义:如果关系模式R是1NF,且每个属性既不相存在部分函数依赖也不存在传递函数依赖于候选码,则称R是改进的第三范式(BCNF)。
5、 多值依赖与4NF:
(1) 多值依赖:表示关系中属性(如A、B、C)之间的依赖,对于A的每个值,都存在一个B或C的值的集合,而且B和C的值相互独立,记为:AààB、AààC
(2) 第四范式:如果关系模式R属于1NF,对于R的每个非平凡的多值依赖XàY(Y不属于X),X含有候选码,则R是第四范式。即是从BCNF范式中消除主码内的独立依赖集(非平凡多值依赖)可达4NF;
6、 连接依赖与5NF
(1) 连锁依赖:设关系模式R,R的属性子集为R1、R2、R3、R4、R5、R6、R7….,当且仅当R的每个合法值等于R1、R2、R3、R4、R5、R6、R7…的投影连接时,称R满足连接依赖;
(2) 第五范式:设R是一个满足5NF的关系模式,当且仅当R的每一个非平凡连接依赖都被R的候选码所蕴含,即从4NF中消除非候选码所蕴含的连接依赖为5NF;
7、 总结:
(1) 范式表达了关系模式满足的条件,也是衡量关系模式设计优劣的标准;
(2) 利用范式进行规范化设计的目的是消除数据冗余,避免出现异常,使结构更合理;
(3) 规范化设计的基本过程是对关系进行的分解,消除属性间不合理的数据依赖,用一组等价的子关系代替原有的关系;
(4) 数据库规范化的程序越高,其关系表就越多,从而增加了表之间连接运算的代价,影响了数据库的执行速度和性能。所以通常关系模式规范化工作仅做到3NF,这样既使关系中不合理的属性基本消除,规范化程度也不太高,保证数据库有较好的性能。
5.4 数据库模式设计
5.4.1 初始关系模式的设计
1、 把ER图转换成关系模式:
(1) 把ER模型中的每个实体集转换成一个同名的关系,实体集的属性就是关系的属性,实体集的码就是关系的码;
(2) 把ER模型中的每个联系转换成一个关系,与该联系相连的各实体集的码以及联系的属性转换成为关系的属性。
(A) 若联系为1:1,则每个实体集的码均是该关系的候选码;
(B) 若联系为1:n,则关系的码为n端实体集的码;
(C) 若联系为m:n,则关系的码为各实体集码的组合;
(3) 合并具有相同码的关系
2、 检查确认对象:检查转换后的每个关系名和属性名是否符合数据库设计关于统一命名的约定;
5.4.2 优化关系模式
1、 模式分解原则:
(1) 分解具有无损连接性:分解后的关系能够恢复成原来的关系;
(2) 分解保持函数依赖:
(A) 无损连接和保持函数依赖是用于衡量一个模式分解是否导致原有模式中部分信息丢失的两个标准;
(B) 当一个关系被分解后会出现几种结果,既有无损连接,又能保持函数依赖是较理想的分解结果,意味着在分解的过程中没有丢失原有模式的任何信息;
(C) 一般情况下,分解到3NF就足够了,但在3NF关系下,仍存在一定程度上的更新异常或不一致的隐患,但与数据库性能比较起来是可以忽略的,因为在数据库设计过程中通过增加一些数据约束,就可以解决3NF引起的数据问题了。
3、 优化属性:确定各字段的类型和长度;
4、 确认模式满足需要:
5.4.3 数据完整性设计
1、 指定义数据库中存储的数据值满足的约束条件,通过对存储的数据值的约束维护关系的完整性。
2、 数据值满足条件分为:
(1) 域约束:限制指定列的取值及范围;
(2) 主码约束:定义每个关系的主码值不空,且惟一;
(3) 引用完整性约束:定义不同模式的属性间满足的条件,及一个关系模式中属性间可能满足的条件;
5.4.4 安全模式和外模式的设计
1、 根据选定的DBMS支持的安全控制特征来确定;
2、 根据不同用户对数据库存取特点定义相关的外模式;