Skip to content

Entity-Relationship Model

约 893 个字 预计阅读时间 4 分钟

E-R Diagrams

ERModelEx.png

https://www.drawio.com/

在 E-R 图中:

  • Rectangles:方形框表示 Entities Set,框内内容即为其 attributes。.
  • Ellipses:椭圆表示 attributes,但是一般都放进 Entities Set 内了,不单独画出
  • Diamonds:菱形框表示 Relationship Set

Attributes

一个 entity 可由 attribute 的集合表示,attribute 可允许的取值范围被称为 Domain。attribute 可划分为:

  • <1> Simple / Composite Attributes
    • 复合属性例如 name,由 first name,last name 复合得到
  • <2> Single-valued / Multi-valued Attributes
    • 多值属性例如 phone,可由多个电话号码组成
  • <3> Derived Attributes
    • 相对于 Base Attribute 派生出来的属性,例如 age 由 birthday 派生

在 E-R 图中,不同类型的属性表示方法如下:

AERD1.png

AEn2.png

Cardinality & Participation Constraints

Mapping Cardinality Constraints 限定了一个实体与关系另一端的实体可能关联的数目上限:

O2OR.png

O2MR.png

M2OR.png

M2MR.png

全参与和部分参与约束反映了一个实体参与关联的数目下限是 1 次还是 0 次,在 E-R 图中分别用 Double Line 和 Line 表示:

TPPEx1.png

Weak Entity Sets

不存在完整的 Primary Key 的实体集称为 Weak Entity Set。Weak Entity Set 需要依赖另一个实体集才能存在,与另一个实体集的一些 Attributes 组合形成它的 Primary Key。其中位于 Weak Entity Set 中的 Attributes 称为discriminator或者partial key

在 E-R 图中,我们在 discriminator 下面添加 dash line(虚线),设置 Weak Entity Set 的 Identifying Relationship 为 double diamond:

WESEx.png

对于上图关系,我们认为弱实体集的 Primary Key 为 (course_id, sec_id, semester, year)

Weak Entity Set 一定是多对一、全参与的,因此上图采用箭头与双横线

E-R Design 例题

为外卖平台绘制 E-R 图(具体要求省略):

EREx1.png

Extended E-R features

Specialization 特殊化、具体化

Specialization 是一种 Top-down 设计方法,类似于面向对象的继承特性。lower-level 的实体集会继承 high-level 实体集的所有属性,并且可以拥有自己额外的属性以及关系。

SEREx1.png

SEREx2.png

ISA 在数据库语义中表示为"is a",表示父类和子类的联系

在上 E-R 1 中,如果 ISA 旁有 disjoint ,则表示子类之间是不相交的,一个实体只能属于一个子实体集;否则,则默认为 overlapping,即子类之间是可重叠的,一个实体可以属于多个子实体集。

Generalization 泛化、普遍化

Generalization 是一种 Bottom-Up 设计方法,其特点是组合拥有相同 features 的实体集,形成 higher-level entity set。

Specialization 和 Generalization 只是普通的倒置,因此在 E-R 图上,它们的表示完全相同。

E-R to Tables

  • Composite Attributes 拆分成多个 Separate Attributes
    • 例如,address 拆为 address.city, address.state
  • Multi-Valued Attributes 用单独一个 Tables 存储
    • 例如,将实体集 user(id, phone_number) 转换成下面两个 Table
    • user(id)
    • user_phone(id, phone_number) Primary Key 为 (id, phone_number)
  • Many-to-One/One-to-Many 可以选择将“关系”对应的 Table 合并到 Many 端实体集对应的 Table 中
    • 例如,我们有三个 Table:account(account_number, balance), branch(branch_name, assets), account_branch(account_number, branch_name)。其中 account 和 branch 属于 Many-to-One Relation
    • 可以合并为:account(account_number, branch_name, balance)
    • 多对一关系中,关系对应的 Table 的 Primary Key 一般只为“多”的一方的 Primary Key,这也是它们可以合并的基础
  • 对于 One-to-One,则可以任意选取一边合并
  • Many-to-Many 不能将关系对应的 Table 合并,或者说合并了也没有意义

关系对应的 Table 除了包含两边的 Primary Key 外,还可以存储一些额外的 Decriptive Message

Comments: