开始之前,如果对ER实体关系的基本概念还不太清楚的,可先参照这篇文章:
https://www.iteye.com/blog/josh-persistence-2518063
数据库是软件系统中不可或缺的一个组成部分,若能在数据库工程中好好利用 ER 图,便能让您生成高质量的数据库设计,用于数据库创建,管理和维护,也为人员间的交流提供了有意义的基础。
今天,我们将为你深入介绍 ER 图表。通过阅读本ERD指南,您将获得有关 ER 图和数据库设计的基本知识和技能。你会学到什么是 ERD,为什么要绘制 ERD,ERD 符号,如何绘制 ERD 等,以及一堆 ERD 示例。
什么是实体关系图(ERD)?
首先,什么是实体关系图?
实体关系图也被称为 ERD、ER 图、实体联系模型、实体联系模式图或 ER 模型,是一种用于数据库设计的结构图。一幅 ERD 包含不同的符号和连接符,用于显示两个重要的資訊: 系统范围内的主要实体,以及这些实体之间的相互关系。
这也就是为什么它被称为“实体”“关系”图 (ERD)!
当我们谈论 ERD 中的实体时,我们经常提到诸如人员/角色(例如学生),有形商业对象(例如产品),无形商业对象(例如日志)等业务对象。“关系”則是这些实体在系统内的相互关联。
在典型的 ER 设计中,可以找到诸如圆角矩形和 (Rounded rectangle) 连接符(具有不同样式的末端)的符号来描述实体,它们的属性和相互关系。
何时绘制ER图?
那么,我们该在什么时候绘制ER图呢?虽然ER模型大多是为展示概念和设计物理数据库而绘制的,但也有别的用途的,以下是一些典型的用例。
- 数据库设计 - 直接在数据库更改数据库结构会有风险, 为避免破坏数据库中的数据,我们得仔细规划一切变更。通过绘制 ER 图来展示数据库设计意念,您能轻松找出错误和识别设计缺陷,并在执行数据库更改之前作出修正。
- 数据库调试 - 调试数据库问题往往具有挑战性,特别是当数据库包含许多表时,你我编写复杂的SQL来获取所需的信息。通过 ERD 来展示数据库结构,您可以全面地了解整个数据库的结构。您可以轻松找到实体,查看其属性并确定与别的实体的关系,有助您更轻松地找出数据库的问题。
- 数据库创建和修补 - 像 Visual Paradigm 这样的 ERD 软件支持数据库生成工具,可以通过ER图来自动生成和修补数据库。使用这个 ER 图工具,您的ER设计不再仅仅是一个静态图,而是一个真实反映物理数据库结构的镜像。
- 帮助收集需求 - 您可以通过绘制 ERD 来表达系统中的高级业务对象以用于确定系统的需求。这种初始模型也可以演化为物理数据库模型,用于创建关系数据库,或为创建流程图和数据流模型提供有力的参考。
ERD 符号指南
ER 图包含实体,属性和关系。在本节中,我们将详细介绍各 ERD 符号。
实体
ERD 实体是一个系统内可定义的事物或概念,如人/角色(例如学生),对象(例如发票),概念(例如简介)或事件(例如交易)(注:在 ERD 中,术语“实体”通常用来代替“表”,但它们是一样的)。在考虑实体时,尝试把它们想成名词。在 ER 模型中,实体显示为圆角矩形,其名称位于上方,其属性列在实体形状的主体中。下面的 ERD 示例显示了 ER 实体的一个用例。
实体属性
也称为列 (Row),意思是持有它的实体的属性或特性。
一个属性有一个描述属性的名称和一个描述属性种类的类型,例如代表字符串的 varchar,整数的 int。当为物理数据库开发绘制 ERD 时,得使用目标 RDBMS 支持的类型,以确保设计和物理数据库的一致性。
下面的 ER图示例显示了包含属性的实体。
主键 (Primary Key)
主键又称 PK,是一种特殊的实体属性,用于界定数据库表中的记录的独特性。一个表不能有两笔(或更多)拥有相同的主键属性值的记录,像是身份证明内的 ID 便是典型的例子,两个人即使性名相同,ID 是不会一样,若身份证明是个表,那ID 便是主键了。下面的 ERD 示例显示了拥有主键属性 “ID” 的实体 “Product”,以及数据库中表记录的预览。第三个记录是无效的,因为 ID 'PDT-0002' 的值已被另一个记录使用。
外键 (Foreign Key)
外键又称外来键和外部键,是对主键的引用,用于识别实体之间的关系。请注意,有别于主键,外键不必是唯一的,多个记录可以共享相同的值。下面的 ER Diagram 示例显示了一个包含一些列的实体,其中一个外键用于引用另一个实体。
关系
两个实体之间的关系表示这两个实体以某种方式相互关联。例如,学生可能参加课程。实体“学生”因此与“课程”相关,而这关系则在 ER 图中以连接线表达着。
基数 (Cardinality)
基数定义了一个实与另一个实体的关系里面,某方可能出现次数。例如,一个团队有许多球员,若把这关系呈现于 ERD 时,团队和球员之间是一对多的关系。
在 ER 图中,基数表示为连接线端的乌鸦脚。三种常见的主要关系是一对一,一对多和多对多。
一对一的基数的例子
一对一关系主要用于将实体分成两部分,简洁地将资讯呈现,使读者更容易理解。下图显示了一对一关系的示例。
一对多的基数的例子
一对多关系是指两个实体 X 和 Y 之间的关系,其中 X 的一个实例可以链接到Y的许多实例,而 Y 的一个实例仅链接到 X 的一个实例。下图显示了一对多关系的一个例子。
多对多的基数的例子
多对多关系是指两个实体 X 和 Y 之间的关系,其中 X 可以被链接到 Y 的许多实例,反之亦然。下图显示了一个多对多关系的例子。请注意,多对多关系在物理 ERD 中被分成一对一对多的关系,你会在下一节中學到什麼是物理 ERD。
概念,逻辑和物理数据模型
ER 模型通常被绘制成最多三个抽象层次上:
虽然 ER 模型的三个层次都包含有属性和关系的实体,但它们的创建目的和目标受众都不同。
一般而言,业务分析人员使用概念和逻辑模型来展示系统中存在的业务对象 (Business Object),而数据库设计人员或数据库工程师會為概念和逻辑ER模型加入更详细的資訊,進而生成反映物理模型结构的物理数据模型,好為创建数据库作準備。下表列出了三种数据模型之间的差异。
概念模型 vs 逻辑模型 vs 数据模型:
实体(名称) | 是 | 是 | 是 |
关系 | 是 | 是 | 是 |
列 | 是 | 是 | |
列的类型 | 随意 | 是 | |
主键 | 是 | ||
外键 | 是 |
概念数据模型
概念性 ERD 表达了系统中该存在的业务对象以及它们之间的关系。建立概念模型,是为了通过识别所涉及的业务对象来呈现系统的宏观图像。概念数据模型定义了哪些实体存在,而非哪些表。例如,逻辑或物理数据模型中可能存在“多对多”表,但在概念数据模型下,它们只会表示为无基数的关系。
概念数据模型示例
注意:概念性 ERD 支持使用泛化 (Generalization) 来表达两个实体之间的“一种”关系,例如三角形是一种形状,这个用法就像UML中的泛化一样。请注意只有概念 ERD 支持泛化。
逻辑数据模型
逻辑 ERD 是概念 ERD 的详细版本,通过明确定义每个实体中的列并引入操作和事务实体 (Transactional Entities)来让概念模型丰富起来。虽然逻辑数据模型仍流于高层次的设计(非为特定数据库系统而绘画),但如果会影响数据库的设计,在绘制逻辑数据模型时仍然可酌情调整。
逻辑数据模型示例
物理数据模型
物理 ERD 是数据库的实际设计蓝图。物理数据模型通过为每列指定类型 (Type),长度 (Length),可为空 (Nullable) 等来详细阐述逻辑数据模型。由于物理 ERD 表達了如何在特定的 DBMS中构造和关联数据,因此在設計時要考虑到实际的数据库系统的需要和局限,倒如确保 DBMS 支持某列类型,并在命名实体和列中避用某些保留字 (Reserved Words)。
物理数据模型示例
如何绘制 ER 图?
如果您发现绘制 ER 图很难,请不要担心,在本节中我们将给你一些 ERD 提示。尝试按照以下步骤以了解如何有效地绘制 ER 图吧。
- 确保你清楚知道绘制 ERD 的目的。您是否试图呈现涉及业务对象定义的整体系统架构?或者你正在开发一个准备用于数据库创建的 ER 模型?您必须明了开发 ER 图的目的,方可使用合适的模型层次(概念/逻辑和物理)来迎合您所需 (请阅读概念,逻辑和物理数据模型部分了解更详细信息)
- 确保你清楚模型的范围。了解建模范围可以防止在设计中包含冗余实体和关系。
- 画出范围内的主要实体。
- 通过添加列来定义实体的属性。
- 仔细检查 ERD 并检查实体和列是否足以存储系统的数据。如果不是,请考虑添加其他实体和列。通常,您可以在此步骤中确定一些事务 (Transactional),操作 (Operational) 和事件 (Event) 实体。
- 考虑所有实体之间的关系,将它们联系起来,並寫上正確的基数(例如客户和订单之间的一对多关系)。如果有任何实体沒有被連接上,请不要担心,虽然這不常见,但它是合法的。
- 使用数据库规范化技术 (Database Normalization)重构实体,以减少冗余数据和提高数据完整性。例如,“制造商”的資訊可能最初存储在“产品”实体下,透過规范化过程,您可能会发“制造商”的记录不断重复,您便可将其拆分为单独的“制造商”实体,并使用外键將“产品”和“制造商”連接起來。
数据模型的例子
ERD 示例 - 电影租赁系统
ERD 示例 - 贷款系统
ERD 示例 - 在线商店
使用ERD和数据流图(DFD)
在系统分析和设计中,可以绘制数据流图(DFD) 来展现系统流程中的信息流。在数据流图中,有一个名为数据储存 (Data Store)的符号,它代表一个提供系统所需信息的数据库表。
由于物理 ER 图提供了实际数据库的蓝图,因此这种 ERD 中的实体与 DFD 中的数据存储一致。您可以 ERD 作为 DFD 的补充,以表达信息的结构;或以 DFD 补充 ERD,以显示系统在运行时如何运用数据。
使用ERD和BPMN业务流程图(BPD)
在业务流程映射中 (Business Process Mapping),可以绘制 BPMN 业务流程图 (BPD) 以展示业务工作流程。在业务流程图中,有一个称为数据对象(Data Object)的符号,表示在流程输入/输出的数据。
由于概念和逻辑数据模型提供了系统内业务对象的高级视图,因此此类 ERD 中的实体与 BPD 中的数据对象一致。您可绘制 ERD 作为 BPD 的补充,以表示业务工作流程所需的数据对象的结构;或以 BPD 補充 ERD,以显示在整个业务流程中如何運用数据。
选择一个ERD工具
制作 ERD 数据模型需要时间和精力,而一个有用的数据库设计工具则能大大减省你花费的时间和精力。 Visual Paradigm 不仅为您提供 ERD 工具,还提供了一组可视化建模功能,助您更快、更轻松地绘制实体关系图。它支持当今市场上最流行的数据库管理系统,是数据库设计、数据库生成和实体关系图逆转的好帮手。
相关推荐
本文详尽介绍了使用Oracle SQL Developer Data Modeler进行实体关系图ERD绘制的方法及其功能特性。主要包括Data Modeler的基本介绍、ERD的设计步骤、规范化数据库设计的方法、ERD的编辑优化技巧及导出和分享数据模型...
mxGraph是一个JS绘图组件适用于需要在网页中设计/编辑...官方在线例子中有ERD关系图,但是github例子没有,最近正好要做ERD关系图,就在官线上一点一点扣下来,包括各种ERD关系如一对多,多对多,图标比较准备专业。
实体关系图(Entity Relationship Diagram,ERD)是一种描述数据模型的图形表示方法,能够帮助开发者预先精确定义数据需求。ERD 是一种用于数据库设计的重要工具,可以用于描述数据模型,定义数据结构,建立数据库...
在IT行业中,实体关系图(Entity Relationship Diagram,简称ERD)是数据库设计的重要工具,它可视化地表示了数据模型中的实体、属性以及实体之间的关系。本文将深入探讨如何使用Go语言和GraphViz来创建Golang项目的...
在IT领域,实体关系图(Entity Relationship Diagram,简称ERD)和数据流程图(Data Flow Diagram,简称DFD)是两种非常重要的概念模型工具,它们分别用于描述数据的静态结构和动态行为,对于理解系统中的数据关系和...
本文将深入探讨Visio在软件开发中的应用,特别是通过一个具体的案例——“智慧家校选课走班系统”的实体关系图(ERD)来展示其在电力电网产品开发和机房机柜设计中的重要作用。 首先,让我们了解什么是实体关系图...
对于RDBMS,描述数据模型的图通常称为实体关系图(Entity Relationship Diagram,ERD)。用ERD描述数据模型能够帮助你预先精确定义数据需求。 介绍ERD建模工具 PowerDesigner和Visio 2000 Professional 在不同的...
ERD(实体关系图)是数据库设计中的一个重要工具,用于可视化数据模型,表达实体、关系和属性之间的关系。在这个经典的ERD设计资料中,你将深入理解数据库设计的基础和实践。 首先,ERD是概念数据模型的一种表现...
本文旨在深入探讨PowerDesigner的使用技巧,特别是在创建实体关系图(ERD)进行数据库建模方面的实践策略。 ### PowerDesigner使用技巧概览 #### 1. **命名约定与大小写敏感性管理** PowerDesigner允许用户自定义...
在Ruby on Rails开发中,实体关系图(Entity Relationship Diagram,简称ERD)是一种非常有用的工具,它可以帮助开发者直观地理解数据库中的模型关系。"Rails Erd"是一个Ruby gem,专门用于为Rails应用程序自动生成...
StarUML是一款强大的建模工具,主要用于创建各种类型的软件模型,包括ERD(实体关系图)。在软件开发过程中,ERD是一种重要的设计工具,它帮助开发者直观地理解数据库的结构和实体之间的关系。标题提到的"starUml-...
Bika LIMS 开源 LIMS 集——ERD 实体关系定义(数据库设计) Bika LIMS 开源 LIMS 集是基于开源技术的实验室信息管理系统,ERD(Entity-Relationship Diagram)实体关系定义是该系统的数据库设计的核心部分。ERD 是...
ER图(Entity Relationship Diagram,实体关系图)是数据库设计中的一个重要工具,用于描述实体之间的关系。在手机销售系统中,ER图可以帮助我们清晰地理解各个业务实体及其相互间的联系,从而构建出高效、准确的...
该实用程序对实体,实体的属性以及实体之间的关系进行纯文本描述,并生成对描述进行建模的可视化图表。 可视化是通过将点与GraphViz结合使用而产生的。 用于指定颜色和字体信息的选项非常有限。 同样, erd可以输出...
在类图到ERD(实体关系图)的转换过程中,我们需要考虑实体、属性、关系以及主键和外键的设置。 题目1描述了一个包含聚合关系的类图,涉及到四个实体:Order、OrderItem、Product和Customer。根据参考答案,我们...
【实体关系图(ERD)】是数据库设计中至关重要的工具,它用于描绘系统中实体之间的关系和相互作用。ERD由不同的图形符号组成,包括实体、属性和连接线,帮助设计者清晰地理解数据库的架构,从而进行高效的数据管理。...
5. **ER图构建步骤**:确定实体、定义实体间的关系类型、定义实体属性和主键。 6. **关联限制条件**:介绍了一对一、一对多、多对一和多对多关系的约束条件。 #### 深入知识点详解: ### 1. ER图简介 ER图是一种...
根据提供的文件信息,我们可以推断出此文档是关于SmartPlant Instrumentation (SPI)的一个版本,具体涉及的是实体关系图(Entity Relationship Diagrams, ERD)的相关内容。由于文档中的部分内容较为晦涩,主要包含...
Rails ERD-为Rails应用程序生成实体关系图 是一颗宝石,它使您可以轻松地基于应用程序的Active Record模型生成图表。 该图概述了模型之间的关系。 拥有描述模型的图表对于您的应用程序而言是完美的文档。 Rails ...
• 原则2:ERD中的从实体及相应的主从联系变换为一个关系,从实体的属性加上主实体关系的主码(作为外码)构成其属性。 • 原则3:1:M联系通过在“多”实体关系中增加相联系的“1”实体关系的主码(为外码)及联系...