DBMS - 绘制 ER 图
使用整个数据库的图形表示来设计数据库会变得更容易。其中最好的工具之一就是实体-关系图 (ERD)。它有助于捕获业务环境中实体、它们之间的关系以及任何约束的重要细节。
在本章中,我们将学习如何使用 COMPANY 数据库的真实世界示例来设计 ERD。我们将分解每个步骤,解释实体和关系类型,并使整个过程易于理解。
Company 数据库表设计
COMPANY 数据库中有以下表 −
EMPLOYEE
| Fname | Minit | Lname | Ssn | Bdate | Address | Sex | Salary | Super_ssn | Dno |
DEPARTMENT
| Dname | Dnumber | Mgr_ssn | Mgr_start_date |
DEPT_LOCATIONS
| Dnumber | Dlocation |
PROJECT
| Pname | Pnumber | Plocation | Dnum |
WORKS_ON
| Essn | Pno | Hours |
DEPENDENT
| Essn | Dependent_name | Sex | Bdate | Relationship |
ER 图基础
为了理解示例,让我们来看看 ERD 的基础概念:它有几个组成部分。
- 实体 (Entities):表示系统中的对象或项目,例如 EMPLOYEE、DEPARTMENT 和 PROJECT。
- 属性 (Attributes):定义实体的特征。例如,一个 EMPLOYEE 可能具有 Name、Ssn、Address 和 Salary 等属性。
- 关系 (Relationships):连接实体并表示它们如何交互。例如,一个 EMPLOYEE 可能为一个 DEPARTMENT 工作。
ER 图中的视觉表示
我们在 ER 图中使用以下形状进行视觉表示 −
- 矩形 (Rectangles) 表示实体
- 菱形 (Diamonds) 表示关系
- 椭圆 (Ovals) 表示属性
- 双椭圆 (Double ovals) 表示多值属性
- 双矩形 (Double Rectangle):弱实体
- 双菱形 (Double Diamond):弱关系
真实世界示例:COMPANY 数据库 ER 图
COMPANY 数据库展示了一个复杂的业务结构。以下是如何为其创建 ERD,包含关键实体和关系:
识别核心实体
COMPANY 数据库中的主要实体如下所示 −
EMPLOYEE − 表示员工,具有 Name、Ssn、Salary 和 Bdate 等属性。
DEPARTMENT − 组织单元,具有 Name 和 Number 等属性。
PROJECT − 由部门管理的任务,具有包括 Name 和 Number 在内的属性。
DEPENDENT − 依赖于员工的个人,具有 Name、Relationship 和 Birth_date 等属性。
定义关键关系
以下是连接这些实体的主要关系:
- MANAGES − EMPLOYEE 和 DEPARTMENT 之间的关系。每个部门有一个经理,但员工可能管理或不管理部门。
- WORKS_FOR − DEPARTMENT 和 EMPLOYEE 之间的关系。每个部门有多个员工,每个员工必须分配到一个部门。
- CONTROLS − 一种关系,其中 DEPARTMENT 监督一个或多个 PROJECTS。一个项目总是由一个部门管理。
- SUPERVISION − 一种关系,其中一个 EMPLOYEE 监督其他员工。
- WORKS_ON − 一种关系,显示员工可以参与多个项目,反之亦然。此处的 Hours 属性用于表示花费的时间。
- DEPENDENTS_OF − EMPLOYEE 和 DEPENDENT 之间的关系,强调一个员工可能有一个或多个 dependents。
构建 ER 图
现在让我们了解创建 ER 图的逐步过程:
- 绘制实体 − 创建标记为 EMPLOYEE、DEPARTMENT、PROJECT 和 DEPENDENT 的矩形。将带有关键属性如 Name、Ssn 和 Salary 的椭圆连接到 EMPLOYEE。将 Number 等属性链接到 DEPARTMENT。我们在之前的图中已经见过这些实体。
- 定义关系 − 使用菱形表示 WORKS_FOR、MANAGES 等关系。使用直线将这些菱形连接到相关实体。对于部分参与使用单线,对于完全参与使用双线。
示例分解:下图展示了 COMPANY ER 图 −
- MANAGES 表示每个 DEPARTMENT 必须有一个经理(DEPARTMENT 的完全参与)。但是,一个 EMPLOYEE 可能不管理任何部门(部分参与)。
- WORKS_ON 连接 EMPLOYEE 和 PROJECT,表示带有属性 Hours 的 M 关系。它描述了员工在项目上工作的时间长度。
- DEPENDENTS_OF 展示了 EMPLOYEE 和 DEPENDENT 的 1
- 比例,表明虽然员工可能没有 dependents(部分参与),但每个 DEPENDENT 必须有一个关联的 EMPLOYEE(完全参与)。
绘制 ER 图的特殊注意事项
在绘制 ER 图时,请注意以下特殊事项:
- 弱实体和识别关系:在 ERD 中,我们可以看到 DEPENDENT 是一个弱实体。它通过与 EMPLOYEE 的连接来识别。它不能独立存在,并以双矩形显示。我们还可以注意到 DEPENDENTS_OF 关系是一个识别关系,以双菱形显示。
- 冗余和精简:在这里,当必要时应将属性合并到关系中。例如,来自 DEPARTMENT 的 Manager 和 Manager_start_date 被移动到 MANAGES 关系中以减少冗余。
- 复合和多值属性:我们还可以看到 EMPLOYEE 的属性如 Name 可能是复合的(由 Fname、Minit、Lname 组成)。DEPARTMENT 的多值属性如 Locations 使用双椭圆显示。
- 角色名称 − 当同一实体参与多次时,为关系添加角色名称,例如 SUPERVISION,其中一个 EMPLOYEE 充当主管,另一个充当被主管。
结论
在本章中,我们使用真实世界的 COMPANY database 示例,学习了如何逐步设计 ER 图。我们识别了主要实体,定义了它们之间的关系,标记了参与度和基数,并使用弱实体和复合属性等特殊元素来增加清晰度。这种结构化方法有助于设计 ER 图,以清晰地可视化数据模型,从而实现有效的数据库设计。