数据库设计:实体关系图

一个良好的设计对于数据库系统至关重要,它可以减少数据冗余,确保数据的一致性和完整性,同时使得数据库易于维护和扩展。

实体关系图(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 模型。

相关推荐
伤不起bb5 分钟前
MySQL 高可用
linux·运维·数据库·mysql·安全·高可用
Yushan Bai5 小时前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle
躺着听Jay5 小时前
Oracle-相关笔记
数据库·笔记·oracle
瀚高PG实验室5 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
运维成长记6 小时前
mysql数据库-中间件MyCat
数据库·mysql·中间件
尘客.6 小时前
DataX从Mysql导数据到Hive分区表案例
数据库·hive·mysql
TiDB 社区干货传送门7 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz7 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
uwvwko8 小时前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
扶尔魔ocy8 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite