第3章 · 播客 第7集
数据库系统 · E-R 图转关系与模型优化
🎙️ 本集播客:第7集:1:1 三种转换方案、1:n 两种方案、m:n 单独成表关键字由两实体标识组成,多元联系、自联系、弱实体的转换,加上数据模型优化里的减少连接、分割关系、快照与视图的区别——练习题第 8、15 题全在这一集。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
小雅姐,E-R 图转关系模型的总原则是什么?
雅
小雅
基本原则一句话:实体和联系分别转换成关系,属性则转换成相应关系的属性。因此 E-R 模型向关系模型的转换比较直观,但不同元数的联系具体转换方法稍有不同。转换之前还有个三步框架:第一步,将概念结构向一般关系模型转化;第二步,将第一步得到的结构向特定的 DBMS 支持下的数据模型转换;第三步,依据应用的需求和具体的 DBMS 的特征进行调整与完善。
明
阿明
一对一联系怎么转?我记得方案不止一个。
雅
小雅
设有两个实体 E1 和 E2 之间为一对一联系,存在三种可能的转换方案。方案一:将实体 E1、E2 和联系名 R 分别转换成为三个关系,R 的属性由两个实体的关键字加联系自身属性组成,其中一个实体的关键字是候选关键字。方案二:将实体 E2 与联系名 R 一起转换成关系,E2 的属性由 E2 和 R 的属性加上 E1 的关键字组成。方案三与方案二类似,不过是把实体 E1 与联系 R 一起转换。所以三个方案实际上可归结为转换成三个关系和转换成两个关系两种。
明
阿明
什么时候用哪种?
雅
小雅
原文给了判断标准:如果每个实体的属性数较少,而联系的属性与两个实体之一关系又较密切,则可采用方案二或方案三,其优点是可减少关系数,有利于减少连接运算从而提高查询效率;但如果每个实体的属性较多,且合并后会造成较大数据冗余和操作异常,则以采用方案一为宜。记住两头:属性少联系近就合并省连接,属性多就分表防冗余。
明
阿明
一对多联系呢?
雅
小雅
两种方案。第一种:把两个实体类和一个联系类分别转换成对应的关系,联系类转换得到的关系,其属性由两个实体的标识属性和联系类本身的属性组成,并以多端实体类的标识属性为其关键字,结果为三个关系。第二种:转换成两个关系,将少端实体转换为一个关系,多端实体和联系合起来转换成一个关系,其属性由多端实体和联系的属性加上少端实体的标识属性组成,并以多端实体的标识属性为其关键字。注意关键词:联系并到多端,关键字取多端。
明
阿明
多对多联系就是第 8 题考的那个了。
雅
小雅
对,多对多联系没有合并的余地,必须单独建表。原文规则:由两个实体类之间多对多联系组成的 E-R 模型向关系模型转换时,将两个实体类和一个联系类分别转换成关系,联系类转换得到的关系的属性由两个实体类的标识属性和联系类本身的属性组成,其关键字是由两个联系的实体类的标识属性组成。第 8 题的选项 D 就是这句原话:联系单独转换为关系,关键字由两实体标识属性组成。
明
阿明
第 8 题那几个干扰项要怎么排?
雅
小雅
解析给了完整对照,你照着记:1:1 可合并到任一端;1:n 可合并到多端或单独建关系;m:n 必须单独建关系。干扰项 A「合并到任一端」是 1:1 的规则,B「合并到多端」是 1:n 的规则,C「合并到少端」哪个都不是,纯坑。考试给 m:n 选「合并」类的全错,只有单独转换是对的。
明
阿明
多元联系怎么转?
雅
小雅
实体类分别转换为相应的关系,三个实体类间的多元联系转换为以该联系名为关系名的关系,关系的属性由各实体的标识属性及其联系的属性组成,并以各实体的标识属性为其关键字。原文例子:部件 PART、工程 PROJECT 和供应者 SUPPLIER 三者之间的联系为 PJS,其属性为 QTY,转换时把四个名字分别转换为相应的关系。所以三元的答案跟 m:n 同款——联系单独成表,关键字是各实体标识的拼接。
明
阿明
自联系和弱实体类呢?弱实体这个词我第一次注意。
雅
小雅
自联系是同一实体集的实体间的联系,例如职工实体类内部有领导与被领导的联系,参与联系的实体虽然来自同一实体类,但所起的作用不一样。弱实体类:一个实体类,如果它的存在依赖于另一实体类,则称之为弱实体类。例如职工的亲属是依赖于职工实体类而存在的。由于弱实体类不能独立地存在,而是由其他实体标识而存在,所以不能单独地转换成一个关系,要跟着依赖的实体一起,原文转换成 EMPLOYEE 和 DEPENDENTS 两个关系,亲属关系里带着职工号 empno 才能定位。
明
阿明
转换完还要优化?我记得有个「数据模型的优化」。
雅
小雅
对,由 E-R 图转换得到的关系模型经过规范化以后,基本上可以反映一个企业数据的内在联系,但不一定能满足应用的全部需要和系统要求,因此还必须根据需求分析对模型做进一步的改善和调整,内容主要是改善数据库的性能和节省存储空间两个方面。先说性能,三个方面:减少连接运算、减小关系大小及数据量、尽量使用快照。
雅
小雅
减少连接运算这条我们已经讲过一半:连接的关系越多,参与连接的关系越大,开销也越大,有时为了保证性能,往往不得不牺牲规范化要求,把规范化的关系再合并起来,称之为逆规范化,当然这样做会引起更新异常。减小关系大小及数据量用的就是水平分割或垂直分割,原文举的例子正是分系建学生关系、教职工档案常用属性与非常用属性分开,和反规范化那集呼应上了。
明
阿明
快照!第 15 题考的就是快照和视图的区别。
雅
小雅
第 15 题答案先给:视图是虚关系,数据库中并不存储作为视图的导出关系,仅仅保留它的定义;快照则是一个由系统事先生成后保留在数据库中的实关系。原文讲了快照与视图的两点不同,第一点就是这个存储差别,第二点是变化差别:视图随数据当前值的变化而变化,快照则不随原来关系中数据的改变而及时改变,它只反映数据库中某一时刻的状态,不反映数据库的当前状态。
雅
小雅
原文还有个生动的比喻:犹如照片只反映某一时刻的情景,不能反映情景变化一样,之所以称它为快照,原因就在于此。但它与照片又有不同,快照不是一成不变的,它可以由系统周期性地刷新,或由用户用命令刷新,刷新时用当前值更新旧值。所以第 15 题的干扰项 D 说「快照随数据实时变化,视图不变」,正好把两者说反了,这种镜像干扰一眼识破。
明
阿明
快照有什么用?
雅
小雅
在实际应用中,快照可满足相当一部分应用的需要,甚至有些应用就是需要快照而不是当前值,例如注明列出某年某月某日截止的统计或报表就是快照。由于快照是事先生成并存储在数据库中的,因而可大大缩短响应时间。目前不少 DBMS,如 Oracle、MS SQL Server 等支持快照。对不支持快照的 DBMS,用户也可以把需要作为实关系使用的导出关系作为一个独立关系存于数据库中,但这种做法只能供查询使用,对它们的刷新及管理由用户负责。
明
阿明
性能讲完了,节省存储空间那块呢?
雅
小雅
两条措施。第一,缩小每个属性占用的空间,通常可以有两种方法:用编码和用缩写符号表示属性,但这两种方法的缺点是失去了属性值含义的直观性。第二,采用假属性。设某关系模型 R 的属性 A 和 B 之间存在函数依赖 A 决定 B,B 的每一个值需要占用较大的空间,但 B 的域中不同的值却比较少,A 的域中具有较多的不同值,则 B 的同一值可能在多个元组中重复出现。为了节省空间,可对 B 的值进行分类,用 B 撇表示 B 的类型,则 A 决定 B 可分解成两个函数依赖:A 决定 B 撇,B 撇决定 B。
雅
小雅
B 撇在原关系 R 中起了属性 B 的替身的作用,所以称 B 撇为假属性。原文例子:在职工关系中,职工的经济状况这一属性通常由职工号决定,一个大型企业的职工人数很多,如每一职工逐一填写,就要占用较多的空间。为了节省空间可把经济状况分为几种类型,在元组较多的职工关系中用经济状况的类型代替原来的经济状况,这里经济状况的类型就是假属性,另外建立一个较小的关系来描述每种经济状况类型的具体内容。
明
阿明
把大而少取值的属性抽出去建小表,主表里只存类型号。这个跟码表的思路一样。
雅
小雅
就是这个意思。最后原文还有一句收尾的定性话:数据库设计与数学问题求解不同,它是一项综合性工作,设计结果很难说是最佳的,常常有得有失,设计者必须根据实际情况综合运用上述原则和有关理论,力求最大限度地满足用户各种各样的要求。这段出简答题就答「有得有失、综合权衡」。
雅
小雅
本集必背:转换总原则是实体和联系分别转换成关系;1:1 有三种方案归结为三个关系或两个关系两种,属性少联系近就合并、属性多防冗余就分表;1:n 两种方案,联系可单独成表也可并到多端,关键字都是多端标识;m:n 必须单独成表,属性由两实体标识加联系自身属性组成,关键字由两个实体的标识属性组成;多元联系同理单独成表关键字由各实体标识拼接;弱实体不能单独转换,要靠依赖实体的标识定位;模型优化三招是减少连接、分割关系、使用快照;视图是虚关系只存定义、随数据变化,快照是实关系事先存储、只反映某时刻状态、可周期性刷新、能大大缩短响应时间;节省空间两招是编码缩写、假属性。
明
阿明
m:n 单独成表这条终于焊死了。下一集讲什么?
雅
小雅
物理设计、事务的 ACID 特性和并发控制,X 锁 S 锁、三级封锁协议、两段锁协议、死锁处理,练习题第 5、6、12、14 四道题全埋在那一片,事务管理是考试重镇。