已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2 5关系数据库的基本理论 关系数据库是目前应用最广泛 也是最重要 最流行的数据库 本节将介绍关系数据库的一些基本理论 包括关系数据结构 关系 的完整性 关系代数 关系数据库管理系统及关系数据库标准语言 回到目录 1 关系数据库概述 数据库模型依赖于数据的存储模式 即数据存储的模式不同 数据库的性质亦不同 以关系模型作为数据的组织存储方式的数据库称为关系数据库 关系数据库采用数学的方法来处理数据库中的数据 是建立在严密的数学基础之上的一种数据组织存储方式 关系数据库理论是IBM公司的E F Codd提出来的 他从1970年开始连续发表了多篇论文 奠定了关系数据库的理论基础 从1975年到1979年的5月间 关系方法的理论和软件系统的研制取得了很大成功 IBM公司的SanJose实验室在IBM370系列机上研制成功了一个实现SQL语言的关系数据库实验系统原型SystemR 1981年IBM公司又宣布具有SystemR全部特征的新的数据库软件产品SQL DS问世 之后 IBM公司又将SQL语言引入到DB2 IBMDataBase2 中 配置在MVS上运行 并于1983年推出了DB2产品 20世纪70年代末期 美国加州大学伯克利分校也研制了Ingres关系数据库实验系统 并由Ingres公司发展成为Ingres数据库产品 本章首页 2 2 5 1关系数据模型及其描述 在前面已经非形式化地介绍了关系模型及有关的基本概念 在关系模型中 无论是实体还是实体之间的联系均由单一的结构类型即关系来表示 关系模型是建立在集合代数基础上的 这里将从集合角度给出关系数据结构的形式化定义 其中 D1 D2 D3为域名 分别表示教师关系中姓名 性别和年龄的集合 域名无排列次序 如D2 男 女 女 男 1 关系的数学定义 1 域 Domain 定义1 域是一组具有相同数据类型的值的集合 又称为值域 用D表示 例如整数 实数和字符串的集合都是域 域中所包含的值的个数称为域的基数 用m表示 在关系中就是用域来表示属性的取值范围的 本章首页 3 定义2给定一组域D1 D2 Dn 这些域可以完全不同 也可以部分或全部相同 D1 D2 Dn 的笛卡儿积为D1 D2 Dn d1 d2 dn 叫做一个n元组 或简称为元组 元素中每一个值di叫做一个分量 若Di为有限集 其基数为mi i 1 2 n 则D1 D2 Dn的基数为 笛卡儿积可表示为一个二维表 表中的每行对应一个元组 表中的每列对应一个域 如果我们给出三个域 D1 王芳 王雷 李平 学生集合 D2 男 女 性别集合 D3 计算机语言 数据结构 计算机网络 课程集合 则D1 D2 D3 本章首页 本节首页 2 笛卡儿积 CartesianProduct 4 共有3 2 3 18个元组 其中 王芳 男 计算机语言 王雷 男 数据结构 李平 男 计算机网络 等都是元组 王芳 男 计算机 语言 王天雷 男 数据库系统与应用 郑蕾 男 计算机网络等都 是分量 该笛卡儿积的基数为3 2 3 18 这也就是说D1 D2 D3一 3 关系 Relation 定义3D1 D2 Dn的子集叫做在域D1 D2 Dn上的关系 用R D1 D2 Dn 表示 这里R表示关系的名字 n是关系的目或度 也称为元数 本章首页 本节首页 上一页 5 关系中的每个元素是关系中的元组 元关系 以此类推 段 元组则被称为记录 关系是笛卡尔积的子集 所以关系也是一个二维表 表的每行对 应一个元组 表的每列对应一个域 由于域可以相同 为了加以区分 必须对每列起一个名字 关系中的每一列称为属性 列名称为属性名 n目关系必有n个属性 在定义中 n 1的关系只含有一个属性 称为单元关系 n 2为二 在SQLServer数据库中 通常关系被称为数据表 属性被称为字 学生选课表 姓名 性别 所选课程 如下表给出了一张学生选课表 该表由学生姓名 性别和所选课程 组成 该关系的名字为学生选课表 属性名就是域名 即姓名 性别和 所选课程 这个关系可表示为 本章首页 本节首页 上一页 6 在关系模型中 关键字 简称键 是一个重要概念 通常由一个或多个属性组成 3 外键 如果一个关系R1中包含有另一个关系R2的主键所对应的属性组F 则称F为R1的外键 并称关系R1为参照关系 关系R2为信赖关系 1 候选键 如果一个属性集能惟一标识元组 且又不含有多余的属性 那么这个属性集称为关系的候选键 2 主键 如果一个关系中有多个候选键 则可选定其中一个为关系的主键 例如 学生关系和系部关系分别为 R1 学生 学号 姓名 性别 年龄 系编号 R2 系部 系编号 系名 系主任 学生关系R1的主键为学号 系部关系R2的主键为系编号 在R1中系编号是它的外键 即系编号是R2的主键 将它作为外键放在R1中 实现两关系的联系 4 主属性和非主属性 包含在任何一个候选主键字中的属性称为主属性 不包含在任何一个候选关键字中的属性称为非主属性 本章首页 本节首页 上一页 7 2 关系模式 关系模式是对关系的描述 通常它包括关系名 组成该关系的多 个属性名 域名 属性向域的映像 即属性与域之间的映像关系 等 4个部分 通常记为R D1 D2 Dn R为关系名 D1 D2 Dn为属性名 属性向域的映像常用属性的类型 长度来说明 关系 实际上就是关系模式在某一时刻的状态或内容 也就是说关系模式是 型 关系模式就是二维表的表框架或结构 它相当于文件结构或者记 录结构 关系是它们的值 在实际中 常常把关系模式和关系统称为 关系 大家可以从上下文中加以区别 设关系名为REL 其属性为A1 A2 An 则关系模式为 REL A1 A2 An 对每个Ai i 1 n 还包括该属性到值域的映象 即属性的取值范围 1 关系模型 所有的关系模式 属性名和关键字的汇集 是模式描述的对象 本章首页 本节首页 上一页 8 2 关系数据库模式 一组关系模式的集合叫作关系数据库模式 关系数据库模式是对关系数据库结构的描述 或者说是对关系数据库框架的描述 也就是前面所讲过的关系的头 可以看作是关系的型 与关系数据库模式对应的数据库中的当前值就是关系数据库的内容 成为关系数据库的实例 即前面所讲过的关系体 可以看作是关系的值 例如 在教学数据库中 共有五个关系 其关系模式分别为 学生 学号 姓名 性别 年龄 系别 教师 教师号 姓名 性别 年龄 职称 工资 岗位津贴 系别 课程 课程号 课程名 课时 选课 学号 课程名 成绩 授课 教师号 课程号 在每个关系中 又有其相应的数据库的实例 元组 本章首页 本节首页 上一页 9 2 5 2关系的完整性 关系模型的完整性规则是对关系的某种约束条件 关系的完整性约束条件包括三大类 实体完整性 参照完整性和用户定义的完整性 1 实体完整性 EntityIntegrity 实体完整性是指主关系键的值不能为空或部分为空 在任何关系的任何一个元组中 主键的任一分量都不允许为空值 即若属性A是基本关系R的主属性 则属性A不能取空值 也即要求关系中元组在组成主键的属性上不能有空值 因为在一个关系中 主键是惟一标识一个元组的 因而它也是惟一标识该元组所表示的某个实体的 如果主键属性中某些分量为空值 将难以判断该元组与其他元组的区别 这将带来复杂的语义问题 禁止主键属性值为空值即可避免这一问题 例如 在学生关系 学生自然情况 学号 班级号 姓名 性别 出生年月 入学成绩 中 学号 为主键 那么 学号 这个属性不能取空值 本章首页 10 2 参照完整性 ReferentialIntegrity 现实世界中的实体之间往往存在某种联系 在关系模型中实体及实体间的联系都是用关系来描述的 这样就自然存在着关系与关系间的引用 我们先引进一个 外键 的概念 若某个属性或属性不是关系A的主码 但它是另一关系B的主码 则该属性或属性组称为关系A的外键 在关系A中 外键或取空值或者等于关系B中某个元组的主码值 例 有两个基本关系为 学生表 学号 班级号 姓名 性别 出生年月 入学成绩 班级表 班级号 班级名称 所属系部 入学时间 系别 学生表的主码为学号 而班级表的主码为班级号 因而班级号是学生表的外键 按照参照完整性 学生表中的外键即班级号的取值有两种可能 取空值 表明该学生尚未分配到任何班级 若取非空值 则它必须是参照关系班级表中某个元组中的班级号的值 因为该学生不能属于一个不存在的班级 本章首页 本节首页 11 3 用户定义的完整性 User definedIntegrity 任何关系数据库系统都应该支持实体完整性和参照完整性 除此之 外 不同的关系数据库系统根据其应用环境的不同 往往还需要一些特 殊的约束条件 用户定义的完整性就是针对某一具体关系数据库的约束 条件由应用环境决定的 它反映一具体应用所涉及的数据必须满足的语 义要求 例如某个属性必须取惟一值 某些属性值之间应满足一定的函 数关系 学生的年龄定义为两位整数 且范围在15 30之间 性别只接 受 男 或 女 等等 系统提供定义和检验这类完整性的机制 以便用统 一的系统方法处理它们 而不再由应用程序承担这项工作 在关系的完整性规则中 实体完整性和参照完整性是关系模型必须 满足的完整性的约束条件 被称做是关系的两个关系不变性 应由关系 系统自动支持 而用户完整性反映了用户的要求 是用户自行定义的 本章首页 本节首页 上一页 12 2 5 3关系代数 关系代数是一种抽象的查询语言 是关系数据操纵语言的一种传统表达式 它是用对关系的运算来表达查询的 任何一种运算都是将一定的运算操作应用于一定的运算对象上 得到预期的运算结果 所以运算对象 运算符 运算结果是运算的三大要素 关系代数的运算对象是关系 运算结果亦为关系 关系代数的运算符包括四类 集合运算符 专门的关系运算符 比较运算符和逻辑运算符 如下页 表一 所示 关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类 其中传统的集合运算将关系看成元组的集合 其运算是从关系的 水平 方向即行的角度来进行的 而专门的关系运算不仅涉及行而且涉及列 比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的 本章首页 13 表一 本章首页 返回 14 2 5 3 1传统的集合运算 定义设关系R和关系S具有相同的关系模式 即两个关系都有相同的属性 且相应的属性取自同一个域 则关系R和关系S的并是由属于关系R或关系S的元组构成的集合 即R和S的所有元组合并 删去重复元组 组成一个新关系 其结果仍为n目关系 记为R S t t R t S 其中t是元组变量 关系R和关系S的元数相同 对于关系数据库 记录的插入和添加可通过并运算实现 1 并 Union 定义设关系R和关系S具有相同的关系模式 R和S的差是由属于R但不属于S的所有元组构成的集合 即R中删去与S中相同的元组 组成一个新关系 其结果仍为n目关系 记为R S t t R t S R和S元数相同 通过差运算 可实现关系数据库记录的删除 2 差 Difference 本章首页 本节首页 上一页 15 定义设关系R和关系S具有相同的关系模式 R和S的交是由属于R又属于S的元组构成的集合 记为R S t t R t S 如果两个关系没有相同的元组 那么他们的交为空 两个关系的并和差运算为基本运算 即不能用其他运算表达 而交运算为非基本运算 交运算可以用差运算来表示 R S R R S 3 交 Intersection 本章首页 本节首页 上一页 4 笛卡儿积 CartesianProduct 16 例 设有两个关系R和S 且R和S具有相同的关系模式 则分别求出关系R和关系S的并 差 交和笛卡儿积 如下图所示 本章首页 本节首页 上一页 17 2 5 3 2专门的关系运算 由于传统的集合运算 只是从行的角度进行 而要灵活地实现关系数据库多样的查询操作 必须引入专门的关系运算 1 选择 selection 定义选择操作是根据某些条件对关系进行水平分割 即在关系R中选取符合条件的元组 记作其中F表示选择条件 它是一个逻辑表达式 取逻辑值 真 或 假 逻辑表达式F的基本形式为X1 Y1 X2 Y2 其中 为比较运算符 它可以是 或 X1 Y1等是属性名 常量或简单函数 属性名也可以用它的列序号来代替 表示逻辑运算符 它可以是 或 表示可选项 即 中的部分可以省略 因此选择运算实际上是关系R中选取使逻辑表达式F为真的元组 这是从行的角度进行的运算 本章首页 本节首页 上一页 18 为了说明选择关系运算 这里假设有学生关系student 如下表所示 例 从学生关系student中查询入学成绩大于520分的学生信息 运算式为 运算结果如下表所示 本章首页 本节首页 上一页 19 例 从学生关系student中查询性别为女的学生信息 运算式为 运算结果如下表所示 2 投影 Projection 定义关系R上的投影操作是从R中选择出若干属性列组成新的关系 记作其中A为R中的属性列投影操作是从列的角度进行的运算 即对关系R进行垂直分割 消去某些列 并重新安排列的顺序 再删去重复的元组 本章首页 本节首页 上一页 20 例 从学生关系student中查询学生姓名和入学成绩两个属性信息 运算式为 运算结果如右表所示 3 连接 Join 定义连接是指从两个关系的笛卡儿积中选取属性值满足一定条件的元组 记作其中A B分别为R和S上可比的属性组 是比较运算符 连接运算从R和S的笛卡儿积R S中选取R关系在A属性组上的值与S关系在B属性组上值满足比较关系的 元组 本章首页 本节首页 上一页 21 为 的连接运算称为等值连接 它是从关系R和S的笛卡儿积中选取A B属性值相等的那些元组 即等值连接为 自然连接是一种特殊的等值连接 它要求两个关系中进行比较的分量必须是相同的属性组 并且要在结果中把重复的属性去掉 即若R和S具有相同的属性组B 则自然连接可记作 一般的连接操作是从行的角度进行运算 但自然连接还需要取消重复列 所以是同时从行和列的角度进行运算 本章首页 本节首页 上一页 22 本章首页 本节首页 上一页 23 本章首页 本节首页 上一页 4 除法 Division 定义给定关系R X Y 和S Y Z 其中X Y Z为属性组 R中的Y与S中的Y可以有不同的属性名 但必须出自相同的域集 R与S的除法运算得到一个新的关系P X P是R中满足下列条件的元组在X属性列上的投影 元组在X上分量值x的象集Yx包含S在Y上投影的集合 其中YX为x在R中的象集 x tr X 除法操作是同时从行和列角度进行运算 例 设有关系R和关系S如下图所示 求R S的值 在关系R中 姓名 性别可以取3个值 王雷 女 张宾 男 许宁 男 其中 王雷 女 的象集为 计算机语言 张宾 男 的象集为 数据库原理 操作系统 计算机语言 汇编语言 许宁 男 的象集为 汇编语言 24 本章首页 本节首页 上一页 关系S在选修课程上的投影为 计算机语言 数据库原理 操作系统 汇编语言 显然只有 张宾 男 的象集包含S在选修课程属性上的投影 所以R S 张宾 男 25 2 5 3 3关系代数表达式及其应用举例 在关系代数运算中 我们已经介绍了9种关系代数运算 其中并 差 笛卡儿积 投影和选择5种运算为基本的运算 运算即交 连接 自然连接 除法均可以用这5种基本运算经过有限次复合来表达 这种表达式称为关系代数表达式 其运算结果仍是一个关系 我们可以用关系代数表达式表示各种数据查询操作 例 设数据库中有3个关系 学生关系 学号 班级号 姓名 出生年月 入学成绩 选修关系 学号 课程号 成绩 课程关系 课程号 课程名称 学分 下面用关系代数表达式表达每个查询语句 1 检索相应课程号为01003的学生的学号与成绩 表达式为 本章首页 本节首页 上一页 26 该式表示先对选修关系执行选择操作 然后执行投影操作 表达式中也可以不写属性名 而直接写上属性的序号 如该题也可用表达式来实现 2 检索相应课程号为01003的学生学号与姓名 表达式为 由于这个查询涉及到学生关系和选修关系 因此先要对这两个关系执行自然连接操作 然后再执行选择和投影操作 表达式为 3 检索选修课程名为 数据结构 的学生学号与姓名 表达式为 4 检索选修课程号为01003或02003的学生学号 5 检索不学01003号课程的学生姓名与出生年月 表达式为 本章首页 本节首页 上一页 例 设数据库中有3个关系 学生关系 学号 班级号 姓名 出生年月 入学成绩 选修关系 学号 课程号 成绩 课程关系 课程号 课程名称 学分 例 设数据库中有3个关系 学生关系 学号 班级号 姓名 出生年月 入学成绩 选修关系 学号 课程号 成绩 课程关系 课程号 课程名称 学分 27 设有关系R和关系S如下表 计算 R S R S R S R S R S 的值 本节习题 本章首页 名词解释 关系模型 属性 域 元组 主键 外键 关系模式 关系数据库 试述关系模型的三个完整性 为什么关系中的元组没有先后顺序 为什么关系中不允许有重复元组 关系代数的运算有几大类 分别是什么 笛卡儿积 等值连接 自然连接三者有什么区别 28 本章首页 上一页 设有关系R和关系S如下表 求R S的值 设数据库中有3个关系 学生关系S 学号 班级号 姓名 出生年月 选修关系SC 学号 课程号 成绩 课程关系C 课程号 课程名称 任课教师 试用关系代数表达式表示下列查询语句和操作语句 29 检索学习课程号为C2的学生学号与成绩检索选修课程名为Maths的学生学号与姓名检索选修课程号为C2或C4的学生学号检索选修课程号为C2和C4的学生姓名检索不学C2课程的学生学号检索学习全部课程的学生姓名检索所学课程包含学生S3所学课程的学生学号 30 2 5 4关系数据库的设计理论 关系数据库是由一组关系组成的 那么针对一个具体问题 应该如何构造一个适合于它的数据模式 即应该构造几个关系 每个关系由那些属性组成等 这是关系数据库逻辑设计问题 关系数据库设计理论对数据库逻辑设计有重要的指导作用 它主要包括三个方面的内容 数据依赖 范式和模式设计方法 其中数据依赖起着核心作用 前面已经讲述了关系数据库 关系模型的基本概念以及关系数据库的标准语言 如何使用关系模型设计关系数据库 也就是面对一个比较好的关系模式的集合 其中每个又应该由哪些属性 这属于数据库设计的问题 确切地讲是数据库逻辑设计的问题 回到目录 31 2 5 4 1规范化问题的提出 2 5 4 1 1规范化理论的重要内容 关系数据库的规范化理论最早是由关系数据库的创始人E F Cold提出的 后经许多专家学者对关系数据库理论作了深入的研究和发展 形成了一整套有关关系数据库设计的理论 在该理论出现以前 层次和网状数据库的设计只是遵循其模型本身固有的原则 而无具体的理论依据可言 因而带有盲目性 可能在以后的运行和使用中发生许多预想不到的问题 在关系数据库系统中 关系模型包括一组关系模式 并且各个关系不是完全孤立的 如何设计一个合适的关系数据库系统 关键是关系数据库模式的设计 一个好的关系数据库模式应该包括多少关系模式 而每一个关系模式又应该包括哪些属性 又如何将这些相互关联的关系模式组建成一个适合的关系模型 这些工作决定了整个系统运行的效率 也是系统成败的关键所在 所以必须在关系数据库的规范化理论的指导下逐步完成 本章首页 32 关系数据库的规范化理论主要包括三个方面的内容 函数依赖 范式 NormalForm 和模式设计 其中函数依赖起着核心作用 是模式分解和模式设计的基础 范式是模式分解的标准 本章首页 本节首页 2 5 4 1 2不合理的关系模式存在的存储异常问题 数据库的逻辑设计为什么要遵循一定的规范化理论 什么是好的关系模式 某些不好的关系模式可能导致哪些问题 下面通过例子对这些问题进行分析 例1 要求设计教学管理数据库 其关系模式 SCD如下 SCD SNO SN AGE DEPT MN CNO SCORE 其中SNO表示学生学号 SN表示学生姓名 AGE表示学生年龄 DEPT表示学生所在系别 MN表示系主任姓名 CNO表示课程号 SCORE表示成绩 根据实际情况 这些数据有以下语义规定 33 1 一个系有若干个学生 但一个学生只属于一个系 2 一个系只有一名系主任 但一个系主任可以同时兼几个系的系主任 3 一个学生可以选修多门功课 每门课程可被若干个学生选修 4 每个学生学习的课程有一个成绩 在此关系模式中填入一部分具体的数据 则可得到SCD关系模式的实例 即一个教学管理数据库 如下图所示 本章首页 本节首页 上一页 34 根据上述的语义规定并分析以上关系中的数据 我们可以看出 SNO CNO 属性的组合能唯一标识一个元组 所以 SNO CNO 是该关系模式的主键 但在进行数据库的操作时 会出现以下几方面的问题 1 数据冗余 每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生选修的课程 同时学生的姓名 年龄也都要重复存储多次 数据的冗余度很大 浪费了存储空间 2 插入异常 如果某个新系没有招生 尚无学生时 则系名和系主任的信息无法插入到数据库中 因为在这个关系模式中 SNO CNO 是主键 根据关系的实体完整性约束 主键的值不能为空 而这时没有学生 SNO和CNO均无值 因此不能进行插入操作 另外 当某个学生尚未选课 即CNO未知 实体完整性约束还对规定 主键的值不能部分为空 同样也不能进行插入操作 3 删除异常 当某系学生全部毕业而没有招生后时 要删除全部学生的距离 这时系名 系主任也随之删除 而现实总这个系仍然存在 但在数据库中却无法找到该系的信息 另外 如果某个学生不再选修C1课程 本应该只删去C1 但C1是主键的一部分 为保证实体完整性 必须将整个元组一起删掉 这样 有关学生的所有句路的其他信息也随之丢失 本章首页 本节首页 上一页 35 本章首页 本节首页 上一页 4 更新异常 如果某学生改名 则该学生的所有记录都要逐一修改SN的值 又如某系更换系主任 则属于该系的学生记录都要修改MN的内容 稍有不慎 就有可能漏改某些记录 这就会造成数据库的不一致性 破坏了数据的完整性 由于存在以上问题 我们说 SCD是一个不好的关系模式 产生上述问题的原因 直观地说 是因为关系中 包罗万象 内容太复杂了 那么 怎样才能得到一个好的关系模式呢 我们把关系模式SCD分解为学生关系S SNO SN AGE DEPT 选修课SC SNO CNO SCORE 系关系D DEPT MN 三个结构简单的关系模式 36 在以上三个关系模式中 实现了信息的某种程度的分离 S中存学生基本信息 与所选课程及系主任无关 D中存储系的有关信息 与学生无关 SC中存储的学生选课的信息 而与学生及系的有关信息无关 与SCD相比 分解为三个关系模式后 数据的冗余程度明显降低 本章首页 本节首页 上一页 37 同时 由于数据冗余度的降低 数据没有重复存储 也不会引起更新异常 当新插入一个系时 只要在关系D中添加一个记录就可以了 当某个学生尚未选课时 只要在关系S中添加一条学生记录就可以了 而与选课关系无关 这就避免了插入异常 当一个系的学生全部毕业时 只需在S中该系的全部学生记录 而关系D中有关该系的信息仍然保留 从而不会引起异常删除 经过上述分析 我们说分解后的关系模式是一个好的关系数据库模式 从而得出结论 一个好的关系模式应该具备四个条件 1 尽可能少的数据冗余 2 没有插入异常 3 没有删除异常 4 没有更新异常 一个好的关系模式并不是在任何情况下都是最优的 比如查询某个学生选修课程名及所在系的系主任时 要通过连接 而连接所需的系统开销非常大 因此要以实际设计的目标出发进行设计 注意 本章首页 本节首页 上一页 38 在设计关系模式的时候 必须从语义上分析这些依赖关系 数据库模式的好坏和关系中各属性间的依赖关系有关 因此 我们先讨论关系规范化理论 按照一定的规范设计的关系模式 将结构复杂的关系分解成结构简单的关系 从而把不好的关系数据库模式转变成为好的关系数据库模式 这就是关系的规范化 规范化又可以根据不同的要求而分成若干级别 我们要设计的关系模式中的各属性是相互依赖 相互制约的 这样才构成了一个结构严谨的整体 本章首页 本节首页 上一页 39 2 5 4 2函数依赖 数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系 它是现实世界属性间相互联系的抽象 是数据内在的性质 是语义的体现 现在人们已经提出了许多种类型的数据依赖 其中最重要的数据依赖是函数依赖 FunctionalDependency FD 和多值依赖 MultivaluedDependency MVD 本节介绍函数依赖的概念和键的形式化定义 1 函数依赖的定义 定义 设R U 是属性集U上的关系模式 X Y是U的子集 r是R的任一具体关系 如果对r的任意两个元组t1 t2 由t1 x t2 x 导致t1 Y t2 Y 则称X函数决定Y或Y函数依赖于X 记为X Y X Y为模式R的一个函数依赖 这里t1 X t2 X 分别表示元组t1 t2在属性集X上的值 FD是对关系R的一切可能的当前值R定义的 不是针对某个特定关系 也就是说 对于X的每一个具体的值 都有惟一的Y值与之对应 即Y值由X值决定 因而这种数据依赖称为函数依赖 本章首页 40 函数依赖是语义范畴的概念 只能根据语义来确定一个函数 例如 姓名 出生年月 这个函数依赖只有在没有同名人的条件下成立 如果允许在同一关系中有相同姓名存在 则出生年月就不再函数依赖于姓名了 如果系统设计人员限定不允许相同姓名出现 则 姓名 出生年月 函数依赖成立 例 有一个关系模式R 学号 姓名 出生年月 系编号 系负责人 在R的关系r中 存在着如下函数依赖 学号 姓名 每个学号只能对应一个姓名 学号 出生年月 每个学生只能对应一个出生年月 系编号 系负责人 每个系只能有一名负责人 下面介绍一些术语和记号 1 若X Y 则X称为决定因素 2 若X Y Y X 则记作X Y 3 若Y不函数依赖于X 则记作X Y 函数依赖 完全函数依赖部分函数依赖传递函数依赖 本章首页 本节首页 41 例 有一关系模式S 学号 姓名 系名称 出生年月 若无重名还存在学号 姓名函数依赖 例 有一关系模式SC 学号 课程号 成绩 教师编号 本章首页 本节首页 上一页 42 例 关系模式R 学号 姓名 出生年月 系编号 系负责人 在此关系模式中有如下函数依赖 学号 系编号 相当于X Y 系编号 学号 相当于Y X 系编号 系负责人 相当于Y Z 2 键 键是唯一标识实体的属性集 这是对键的直观定义 下面用函数依赖的概念来定义它 本章首页 本节首页 上一页 包含在任何一个候选键中的属性 叫主属性 PrimeAttribute 不包含在任何主键中的属性称为非主属性 NonprimeAttribute 或非键属性 Non keyAttribute 43 0601 2 44 本章首页 本节首页 上一页 主键可为单个属性 也可为属性组 在特殊情况下 主键可以由整个元组组成 称为全键 All key 如在关系模式S 学号 姓名 系名称 出生年月 中 学号是主键 而在关系模式SC 学号 课程号 成绩 教师编号 中 属性组合 学号 课程号 是主键 下面举一个全键的例子 定义关系模式R中属性或属性组X并非R的主键 但X是另一个关系模式的主键 则称X是R的外来键 ForeignKey 也称外键 设有关系模式A 作者 书籍 读者 假设一个作者可以编著多本书 某一本书可由多个作者编著 读者可以阅读不同作者的不同书籍 这个关系模式的主键为 作者 书籍 读者 如在关系模式SC 学号 课程号 成绩 教师编号 中 学号不是主键 但学号是关系模式S 学号 姓名 系名称 出生年月 的主键 则学号是关系模式SC的外键 主键与外键提供了一个表示关系间联系的手段 如关系模式S与SC的联系就是通过学号来实现的 45 2 5 4 3规范化和范式 1 关系模式的存储异常 所谓关系数据库设计就是在关系模式的多种组合中选取一个合适的或者性能好的关系模式集合作为数据库模式 下面举一个实例 说明采用不同的数据库模式将产生不同的设计效果 并从中得到对数据库模式设计的评价 在数据库应用系统中 经常遇到这样一个基本问题 针对一组数据 如何构造一个适合于它们的数据库模式 这就是数据库设计问题 确切地讲是数据库的逻辑设计问题 设计任何一种数据库应用系统 不论是层次的 网状的还是关系的 都会遇到如何构造合适的数据库模式问题 由于关系模型有严格的数学理论基础 因此人们就以关系模型为背景来讨论这个问题 形式了数据库逻辑设计的一个有力工具 关系数据库的规范化理论 因此 这里的数据库设计是指关系数据库的设计 本章首页 46 某学校要建立一个数据库来描述学生的一些情况 由现实世界的已知事实得到如下对应关系 1 一个系有若干名学生 一个学生只属于一个系 2 一个系只有一名负责人 3 一个学生可以选修多门课程 每门课程有若干学生选修 4 每个学生学习每一门课程都有一个成绩 根据上述情况 可以找出如下一组属性 U 学号 姓名 系编号 系名称 系负责人 课程号 课程名称 成绩 最简单的设计是 采用一个总的关系模式 把所有的属性组合成一个关系模式 即这个描述学生情况的数据库模式是只有一个关系模式的集合 形式如下 SA 学号 姓名 系编号 系名称 系负责人 课程号 课程名称 成绩 在这个关系模式中 存在如下函数依赖 学号 课程号 姓名 学号 课程号 系编号 学号 课程号 系名称 学号 课程号 系负责人 学号 课程号 课程名称 学号 课程号 成绩 由主键的定义可知 学号 课程号 是主键 即学号和课程号可以唯一地确定一个元组 本章首页 本节首页 47 这个关系模式可能带来下列问题 1 数据冗余 每一个系负责人的姓名要与该系每一名学生选修的每一门课程的成绩出现的次数一样多 也就是系负责人的姓名将被重复保存 这是数据冗余 并且它一方面浪费存储资源 另一方面DBMS要付出很大代价维护数据库的完整性 如某系负责人更换后 就必须逐一修改有关的每一个元组 2 修改异常或潜在的不一致性 当更新某些属性时 如学生所在的系 由于数据冗余 可以一部分相关的元组被修改 而另一部分相关元组却没有被修改 这就造成了数据的不一致性 例如 同一个学生对应两个系名 3 插入异常 如果新成立一个系 还没有学生 或者有学生但没有安排课程 那么就无法把这个系的信息及系负责人的姓名存入数据库 这是因为在关系模式SA中 主键为 学号 课程号 而关系模型的实体完整性规则要求主键值不能为空值 因此在这种情况下相应的元组无法插入 4 删除异常 如果某个系的学生全部毕业了 在删除该系全体学生信息的同时 把这个系的信息及负责人的姓名也一同删去了 丢失了应该保留的信息 本章首页 本节首页 上一页 48 由于上述几个问题 该学生数据库模式设计不是一个好设计 一个好的数据库模式应当不会发生插入和删除异常 冗余尽可能少 插入异常和删除异常统称为存储异常 为什么会产生这种存储异常呢 这是因为这个关系模式中的函数依赖对于关系模式而言 存在一些不好的性质 这一点将在后面介绍 SB 学号 姓名 系编号 DT 系编号 系名称 系负责人 SC 学号 课程名 成绩 C 课程号 课程名称 这4个关系模式都不会发生存储异常 数据的冗余也得到了控制 一个关系模式的函数依赖会有哪些不好的性质 如何改造一个不好的关系模式 这就是规范化理论讨论的内容 现在把这个学生数据库模式改造一下 分成如下4个关系模式 本章首页 本节首页 上一页 49 2 关系的规范化 在关系模式的设计中 函数依赖起着重要作用 关系模式设计的好坏依赖于它的函数依赖是否满足特定的要求 满足特定要求的模式称为范式 NormalForm 满足不同程度要求的模式为不同范式 关系模型的奠基人E F Codd在1971年至1972年间系统地提出了第一范式 1NF 第二范式 2NF 和第三范式 3NF 的概念 讨论了规范化问题 1974年 E F Codd和Boyce又共同提出了一个新范式 即BCNF 1976年Fagin提出第四范式 4NF 现在已有人提出第五范式 5NF 所谓 第几范式 是表示关系模式的某一种级别 因此 范式这个概念可以理解成符合某种级别的关系模式的集合 一般地 如果R属于第x范式 那么就可以写成R xNF 各种范式之间的关系满足5NF4NF3NF2NF1NF 如下图所示 本章首页 本节首页 上一页 50 各种范式之间的关系 一个低一级范式的关系模式 通过模式分解可以转换为若干个高一级范式的关系模式的集合 这种过程叫做规范化 3 第一范式 定义设R是一个关系模式 如果R中每一个属性A的值域中的每一个值都是不可分解的 则称R属于第一范式 记作R 1NF 例 有一关系模式SC1 学号 课程 学生和选修课程的记录如下表所示 学生选修课程的记录 本章首页 本节首页 上一页 51 在关系模式SC1中存在两个问题 1 更新操作困难 如果学号为007501的学生想把选修课程改为 电工学 继电保护 则DBMS在处理上将面临二义性问题 是修改第一个元组的课程属性值 还是修改第一个元组的学号属性值 2 增加属性存在问题 若增加一个属性 成绩 那么该属性值表达的含义不清 此问题应这样解决 将课程属性的属性值拆开 形成如下关系模式SC2 学号 课程 见下表所示 解决关系模式SC1问题的方案 显然 SC2 1NF 在上述模式中 课程属性值是可分解的 因此SC11NF 本章首页 本节首页 上一页 52 4 第二范式 定义如果R 1NF 且每一个非主属性完全函数依赖于主键则R 2NF 例 有一关系模式SGD 学号 姓名 系名称 系负责人 课程号 成绩 通过分析及由主键的定义可知SGD中的主键为 学号 课程号 因此 姓名 系名称 系负责人 成绩均是非主属性 而非主属性中只有成绩是完全依赖于主键 其他属性是部分函数依赖于主键 因此 关系模式SGD不符合2NF定义 即SGD 2NF 经过以上分析 可以得到两个结论 1 从1NF关系中消除非主属性对关系键的部分函数依赖 则可得到2NF关系 2 如果R的关系键为单属性 或R的全体属性均为主属性 则R 2NF 本章首页 本节首页 上一页 53 下面将SGD分解为两个关系模式 SG 学号 课程名 成绩 SD 学号 姓名 系名称 系负责人 SG的主键是 学号 课程号 SD的主键是学号 从前面的函数依赖分析中得知 关系模式SG和SD的非主属性对主键都是完全函数依赖 因此 SG 2NF SD 2NF 一个关系模式R不属于2NF 就会产生以下问题 1 插入异常 2 删除异常 3 修改复杂 详细内容参见本书相关章节 本章首页 本节首页 上一页 54 5 第三范式 定义如果R 2NF 且每一个非主属性不传递函数依赖于主键 则R 3NF 例 考察上例中的两个关系模式SG和SD 显然 SG中不存在传递函数依赖 因此 SG 3NF 下面分析SD中的函数依赖 由传递函数依赖的定义可得 一个关系模式R不属于3NF 同样会产生类似于上节的问题 解决上述问题的办法是将关系模式SD分解 消除关系模式SD中存在的传递函数依赖 学号 系名称系名称 学号系名称 系负责人 1 插入异常 2 删除异常 3 修改复杂 详细内容参见本书相关章节 本章首页 本节首页 上一页 55 下面将SD分解为两个关系模式 SDN 学号 姓名 系名称 DM 系名称 系负责人 SDN的主键是学号 DM的主键是系名称 显然 在这两上关系模式中既不存在部分函数依赖 也不存在传递函数依赖 因此SDN 3NF DM 2NF 6 BCNF BCNF BoyceCoddNormalForm 是由Boyce与Codd提出的 它比3NF更进了一步 是修正的第三范式 有时也称为扩充的第三范式 1 所有非主属性对每一个主键都是完全函数依赖 2 所有的主属性对每一个不包含它的主键也是完全函数依赖 3 没有任何属性完全函数依赖于非主键的任何一组属性 定义关系模式R 1NF 若X Y且YX时X必含有主键 则R BCNF 由于3NF不能很好地处理含有多个候选键和候选键是组合项的情况 因此人们定义了一个更强的范式BCNF 一个满足BCNF的关系模式有以下特点 本章首页 本节首页 上一页 56 可以证明 若R BCNF 则R 3NF 但是若R 3NF 则R不一定属于BCNF 由于R BCNF 按定义排除了任何属性对主键的部分函数依赖和传递函数依赖 所以R 3NF 下面用几个例子说明属于3NF的关系模式不一定属于BCNF 考察关系模式SG 学号 课程号 成绩 它只有一个主键 学号 课程号 并且没有任何属性对 学号 课程号 部分函数依赖或传递函数依赖 所以SG 3NF 同时 SG中 学号 课程号 是唯一的决定因素 所以SG BCNF 在关系模式SDN 学号 姓名 系名称 中 假设姓名具有唯一性即没有同名人 那么SDN就有两个主键 这两个主键都由单个属性组成 其他属性不存在对主键的传递函数依赖与部分函数依赖 所以SDN 3NF 同时SDN中除学号 姓名之外没有其他决定因素 所以SDN也属于BCNF 例 有一关系模式SCT 学生 课程 教师 在该关系模式中 存在如下对应关系 1 对于每门课 每个学生的授课教师只有一位 2 每位教师只讲授一门课 3 每门课可由不同教师讲授 本章首页 本节首页 上一页 57 由语义可得到如下函数依赖 学生 课程 教师教师 课程 学生 教师 课程这些对应关系可用右图表示 例 有一关系模式SCP 学生 课程 名次 在SCP中有如下对应关系 1 每个学生选修每门课程的成绩有一定的名次 2 每门课程中每一名次只有一个学生 即没有并列名次 由语义可得到如下函数依赖 学生 课程 名次 课程 名次 学生 由上面的分析可知 在该关系中有两个候选键 学生 课程 和 学生 教师 因为没有任何非主属性 因而也不存在非主属性对主键的部分函数依赖或传递函数依赖 所以SCT 3NF 另外 因为教师 课程 也就是教师是决定因素 但教师不是主键 由BCNF的定义可知 SCTBCNF 本章首页 本节首页 上一页 58 显然 这个关系模式有两个候选键 学生 课程 和 课程 名次 并且没有非主属性对主键的部分函数依赖或传递函数依赖 因此 SCP 3NF 另外 除 学生 课程 和 课程 名次 之外没有其他决定因素 所以 SCP BCNF 不满足BCNF的关系模式同样存在着更新异常 假设在SCT 学生 课程 教师 中 存在这样的元组 王峰 计算机网络 孙效 当删除信息 王峰学习计算机网络课程 时 将同时失去 教师孙效主讲计算机网络课程 这一信息 为什么会产生更新异常呢 因为教师是决定因素 但却不是候选键 如何解决这个问题呢 仍然采用关系模式分解的办法 如果将SCT分解为如下两个关系模式 SC 学生 课程 TC 教师 课程 则SC BCNF TC BCNF 这样分解之后解决了SCT中存在的更新异常问题 一个数据库模式中的关系模式如果都属于BCNF 那么在函数依赖范畴内 它已消除了插入和删除异常 3NF的 不彻底性 表现在存在主属性对主键的部分函数依赖或传递函数依赖 本章首页 本节首页 上一页 59 在关系数据库中 对关系模式的基本要求是满足第一范式 这样的关系模式就是合法的 允许的 但是 人们根据实际情况 可以将关系模式逐步分解达到2NF 3NF BCNF 规范化的基本思想是逐步消除数据依赖中不合适的部分 使数据库模式中的各关系模式达到某种程序的分离 让一个关系描述一个概念或一个实体或实体之间一种联系 若一个关系描述多于一个的概念时就把这些概念分离出去 因此 所谓规范实质上是概念的单一化 函数依赖和多值依赖是两种最重要的数据依赖 本书只介绍函数依赖 多值依赖不属于本科教学范畴 这里不作介绍 如果只考虑函数依赖 则属于BCNF的关系模式其规范化程度是最高的 本章首页 本节首页 上一页 60 这个过程可以用下图来描述 消除非主属性对主键的部分函数依赖 消除非主属性对主键的传递函数依赖 消除主属性对主键的部分函数依赖和传
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮合作协议劳动合同
- 饭店废油回收合同范本
- 饮料广告宣传合同范本
- 饼干厂家供货合同范本
- 鱼苗销售协议合同范本
- 龙虾店入股合同协议书
- 餐饮员工服务表彰奖励制度
- 签合同同时签就业协议
- 签订固定期限合同协议
- 粮油芝麻购销合同范本
- 华为ICT大赛2025-2026中国区(网络)赛道高分备考试题库500题(含答案解析)
- 数控加工中心培训知识课件
- 25《刘姥姥进大观园》+公开课一等奖创新教案
- 全文2025年《安全生产法》
- 2025年及未来5年中国体育赛事市场运行态势及行业发展前景预测报告
- GB/T 23436-2025汽车风窗玻璃清洗液
- 厂区车间安全通道培训课件
- 2025年中国米诺地尔行业市场全景分析及前景机遇研判报告
- 学生资助工作课题申报书
- 工商注册业务培训
- 月嫂考试二百题及答案
评论
0/150
提交评论