VI. E-R Model

2025 年 3 月 30 日

1. The Entity-Relationship Model

Example

大学数据库的实体集、关系集与对应的 ER 图

  • 实体(entity):在现实世界中能够与其他对象区分开来的一个对象.

    • 一个实体会有一组 属性(attribute),我们可以用某些属性的值来识别唯一的实体.

    • 实体可以是具体的,也可以是抽象的.

  • 实体集(entity set):相同类型(共享相同的属性)的一组实体构成了一个实体集.

  • ER 图中实体集的表示:用矩形表示实体集.矩形被分为两部分,上半部分是实体集的名字,下半部分包含了所有属性的名称,其中作为主键的属性用下划线表示

1.1. Relationship Sets

  • 关系(relationship) 是多个(两个及以上)实体的关联.

  • 关系集(relationship set):一组相同类型的关系.

    • 大多数关系集都是二元的,但有时也存在三元甚至包含更多实体集的关系.我们称参与到某个关系集的实体集个数为该关系集的 度(degree)

    • 联系集的形式化定义:设 nn 个(允许重复的)实体集分别为 E1,E2,,EnE_{1},E_{2},\cdots,E_{n},在他们之上定义的联系集是一个关系,且是 {(e1,e2,,en)  e1E1,e2E2,,enEn}\left\{ \left( e_{1},e_{2},\cdots,e_{n} \right)~|~e_{1} \in E_{1},e_{2} \in E_{2},\cdots,e_{n} \in E_{n} \right\} 的子集,其中一个 (e1,e2,,en)\left( e_{1},e_{2},\cdots,e_{n} \right) 称为联系的一个实例.

    • 一组特性的实体集之间可能会包含多个关系集:

  • ER 图中关系集的表示:用 菱形(diamond) 表示关系集,并从这个菱形出发,通过 直线(line) 连接到参与该关系集的实体集.
  • 联系集的 属性(attribute):联系集也可能有一组属性,用来描述联系的特征(如 P17 所示的 instructor 与 student 建立联系的时间).在绘制 ER 图时使用一个单独的矩形表示,并用虚线连接到对应的联系集的菱形上.
  • 联系集中的 角色(role):当联系集包含多个相同的实体集时,他们的扮演的"角色"往往是不同的,在绘制 ER 图时可以将角色在直线上显式标注出来.

1.2. Complex Attributes

  • 每个属性都有一组被允许的值,称为该属性的 域(domain)值集(value set).ER 图中的属性可以有以下几种不同的类型:

    • 简单属性与复合属性

      • 简单(simple) 属性:无法被进一步划分的属性.

      • 复合(composite) 属性:可以被进一步划分为多个子属性的属性.

    • 单值属性与多值属性

      • 单值(single-valued) 属性:只能取一个值的属性.

      • 多值(multi-valued) 属性:可以包含 0 个或多个值的属性.

    • 派生(derived) 属性:该属性会从别的属性或实体中派生得到值.

  • 可以用 层级(hierarchy) 结构来表示复合属性.

  • 复合属性在 ER 图中的表示

1.3. Mapping Cardinalities

  • 映射基数(mapping cardinality):指一个实体通过联系集能够关联到的实体个数.在描述二元关系集时最有用.

  • 对于二元关系集,映射基数必然是以下四种类型之一(简记:"一"有箭头,0或1;"多"无箭头,无限制):

一对一(one-to-one)

一对多(one-to-many)

多对一(many-to-one)

多对多(many-to-many)

A 中的一个实体最多关联 B 中的一个实体,且 B 中的一个实体最多关联 A 中的一个实体

A 中的一个实体可以关联 B 中的任意数量的实体,但 B 中的一个实体最多关联 A 中的一个实体

A 中的一个实体最多关联 B 中的一个实体,但 B 中的一个实体可以关联 A 中的任意数量的实体

A 中的一个实体可以关联 B 中的任意数量的实体,且 B 中的一个实体可以关联 A 中的任意数量的实体

  • 完全参与(total participation):实体集中的所有实体都至少参与到联系集 RR 中的一个联系.

  • 部分参与(partial participation):实体集中的部分实体没有参与到联系集 RR 的任何联系中.

  • ER 图中更复杂的基数约束表达方式:使用 l...h 的方式表示基数(实体集中的元素参与联系数量)的上下界(* 表示没有限制),具体参见上页中的例子.

1.4. Primary Key

  • 主键(primary) 提供了一种允许实体与关系相互区分的方法.

1.4.1. Primary Key for Entity Sets

  • 实体集的主键:其实就与关系模式中对主键(包括超键和候选键)的定义完全一致.

1.4.2. Primary Key for Relationship Sets

  • 联系集的主键:既包含自身的属性,也包含参与的实体集的主键,具体来说:

    • PK(Ei)\text{PK}\left( E_{i} \right) 表示参与联系集 RR 的实体集 EiE_{i} 的主键.

    • AA 表示联系集 RR 自身关联的属性,如果没有则为空.

    • 则联系集 RR 的主键为 PK(E1) PK(E2) PK(En)A\text{PK}\left( E_{1} \right) \cup \text{ PK}\left( E_{2} \right) \cup \ldots \cup \text{ PK}\left( E_{n} \right) \cup A

    • 必要时还需要进行重命名操作(如多个实体集中相同的属性名).

  • 二元关系的主键:由于附加了基数限制,通过上面方法选出来的不一定是最小超键,需要进一步讨论.

    • "多对多"关系:相当于没有基数限制,前面得到的就是最小超键,并被选为主键.

    • "多对一"关系 或 "一对多" 关系:"多"的那一方(可以仔细想想为什么,参考上页中选导师的例子)的主键是最小超键,并被选为主键.

    • "一对一"关系:任意一方的主键都是最小超键,选择其中之一作为主键.

1.4.3. Weak Entity Sets

  • 弱实体集(weak entity set):没有主键的实体集,必须依赖另一个实体集(称为 标识性实体集(identifying entity set),也一定是一个 强实体集(strong entity set))的存在而存在,且这种联系必然是一个从标识性实体集到弱实体集的"一对多"、全参与联系.

  • 弱实体集的 分辨符(discriminator)(或称 部分键(partial key)):强实体集的主键 + 弱实体集的分辨符 = 弱实体集的主键.

  • 弱实体集在 ER 图中的表示

    • 用虚线标注弱实体集的分辨符.

    • 用双菱形表示连接弱实体集与对应强实体集的联系集.

    • 用双直线连接弱实体集与标识性联系集(这表示全参与联系).

    • 注意:强实体集的主键不需要写在弱实体集中,因为其通过标识性联系隐式包含,如果写出来反而会导致冗余.

1.5. Redundant Attributes

  • 属性冗余(redundant attribute):假设有实体集 E1E_{1}E2E_{2},这两个实体集之间通过属性 aa 建立了联系,并且这两个实体集中都有属性 aa.设 aaE1E_{1} 中作为主键,则应该从 E2E_{2} 中移除属性 aa,这种问题就是属性冗余.

    • 虽然在 ER 图中我们需要删除这一关系,但在后面转化为关系模式时将有可能把 aa 重新加回来.

2. Reducing E-R Diagrams to Relation Schemas

  • ER 图可以被转化到数据库的关系模式.其中每个实体集和关集都唯一对应一个同名的 模式(schema),接下来将讨论具体的转化方法.

2.1. Representing Entity Sets

  • 将强实体集转化为关系模式

    • 对于仅包含简单属性的强实体集,则模式的主键就是强实体集的主键,强实体集中的每个实体就是关系中的一个元组.

    • 对于复合属性:需要为每个组件属性(层级表示中的叶子结点)创建一个单独的属性,但不需要为复合属性本身创建属性(层级表示中的非叶节点).

    • 对于多值属性:实体 EE 的多值属性 MM 需要用单独的模式 EMEM 表示,EMEM 的属性包含 EE 的主键和用来表示 MM 的属性.EE 中的对应属性有几个值,在 EMEM 中就有几个对应的元组.

    • 对于派生属性:不需要在关系模式中显式表示,可以通过其他数据模型的过程/函数/方法来实现.

      • 特殊情况:如果实体集只有若干主键和一个多值属性,则可以不用创建新的关系模式,而是将多值属性添加到主键中.

      • 注意:这种特殊情况所导致的联系问题.(TBD:没理解)

  • 将弱实体集转化为关系模式:设参考键为 {b1,b2,,bm}\left\{ b_{1},b_{2},\cdots,b_{m} \right\} 的弱实体集依赖于主键为 {a1,a2,,an}\left\{ a_{1},a_{2},\cdots,a_{n} \right\} 的强实体集,则

    • 弱实体集对应模式的主键为 {a1,a2,,an}{b1,b2,,bm}\left\{ a_{1},a_{2},\cdots,a_{n} \right\} \cup \left\{ b_{1},b_{2},\cdots,b_{m} \right\}

    • 需要为来自强实体集的主键添加外键约束,从而确保数据完整性.

Example

关于上文所述的特殊情况的一个例子(P52)

  • time_slot\mathit{\text{time\_slot}} 表具有属性 (time_slot_id,{(day,start_time,end_time)})\left( \underline{\mathit{\text{time\_slot\_id}}},\left\{ \left( \mathit{\text{day}},\mathit{\text{start\_time}},\mathit{\text{end\_time}} \right) \right\} \right)

  • section\mathit{\text{section}} 表具有属性 (course_id,sec_id,semester,year))\left( \underline{\mathit{\text{course\_id}}},\underline{\mathit{\text{sec\_id}}},\underline{\mathit{\text{semester}}},\underline{\mathit{\text{year}}} \right))

TBD

2.2. Representing Relationship Sets

  • 将关系集转化为关系模式

    • 为关系集创建一个对应的关系模式,获得其主键的方法如上所述(注意一些在二元关系集上的一些特殊情况).

    • 对于每个参与关系集的实体集中的主键,都需要添加相应的外键约束,从而确保数据完整性.

    • 注意:下面提到的模式冗余问题.

2.3. Redundancy of Schemas

  • 模式冗余(redundancy of schemas)

    • 在"多"端为全参与的"多对一"或"一对多"关系中,可以不用为关系集创建对应的关系模式,而是直接将需要添加的键添加到"多"的一方的实体集的关系模式中.(如果不是全参与的,也可以这么做,但是会带来空值.)这其实就类似于上文对多值关系的处理.

    • 对于"一对一"关系,任何一侧都可以被选为刚才所说的"多"的一侧.

    • 将弱实体集与对应强实体集所关联的联系集一定是冗余的,不需要创建.

3. Design Issues

4. Extended ER Features

  • 特化(specialization):特点是自顶向下、属性继承——该实体集可能包含多个特有的子实体集,且这些子实体集会继承父实体集的属性.

    • 这种关系也成为 ISA("is a") 或者 超类-子类(superclass-subclass) 关系.

    • 有两种类型:

      • 重叠特化(overlapping specialization):实体可以属于多个被特化的实体集.在 ER 图中用分开的箭头表示.

      • 互斥特化(disjoint specialization):实体属于至多一个被特化的实体集.在 ER 图中用合并的箭头表示.

  • 泛化(generalization):特点是自底向上、属性共享——多个实体集可能包含相同的属性,可以为他们创建一个父实体集.

  • 特化与泛化的关系:特化与泛化是彼此的逆过程,并且他们在 ER 图中的表示相同

    • "特化"和"泛化"作为术语在 ER 图中可以互换使用.
  • 特化/泛化的约束

    • 互斥性约束(disjointness constraint):就是前面所提到的 overlapping / disjoint 的问题.

    • 完整性约束(completeness constraint):在特化/泛化中,高层级的实体集中的实体是否必须至少属于一个低层级实体集中的实体,包括:

      • 完全(total) 特化/泛化:一个高层级的实体必须属于一个低层级的实体集.

      • 部分(partial) 特化/泛化:一些高层级的实体可能不属于任何的低层级实体集.(这是默认行为.)

  • 将特化/泛化转化为关系模式

    • 方法一:为最高层级实体集创建一个模式,为每个低层级实体集创建一个模式,包括高等级实体集的主键作为外键和其自身的属性.

      • 缺点:获取低层级实体集中的实体时需要多次查询.
    • 方法二:为每个实体集创建一个模式,包含他自身拥有的属性和所继承的所有属性.

      • 缺点:继承的属性会被多次存储带来额外空间开销.
    • 方法三:只创建一个模式,并包含所有可能的属性.通过这些属性来区分实体(部分属性可能存在空值).

评论

TABLE OF CONTENTS

1. The Entity-Relationship Model
1.1. Relationship Sets
1.2. Complex Attributes
1.3. Mapping Cardinalities
1.4. Primary Key
1.5. Redundant Attributes
2. Reducing E-R Diagrams to Relation Schemas
2.1. Representing Entity Sets
2.2. Representing Relationship Sets
2.3. Redundancy of Schemas
3. Design Issues
4. Extended ER Features

© 2018-2025 memset0.

All rights reserved.

Source Code

Built with Gatsby.js


Made with ❤️ in China