第五章 关系数据库逻辑设计
5.1 概述
5.2 基本概念
5.2.1 关系模型
- 关系模型采用一个二维表格在计算机中组织、存储、处理和管理数据。
- 关系名(数据库名):由字母数字组成;
- 属性名;
- 关系模式 和 关系:描述模式描述关系的静态结构,由模式名、关系模式所包含的属性及属性值所满足的条件组成模式定义。
- 元组:描述关系中的行;
- 域:它定义关系的每个属性取值的类型;
- 主码:能够惟一标识关系中每一个元组的属性或属性组;
-
关系的数学定义:关系模式是建立在集合集论的基础上的,用数学的概念定义关系有;
- 定义一:域是值的集合,同一个域中的值具有相同的数据类型;
- 定义二:笛卡尔积的定义(相当于一张二维表)
- 定义三:关系的定义(笛卡尔积的子集(二维表),域的顺序不能改)
-
当关系引用了属性名后, 关系具有以下属性:
[1] 不能有重复的元组;
[2] 元组上下无序;
[3] 按属性名引用时, 属性左右无序;
[4] 所有属性值都是原子项(不可再分);
-
总结:
- 关系是一张二维表,
- 表中的一行被称为一个元组;
- 一列称为属性,由一组域值组成。
- 关系是元组的集合,关系中的每个元组在数学上, 被定义为:
- 这个关系所涉及的全部域值中 笛卡儿积 的一个元素。
5.2.2 关系数据库
- 关系数据库是按照二维表组织和存储的相互关联的 关系的集合,关系数据库模式 是 关系模式的集合;
5.2.3 关系的完整性
- 关系的完整性(完整性约束):是对关系的某种约束规则 和 关系满足的定义。通常这组约束规则用来限定和检查数据库所含实例的合法性和正确性;
- 完整性约束分静态和动态两种,静态完整性(相当于逻辑的,真理的)约束是基于关系模式的,主要有主码、外码约束和域约束组成;
- 动态完整性约束(基于现实)是基于企业的业务规则的。
-
静态完整性约束规则:
- 主码约束:主码必须满足:
- 惟一性:在一个关系中不存在两个元组,它们具有相同的主码值;
- 最小性:不存在从组成主码的属性集中 去掉一个属性,还仍能保持数据的惟一性;
- 主码约束:主码必须满足:
候选码:符合主码条件,但没有被选为主码。
- 外码约束:(外码的定义:有两个关系User和School,School_ID是User的属性组,非码;是School的码,则称School_ID是User得外码)外码为空或码的值(否者查找失败)
- 用户定义的完整性:(例如: 性别只为男和女)
5.3 关系数据库设计理论
5.3.1 问题的提出
究竟一个关系数据库包含哪些属性是合理的,如何评价一个关系模式设计的优劣?(插入、更新、删除异常)
补充(关系代数)
- 传统的集合运算。(并、交、差、笛卡尔积);
- 专门的关系运算。(选择、投影、连接、自然连接、除法)
5.3.2 函数依赖
函数依理论利用一个关系中属性之间的依赖关系评价和优化 关系模式,以保证存储到数据库中的关系具有较好特性;
-
函数依赖 分类:
- 完全(f)与部分函数(p)依赖:
- 在关系模式R(U)中,如果XàY成立,并且对X的任何真子集X’都不能函数决定Y,则称Y对X是完全函数依赖,被记作X—f—àY。
- 若XàY,但Y不完全函数依赖于X,则称Y对X是部分函数依赖,记作X–pàY
- (即至少存在一个真子集X’函数决定Y);
-
传递函数依赖:
在关系R(U)模式中,如果X决定Y,(Y不属于X,Y也不决定X),但Y是能决定Z的,则我们称Z对X传递函数依赖。
-
平凡 与 非平凡 函数依赖:
- 若X决定Y,但Y本身就是属于X的,则称XàY是平凡函数依赖,否则称非平凡函数依赖;
- 即平凡函数依赖,仅当其右边的属性集是左边属性集的子集时成立;(全属于)
- 非平凡函数依赖,仅当其右边的属性集至少有一个属性不属于左边的集合时成立;(部分)
- 完全非平凡函数依赖:仅当其右边的属性集 中的 属性 都不在左边的集合时成立;(都不属于)
- 码:
-
在关系模式R(U)中,K为R的属性或属性组,若K完全函数决定A2….An,则K为关系模式R的候选码(应理解为一个属性组),包含在候选码中的属性称为主属性,否则为非主属性;
- 若一个关系的候选码不止一个,则选定其中一个作为关系R的主码;
- 关系的码属性 除了 必须完全函数决定关系的所有其他属性外,还必须满足最小化规则,
- 即在关系模式R(U)中,不存在一个K的真子集能够函数决定R的其他属性。
-
-
函数依赖的推理规则:(Armstrong公理及推论)什么鬼???
- 自反律:若Y(包含于)X(包含于)U,则 X à Y 成立;
- 增广律:若XàY,且Z(包含于)U,则 XZ à YZ 成立;
- 传递律:若XàY,YàZ,则XàZ成立;
推论
- 合并规则:若XàY,XàZ成立,则XàYZ;
- 分解规则:若XàY和Z(包含于)Y成立,则XàZ也成立;
- 伪传递规则:若XàY,YWàZ,则XWàZ成立;
-
属性集闭包:
- 设F是属性集U上的函数依赖集,X为U的一个子集,那么对于F,属性集X关于F的闭包(用X+表示)为:X+={A|XàA}(最大的Y的集合)
- 由属性集闭包的定义可知,若想判断函数依赖XàY是否成立,只要计算X关于函数依赖集F的闭包,若Y是X闭包中的一个元素则XàY成立;
-
确定关系的码:
- 利用迭代算法计算X+,步骤如下:
- 选X作为闭包X+的初值X(0);
- 由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+。
- 利用迭代算法计算X+,步骤如下:
5.3.3 规范化设计方法
5.4 数据库模式设计
5.4.1 初始关系模式的设计
- 把ER图转换成关系模式:
- 把ER模型中的每个实体集转换成一个同名的关系,实体集的属性就是关系的属性,实体集的码就是关系的码;
- 把ER模型中的每个联系转换成一个关系,与该联系相连的各实体集的码以及联系的属性转换成为关系的属性。
- 若联系为1:1,则每个实体集的码均是该关系的候选码;
- 若联系为1:n,则关系的码为n端实体集的码;
- 若联系为m:n,则关系的码为各实体集码的组合;
- 合并具有相同码的关系
- 检查确认对象:检查转换后的每个关系名和属性名是否符合数据库设计关于统一命名的约定;
5.4.2 优化关系模式
- 模式分解原则:
- 分解具有无损连接性:分解后的关系能够恢复成原来的关系;
- 分解保持函数依赖:
- 无损连接和保持函数依赖是用于衡量一个模式分解是否导致原有模式中部分信息丢失的两个标准;
- 当一个关系被分解后会出现几种结果,既有无损连接,又能保持函数依赖是较理想的分解结果,意味着在分解的过程中没有丢失原有模式的任何信息;
- 一般情况下,分解到3NF就足够了,但在3NF关系下,仍存在一定程度上的更新异常或不一致的隐患,但与数据库性能比较起来是可以忽略的,因为在数据库设计过程中通过增加一些数据约束,就可以解决3NF引起的数据问题了。
- 优化属性:确定各字段的类型和长度;
- 确认模式满足需要:
5.4.3 数据完整性设计
- 指 定义数据库中 存储的数据值满足的约束条件,通过对存储的数据值的约束维护关系的完整性。
- 数据值满足条件分为:
- 域约束:限制指定列的取值及范围;
- 主码约束:定义每个关系的主码值不空,且惟一;
- 引用完整性约束:定义不同模式的 属性间 满足的条件,及一个关系模式中 属性间 可能满足的条件;
5.4.4 安全模式和外模式的设计
- 根据选定的DBMS支持的安全控制特征来确定;
根据不同用户对数据库存取特点定义相关的外模式;