一个良好的设计对于数据库系统至关重要,它可以减少数据冗余,确保数据的一致性和完整性,同时使得数据库易于维护和扩展。
实体关系图(Entity-Relationship Diagram、ERD)是一种用于数据库设计的结构图,它描述了数据库中的实体以及它们之间的关系。从结构上来说,数据库的 ERD 主要包括实体、属性以及关系三个部分。
实体
实体代表了一种对象或者概念。例如,员工、部门和职位都可以被称为实体。实体包含一个或多个属性,实体在数据库中对应的就是关系表。下图是一个员工实体员工实体(employee)。
属性
属性表示实体的某种特性,例如员工拥有姓名、性别、工资等属性。属性在数据库中对应的就是表中的字段,字段拥有一个指定的名称和数据类型。下图显示了员工实体的各种属性。
其中,员工编号(emp_id)属性可用来唯一标识每一位员工,被称为主键(Primary Key)。主键可以是单个字段,也可以由多个字段组成。
关系
关系用于表示两个实体之间的联系,三种常见的关系类型包括一对一、一对多以及多对多的关系。
例如,一夫一妻制是一种典型的一对一的关系。一个员工只能属于一个部门,一个部门可以拥有多个员工,因此部门和员工之间是一对多的关系。一个学生可以选修多门课程,一门课程可以被多个学生选修,因此学生和课程之间是多对多的关系。
ERD 建模
数据库的 ERD 模型可以按照业务抽象层次分为三种类型:
- 概念 ERD。概念数据模型用于描述系统中存在的业务对象以及它们之间的联系,一般由业务分析人员使用。在概念 ERD 中使用长方形表示实体,使用椭圆形表示属性,使用菱形表示联系。
- 逻辑 ERD。逻辑数据模型用于对概念数据模型进一步的分解和细化,将其转换为关系模型(表和字段)。同时,逻辑 ERD 还会引入规范化过程,对关系模式进行优化。
- 物理 ERD。物理数据模型是针对特定数据库的设计描述。物理 ERD 需要为每个字段指定数据类型、长度、可否为空等属性,同时为表增加主键、外键以及索引等。
许多常用的数据库软件都提供了 ERD 建模功能,例如 Visual Paradigm Community Edition、MySQL Workbench、Oracle SQL Developer、SQL Server Management Studio 等免费软件,以及 Toad Data Modeler、PowerDesigner、Navicat Data Modeler 等商业软件。
我们以 MySQL Workbench 为例简单介绍如何创建一个用于 MySQL 数据库的物理 ERD。首先点击软件主界面的"File"->"New Model"菜单,然后在打开的模型界面中点击"Add Diagram"按钮,新建一个 ERD 模型。
接下来我们在 ERD 模型中通过拖曳加编辑的方式创建 department、job、employee 以及 job_history 4 个表,同时通过连线建立它们之间的关系。其中 department 和 employee 之间是一对多的关系,job 和 employee 之间也是一对多的关系,job_history 则和其他 3 个表之间存在外键关联。
最终,我们创建的 ERD 如下图所示。
最后,我们可以点击"File"->"Export"菜单,将 ERD 模型导出为 SQL 脚本或者图片,也可以点击"Database"->"Forward Engineer"菜单,连接 MySQL 数据库来创建物理表和索引。
另外,我们还可以点击"Database"->"Reverse Engineer"菜单,从已有的 MySQL 数据库中反向生成物理 ERD 模型。