数据库设计:实体关系图

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

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

相关推荐
数据安全技术观察4 分钟前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠41 分钟前
Redis的自我学习
数据库·redis·学习
2601_965798471 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
@Mike@2 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
程序员夏洛3 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
Wang's Blog3 小时前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
l1258654 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol4 小时前
Mysql内容及相关实验
数据库·mysql
OceanWaves19934 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql
凤山老林4 小时前
数据库读写分离与动态路由实战:Spring Boot + ShardingSphere-JDBC 生产配置
数据库·spring boot·后端·分库分表·sharding-jdbc