第五章 数据库设计与ER模型
ER 模型
-
ER模型的基本元素是:实体、联系、属性
-
能唯一表示实体的属性或属性集叫做实体标识符
-
一个实体只有一个标识符,没有候选标识符的概念
-
联系本身没有标识符
-
属性可以分为
- 简单属性和复合属性
- 单值属性和多值属性
- 存储属性和派生属性
- 允许为空值的属性
-
多值属性用双线椭圆表示
-
多值属性可以拆成若干新的单值属性表示,如一个零件有多种销售价格,把销售价格这个多值属性拆成进货价格、经销价格、批发价格…
-
多值属性也可以建立一个新的实体表示,如建立一个销售价格的实体,这个实体有进货价格、经销价格、批发价格…等属性。由于这个实体是依赖于零件这个实体而存在的,叫做弱实体
-
有时候,两个或两个以上属性是相关的,此时可从其他属性值推导出值的属性,叫做派生属性
-
派生属性用虚线椭圆型和实体相连
-
派生属性不必存在数据库中
-
存在数据库中的属性叫做存储属性
-
一个联系涉及的实体集的个数,叫做该联系的元数/度数
-
同一个实体集内部实体之间的联系,叫做一元联系/递归联系
-
两个不同的实体集、实体之间的联系叫二元联系
-
两类联系约束:基数约束、参与约束
- 基数约束
实体集E1和E2之间有二元联系,则参与一个联系中的实体数目叫做映射基数
1:1、1:N、M:N、M:1四种
(0,3)、(1,6)约束 看书 p160 - 参与约束
如果实体集E中的每个实体都参与联系集R中至少一个联系中,就是实体集E完全参与联系集R,可以用双线边表示,部分参与用单线边表示。简化下都用单线,但看到双线的话要明白什么意思
- 基数约束
-
在数据库设计过程中,常常要对ER图进行种种变化,这种变化叫做ER模型的操作,包括实体类型、联系类型和属性的分裂、合并、增删等
-
分裂方式有水平分裂、垂直分裂
-
水平分裂:实体属性不变,如把教师实体分成男教师实体、女教师实体
-
垂直分裂:分裂后属性变化,如把教师实体中经常变化的属性组成一个实体类型,不变的保留在教师实体
-
实体合并时的冲突
- 属性冲突
如重量单位有些用千克,有些用克 - 结构冲突
同一对象在不同应用中不同抽象,如职工在某个应用中做实体,在另一个应用中做属性 - 命名冲突
同名异义、异名同义
- 属性冲突
-
全局ER模型的优化原则:合并实体类型、消除冗余属性、消除冗余联系
-
ER图到关系模式集的转化的算法
- 将ER图的每个实体类型转化成一个关系模式
- 对于联系类型
- 二元联系
- 1:1 可以在两个实体类型转化成的两个关系模式的任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性
- 1:N 在N端实体类型转换而成的关系模式中加入1端实体类型的键和联系类型的属性
- M:N 将联系类型也转化成关系模式,属性为两端实体类型的键加上联系类型的属性
- 三元联系
- 1:1:1 在三个实体类型转换成的三个关系模式的任意一个关系模式的属性中加入另两个关系模式的键和联系类型的属性
- 1:1:N 在N端实体类型转化成的关系模式中加入两个1端实体类型的键和联系属性
- 1:M:N 将联系类型转化成关系模式,其属性为M端和N端实体类型的键加上联系类型的属性
- M:N:P 将联系类型转化成关系模式,属性为3端实体类型的键加上联系类型的属性
- 二元联系
-
采用ER模型的逻辑设计步骤
关系数据库的逻辑设计结果是一组关系模式的定义- 到处初始关系模式集(从概念设计阶段的ER模型转化成初始的关系模式集)
- 规范化处理(用范式)
- 模式评价
- 模式修正
- 设计子模式(面向用户)
-
EER模型(增强的ER模型)
-
弱实体:一个实体的存在必须以另一个实体的存在为前提
-
强实体
-
子类实体&超类实体
-
当较低层上的实体类型表达了与之联系的较高层上的实体类型的特殊情况时,就称较高层上的实体类型为超类型,较低层上的为子类型
-
子类到超类叫概化,超类到子类叫特化
-
特化的两种约束
- 不相交约束
- 不相交约束:一个实体至多是特化中一个子类的成员
- 重叠约束:一个实体可以出现在多个特化的子类中
- 完备化约束
- 整体特化:超类中每个实体必须是特化的某个子类的一个成员
- 部分特化:超类中的实体可以不是任何一个子类
- 不相交约束
-
所有子类和超类组成了层次/格的结构