什么是关系图 (ERD)?
首先,什么是实体关系图?
实体关系图,也称为ERD,ER图或ER模型,是一种用于数据库设计的结构图。一个ERD包含不同的符号和连接器,它们可视化两个重要信息:系统范围内的主要实体,以及这些实体之间的相互关系。
这就是为什么它被称为“实体”“关系”图(ERD)的原因!
当我们谈论ERD中的实体时,通常是指业务对象,例如人员/角色(例如,学生),有形业务对象(例如,产品),无形业务对象(例如,日志)等。“关系”是关于这些实体在系统中相互关联。
在典型的ER设计中,您可以找到诸如圆角矩形和连接器(其端部样式不同)之类的符号,这些符号描述了实体,其属性和相互关系。
何时绘制ER图?
那么,我们什么时候绘制ERD?虽然ER模型主要是根据概念可视化和物理数据库设计开发的,用于设计关系数据库,但在其他情况下,ER图也可以提供帮助。这是一些典型的用例。
- 数据库设计-根据更改的规模,直接在DBMS中更改数据库结构可能会有风险。为了避免破坏生产数据库中的数据,重要的是仔细计划更改。ERD是一种有帮助的工具。通过绘制ER图以可视化数据库设计思想,您将有机会识别错误和设计缺陷,并在执行数据库更改之前进行更正。
- 数据库调试-调试数据库问题可能具有挑战性,尤其是当数据库包含许多表时,这需要编写复杂的SQL才能获取所需的信息。通过使用ERD可视化数据库架构,您可以了解整个数据库架构的全貌。您可以轻松地找到实体,查看其属性并确定它们与其他实体的关系。所有这些使您能够分析现有数据库并更轻松地发现数据库问题。
- 数据库创建和修补-Visual Paradigm(一种ERD工具)支持数据库生成工具,该工具可以通过ER图自动执行数据库创建和修补过程。因此,使用此ER图工具,您的ER设计不再只是静态图,而是真正反映物理数据库结构的镜像。
- 帮助需求收集-通过绘制描述系统高级业务对象的概念性ERD来确定信息系统的需求。这样的初始模型也可以演变为物理数据库模型,以帮助创建关系数据库,或帮助创建流程图和数据流模式。
ERD注释指南
ER图包含实体,属性和关系。在本节中,我们将详细介绍ERD符实体
ERD实体是系统中可定义的事物或概念,例如人/角色(例如,学生),对象(例如,发票),概念(例如,个人资料)或事件(例如,交易)(请注意:在ERD中,术语“实体”通常用于代替“表格”,但它们是相同的)。确定实体时,应将它们视为名词。在ER模型中,实体显示为圆角矩形,其名称在顶部,其属性在实体形状的主体中列出。下面的ERD示例显示了ER实体的示例。
实体属性
属性也称为列,是持有属性的实体的属性或特征。
属性具有描述属性的名称和描述属性类型的类型,例如varchar表示字符串,int表示整数。当为物理数据库开发绘制ERD时,确保使用目标RDBMS支持的类型非常重要。
下面的ER图示例显示了其中具有一些属性的实体。
首要的关键
主键也称为PK,是一种特殊的实体属性,可以唯一地定义数据库表中的记录。换句话说,不得有两个(或更多)记录共享相同的主键属性值。下面的ERD示例显示了具有主键属性“ ID”的实体“ Product”和数据库中表记录的预览。第三条记录无效,因为另一记录已使用ID'PDT-0002'的值。
外键
外键也称为FK,是对表中主键的引用。它用于标识实体之间的关系。请注意,外键不必唯一。多个记录可以共享相同的值。下面的ER图示例显示了一个带有一些列的实体,其中外键用于引用另一个实体。
关系
两个实体之间的关系表示两个实体以某种方式彼此关联。例如,学生可能注册一门课程。因此,实体学生与课程相关,并且关系以连接两者之间的连接器的形式呈现。
基数
基数定义一个实体中可能出现的次数,该数量与另一实体中出现的次数相关。例如,一个团队有很多球员。当存在于ERD中时,实体团队和玩家将以一对多关系相互连接。
在ER图中,基数表示为连接器末端的鱼尾纹。三种常见的基本关系是一对一,一对多和多对多。
一对一基数示例
一对一关系通常用于将实体分成两部分,以简洁地提供信息并使信息更易于理解。下图显示了一对一关系的示例。
一对多基数示例
一对多关系是指两个实体X和Y之间的关系,其中X的一个实例可以链接到Y的许多实例,但是Y的一个实例仅链接到X的一个实例。下图所示一对多关系的示例。
多对多基数示例
多对多关系是指两个实体X和Y之间的关系,其中X可以链接到Y的许多实例,反之亦然。下图显示了一个多对多关系的示例。注意,在物理ERD中,多对多关系被分成一对一对多的关系。在下一部分中,您将知道什么是物理ERD。
概念,逻辑和物理数据模型
ER模型通常在三个抽象级别上绘制:
虽然ER模型的所有三个级别都包含具有属性和关系的实体,但是它们在创建目的和目标受众方面有所不同。
对这三种数据模型的一般理解是,业务分析师使用概念和逻辑模型对系统中存在的业务对象进行建模,而数据库设计人员或数据库工程师则详细说明概念和逻辑ER模型以生成表示物理的物理模型。数据库结构已准备好用于数据库创建。下表显示了三种数据模型之间的差异。
概念模型vs逻辑模型vs数据模型:
ERD功能 | 概念性 | 逻辑上 | 身体的 |
---|---|---|---|
实体名称) | 是的 | 是的 | 是的 |
关系 | 是的 | 是的 | 是的 |
列 | 是的 | 是的 | |
列的类型 | 选修的 | 是的 | |
首要的关键 | 是的 | ||
外键 | 是的 |
概念数据模型
概念性ERD对系统中应该存在的业务对象及其之间的关系进行建模。通过识别所涉及的业务对象,开发了概念模型来呈现系统的总体情况。它定义存在哪些实体,而不定义哪些表。例如,“多对多”表可能存在于逻辑或物理数据模型中,但是在概念性数据模型下,它们仅显示为没有基数的关系。
概念数据模型示例
注意:概念性ERD支持在建模两个实体之间的“一种”关系(例如“三角形”是一种Shape)时使用归纳。用法就像UML中的概括。注意,只有概念性ERD支持概括。
逻辑数据模型
逻辑ERD是概念ERD的详细版本。通过明确定义每个实体中的列并引入操作和事务实体,开发了逻辑ER模型以丰富概念模型。尽管逻辑数据模型仍然独立于将在其中创建数据库的实际数据库系统,但是如果它影响设计,您仍然可以考虑这一点。
逻辑数据模型示例
物理数据模型
物理ERD表示关系数据库的实际设计蓝图。物理数据模型通过为每个列分配类型,长度,可为空等来详细说明逻辑数据模型。由于物理ERD表示特定DBMS中数据的结构和相关方式,因此重要的是要考虑其惯例和约束。在其中创建数据库的实际数据库系统。确保DBMS支持列类型,并且在命名实体和列时不使用保留字。
物理数据模型示例
如何绘制ER图?
如果您发现开始绘制ER图很困难,请不要担心。在本节中,我们将为您提供一些ERD技巧。尝试按照以下步骤了解如何有效地绘制ER图。
- 确保您清楚绘制ERD的目的。您是否要提出一个涉及业务对象定义的整体系统架构?还是正在开发准备用于数据库创建的ER模型?您必须清楚以正确的详细程度开发ER图的目的(有关更多详细信息,请参阅概念,逻辑和物理数据模型部分)
- 确保您清楚要建模的范围。了解建模范围可防止您在设计中包括冗余实体和关系。
- 绘制涉及范围的主要实体。
- 通过添加列来定义实体的属性。
- 仔细检查ERD,并检查实体和列是否足以存储系统数据。如果不是,请考虑添加其他实体和列。通常,您可以在此步骤中标识一些事务,操作和事件实体。
- 考虑所有实体之间的关系,并将它们与适当的基数相关联(例如,实体“客户”和“订单”之间的一对多)。不用担心是否存在孤立实体。尽管不常见,但这是合法的。
- 应用数据库规范化技术以可以减少数据冗余并提高数据完整性的方式重新构建实体。例如,制造商的详细信息可能最初存储在“产品”实体下。在规范化过程中,您可能会发现详细信息在记录中重复记录,然后可以将其拆分为单独的实体制造商,并使用在产品和制造商之间链接的外键进行拆分。
数据模型实例
ERD示例-电影租赁系统
ERD示例-贷款系统
ERD示例-网上商店
将ERD与数据流程图(DFD)结合使用
在系统分析和设计中,可以绘制数据流程图(DFD)以可视化系统流程中的信息流。在数据流程图中,有一个称为数据存储的符号,它表示提供系统所需信息的数据库表。
由于物理ER图提供了实际数据库的蓝图,因此此类ERD中的实体与DFD中的数据存储对齐。您可以通过表示系统中流动的信息结构来绘制ERD作为DFD的补充,或者相反,通过显示系统在运行时如何利用数据来绘制DFD以补充ERD。
将ERD与BPMN业务流程图(BPD)结合使用
在业务流程映射中,可以绘制BPMN业务流程图(BPD)以可视化业务工作流。在业务流程图中,有一个称为数据对象的符号,它表示输入到流程活动中或从流程活动中输出的数据。
由于概念和逻辑数据模型提供了系统内业务对象的高级视图,因此此类ERD中的实体与BPD中的数据对象对齐。您可以通过表示业务工作流程所需的数据对象的结构来绘制ERD作为BPD的补充,或者相反,通过显示如何在整个业务流程中利用数据来绘制BPD以补充ERD。
选择ERD工具
使用ERD开发数据模型需要花费时间和精力。一个有用的数据库设计工具应该能够减少您的时间和精力。Visual Paradigm不仅为您提供ERD工具,还为您提供了一组可视化建模功能,可帮助您更快,更轻松地进行绘制。它在数据库设计,数据库生成和ERD逆转方面都支持当今市场上大多数流行的关系数据库管理系统。
ERD设计器可在Visual Paradigm Modeler中使用,每月仅需花费6美元。我们建议您下载并尝试一下。提供30天的免费评估。无需信用卡。
如果你想要一个基于云的ER图表解决方案而不是桌面应用程序,我建议你尝试Visual Paradigm Online图表。下面是许多由Visual Paradim在线创建的示例:
什么是关系图 (ERD)?的更多相关文章
- 什么是实体关系图(ERD)? 转
https://www.visual-paradigm.com/cn/guide/data-modeling/what-is-entity-relationship-diagram/#erd-data ...
- Ambari服务依赖关系图生成脚本
1. 生成服务依赖关系 #!/usr/bin/python import sys import commands import json def genDependString(ip): url=&q ...
- Echarts3 关系图-力导向布局图
因为项目需要,要求实现类似力导图效果的图,我就瞄上了echarts. 注意事项1:由于我的项目要部署到内网,所以js文件要在本地,网上大多力导图都是echarts2的,而其又依赖zrender基础库, ...
- (转)整体把握jQuery -jQuery 的原型关系图
整体把握jQuery -jQuery 的原型关系图 (原)http://www.html5cn.org/article-6529-1.html 2014-7-2 17:12| 发布者: html5cn ...
- 使用MySQL Workbench导出MySQL数据库关系图
1. 点击MySQL Workbench中间Data Modeling下的Create EER Model From Existing Database: 2. 在Stored Connection中 ...
- tcp/ip协议栈调用关系图
最近阅读了tcp/ip详解卷2,总结一下整个发送过程和接收过程 sendmsg \/ sendit \/ sosend(这一步将数据从用户空间拷贝到内核空间,并且会在这一步判断发送缓存空间是否充足,是 ...
- [CareerCup] 15.6 Entity Relationship Diagram 实体关系图
15.6 Draw an entity-relationship diagram for a database with companies, people, and professionals (p ...
- jQuery 的原型关系图,整体把握jQuery
若干个月前,在博客园中看到一篇文章,内容很简单,就是一幅图,展示的是 jQuery 中各对象之间的关系,当时就觉得,这就是我想要的最直观的总结 jQuery 的方式.在那篇文章中,也有 ...
- IDEA的查询引用、调用关系图的功能
Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员变量的调用树(caller和callee两个方向),非常方便. 在IDEA中类似功能被划分到了三个命 ...
随机推荐
- 我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器
wechat-menu-editor 微信自定义菜单编辑器 前言 在做微信公众号相关开发时,基本上会去开发的功能就是微信自定义菜单设置的功能,本着不重复造轮子的原则,于是基于Vue封装的一个微信自定义 ...
- 快速模式第一包: quick_outI1()
文章目录 1. 序言 2. quick_outI1()流程图 3. quick_outI1()源码分析 4. quick_outI1_continue()源码分析 5. quick_outI1_tai ...
- K8S_第一课作业_20200407
(1)通过cgroup来限制memory ##消耗内存脚本 /tmp/xmem.sh #!/bin/bash mkdir /tmp/memory mount -t tmpfs -o size=2048 ...
- jdbcTemplate快速入门
一. c3p0和dbcp区别 二.导包 hibernate通过映射自动创建表: 三.代码实现
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- python库--tensorflow--可视化
方法 返回值类型 参数 说明 tf.summary .FileWrite() 创建事件文件 logdir 文件保存路径(C盘), 通过tensorboard --logdir=文件路径(l ...
- 从输入 URL 到展现页面的全过程
总体分为以下几个过程 DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 DNS解析 域名到ip地址转换 TCP连接 HTTP连接是基于TCP连接 ...
- [Python]爬虫获取知乎某个问题下所有图片并去除水印
获取URL 进入某个知乎问题的主页下,按F12打开开发者工具后查看network面板. network面板可以查看页面向服务器请求的资源.资源的大小.加载资源花费的时间以及哪些资源加载失败等信息.还可 ...
- php获取纳秒方法
PHP不提供精度高于微秒的函数. 可以使用system功能,直接从机器中获得的价值,如果你运行的是Linux: $nanotime = system('date +%s%N');
- Java基础系列(41)- 冒泡排序
冒泡排序 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知 我们看到的嵌套循环,应该立马就可以得出这个算法的时间复 ...