数据库系统中文版

Chapter 2 The ER-Data Model and Mapping to Relational Schema

| 关于   «  2.1. ERD 模型定义与用途   ::   目录   ::   2.3. ERD 映射到关系数据模型  »

2.2. ERD 基本组件

实体关系图有 三个基本组成部分 。相似的组成部分将用相同的形状表示。例如,所有实体类型可能都用矩形包围,而所有属性都用椭圆包围。

1- 实体 ,即可以存储关于它们的数据的对象或概念。实体指的是数据库中使用的表。

2- 属性 ,即实体的属性或特征。某些 ERD 属性可表示为主键,用于标识唯一属性,或表示为外键,可分配给多个属性。

3- 实体之间及实体内部的 关系。

例如: 假设在一个院系数据库中,我们有两个现实世界的概念:学生和课程。需要表示给定课程的学生学习过程。Erd 将这些概念以实体的形式表示,并将学习过程表示为它们之间的关系,如下图中所示。

_images/ERDSimpleEx.png

所有 ERD 组件及其类型均显示在下方的图中:

_images/ErdComponents.png

实体 ________

实体 是微型世界中代表数据库中的特定对象或事物。例如,学生"Adam"(Adam 是 实体实例 ,STUDENT 是 实体类型 ),以及"数据库"COURSE。

存在两种类型的实体: (强与弱)

2.2.1. 强实体

强实体 不依赖于模式中的任何其他实体。强实体总是具有主键。强实体用单个矩形表示。两个强实体之间的关系用单个菱形表示。

强实体的示例: EMPLOYEE、COURSE 和 BOOK 每个都可以作为强实体,因为每个实体都有自身的主键(ssn (PK) 用于 EMPLOYEE,Code (PK) 用于 COURSE 以及 ISBN 用于 BOOK)。

2.2.2. 弱实体

弱实体 依赖于强实体以确保其存在。与强实体不同,弱实体没有任何主键。它相反拥有一个部分判别键。弱实体由双矩形表示。一个强实体与一个弱实体之间的关系由双菱形表示。这种关系也被称为 识别关系 。

弱实体的示例: CHILD 实体依赖于 EMPLOYEE 强实体。

LOAN 实体依赖于 CUSTOMER 强实体。

ROOM 实体依赖于 HOTEL 强实体。

弱实体通过以下组合进行标识: 弱实体类型的部分键与相关的强实体类型的主键。

_images/ERDSimpleExWeak.png

下方的可视化演示了弱实体概念。

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

_images/TipsLogo.jpg

非常重要的设计说明:

1- 如果存在某些特征(即属性)来描述该概念,即使这些特征很弱且该概念自身没有唯一的标识符,该概念仍被视为实体而非属性。

例如, 假设在公司数据库中,需要记录每位员工的子女信息以确保数据完整性。如果只需保存他们的姓名或编号,则子女可被视为 EMPLOYEE 实体的一种 属性 。但如果对于每位员工的每个子女,我们都想记录其姓名、年龄和性别,那么它就不再是简单的甚至多值属性,而应被视为一个 CHILD 实体,该实体具有属性并与 EMPLOYEE 实体相关联。

2- 将实体判定为弱实体还是强实体的决定,取决于其实例是否具有唯一标识符,或者是否应依赖于另一个强实体进行唯一标识。

例如, 在之前的 CHILD 实体中,我们可以找到两个具有完全相同特征(Ali,8 岁,男孩)的子实例 & 另一个(Ali,8 岁,男孩),这些 CHILD 实例之间的唯一区别在于它们与谁(即与哪位员工)相关联。在这种情况下,CHILD 实体应被视为弱实体。

3- 只有拥有多个实例的概念才能表示为实体。

注意: 为特定酒店设计数据库与为酒店连锁(集团)设计数据库之间存在巨大差异,我们需要描述该酒店内部的实体与流程。

在第一种情况(单一酒店数据库)中: 不应创建 HOTEL 实体,因为该数据库只为该酒店创建一个实例,且它无法与其他实体(如 ROOM、RESTAURANT、POOL、CLIENT)建立关联。

在第二种情况(酒店的连锁数据库)中: 需要创建 HOTEL 实体以根据位置、房间数量等区分酒店分店,每个分店拥有不同的员工等等……

实体 Hotel 的实例数量等于其分支数量,并与所有其他实体(如 ROOM、EMPLOYEE 和 CLIENT)相关联。

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

属性 __________

属性 是用于描述实体的特性。例如,一个 STUDENT 实体可能具有姓名、ID、地址、性别、出生日期等属性。特定实体将为其每个属性具有一个值。

例如 一个具体的学生实体可能具有 Name='Adam Ahmed',ID='123456789',Address ='731, Mohandesin, Cairo, Egypt',Sex='M',BirthDate='09-SEP-1995'

每个属性都有一个关联的值集(或数据类型)——例如:整数、字符串、子范围、枚举类型、……

2.2.3. 属性类型

存在五种主要属性类型:(Simple, Composite, Multivalued, Derived, Key attribute)

简单属性

每个实体对该属性具有单个原子值。例如,ID 或 Sex。

复合属性

属性可能由多个组成部分构成。例如,地址(公寓号、房屋号、街道、城市、州、邮政编码、国家)或姓名(名、中间名、姓)。组合可能形成层次结构,其中某些组成部分本身也是组合的(即嵌套组合属性)。

多值属性

一个实体对于该属性可能具有多个值。例如,CAR 的 Color 或 STUDENT 的 PreviousDegrees。表示为 {Color} 或 {PreviousDegrees}。

注意:

  • 具有相同基本属性的实体(即实体实例)被分组或归类为实体类型。 例如 ,STUDENT 实体类型或 PROJECT 实体类型。

  • 实体类型中每个实体都必须具有唯一值的属性称为该实体类型的键属性。 例如 ,STUDENT 的 ID

  • 一个键属性可能是复合的。 例如 ,VehicleTagNumber 是 CAR 实体类型的键,其组分为 (Number, State)。

  • 实体类型可能具有多个键。 例如 ,CAR 实体类型可能有两个键:VehicleIdentificationNumber(通俗称为 VIN)和 VehicleTagNumber(Number, State),也称为 license_plate 号。

(键属性的所有类型已在前一章中详细说明)

关系类型 __________________

  • 关系 将两个或多个具有特定含义的不同实体关联起来。 例如 ,STUDENT "Adam Ahmed" 注册了 "Database" COURSE 或 EMPLOYEE "Sally" 管理 "IT" DEPARTMENT。

  • 相同类型的关系被分组或归类为关系类型。 例如 ,STUDENTSs 和 COURSEs 参与的 Register 关系类型,或 EMPLOYEEs 和 DEPARTMENTs 参与的 MANAGES 关系类型。

  • 关系类型的度 是指参与实体类型的数量。MANAGES 和 WORKS_At 都是二元关系。(见下图)

Note1: 可能存在多个具有相同参与实体类型的关系类型。例如,MANAGES 和 WORKS_At 是 EMPLOYEE 与 DEPARTMENT 之间的不同关系,但具有不同的含义和不同的关系实例。

_images/TworelationsWithSameEntities.png

Note2: 任何关系类型都可以拥有一个关系属性,该属性描述的是关系本身,而非通过该关系相互关联的实体类型。 例如, STUDENT 与 COURSE 实体类型之间的 Register 关系类型,可以拥有一个 Date 属性,用于描述特定学生实例何时注册到特定课程。

所有这些组件都将在后续章节中使用交互式可视化进行说明。

下方的可视化展示了一个关于实体和属性的非常简单示例。

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

   «  2.1. ERD 模型定义与用途   ::   目录   ::   2.3. ERD 映射到关系数据模型  »

关闭窗口