ER模型详解-陈氏模型

2023-11-10

转载自:
http://blog.163.com/magicc_love/blog/static/18585366220142125836878/

Entity Relationship Model - ER模型 - 实体关系模型
1976年Peter Chen首次提出了Entity Relationship Modeling(实体关系建模)概念,并发明了陈氏表示法Peter Chen’s Notation,因此ER模型也可以叫做Chen’s Model(陈氏模型)。下面是一个ER模型(ERD - ER diagram - Entity Relationship diagram)示例:
这里写图片描述

图:ER模型 - Peter Chen’s Notation图:ER模型 - Peter Chen’s Model,实际上这是一个EER - Enhanced Entity-Relationship Model,扩展ER模型
Entity 实体:使用方框表示
Attribute 属性:使用圆或椭圆表示。实体和实体关系都可以拥有属性,例如图中的Order-Line关系拥有3个属性

Relationship 关联关系:使用菱形表示,菱形中写上关联关系的名字
ER模型中关联关系也可以拥有属性,在多对多关联关系中不需要使用额外中间关联实体来表示,关联关系本身就可以作为这个中间实体。另外ER模型的关联关系不限于2个实体之间,可以在多个实体间使用一个关联关系

Unique Identifier 唯一标识
陈氏表示法没有很好的解决唯一标识问题,仅使用一种简单的标记方法,下图表示Party的ID作为Purchase Order唯一标识一员的情况,关联关系名称改为E,朝依赖实体方使用一个箭头,依赖实体使用一个额外的方框括起来
这里写图片描述

图:ER模型中唯一标识的表示方法图:ER模型中唯一标识的表示方法

Sub-type 子类型
最初的陈氏表示法中不包含子类型概念,后来Robert Brown和Mat Flavin添加了子类型表示法,这种ER模型称为扩展ER模型。上图ER模型中有一个子类型例子,超类Party派生出子类Organization和 Person

Constraints between relationships 关联关系的约束
最初的陈氏表示法中关联关系的每一端只使用一个数字表示,比如一对多的关联关系,在一端使用1,另一端实体上使用n表示,这对关联关系约束不充分。上图的 ER模型在关联关系每一端使用2个数字表示,这与Crow’s Foot表示法以及UML中的optionality(可选项)、cardinality(关联基数)有些类似又有较大的区别,详细说明如下:

上图中一个Purchase Order必须关联一个Party,必须关联一个或多个Order Line,每个Order Line要么是一个Product要么是一个Service
Purchase Order右边的(1,)1表示一个Purchase Order有且必须有一个Party
Party左边的(0,)n表示一个Party可以拥有多个Purchase Order,也可以没有
Purchase Order左边的(1,)n表示Purchase Order必须有一个或多个Order Line
Order Line右边的(1,)1表示每个Order Lien必须属于一个Purchase Order
Order Line下面的(1,)1和菱形符号一起表示每个Order Line要么是一个Product要么是一个Service
Product和Service上面的(0,)n表示Product和Service可以属于0个或多个Order Line
Event和Event Category的关联关系稍特殊(实际中这种 n:1 的关系不多见),他不是一个普通的多对一关系。Event可以关联一个Event Category也可以不关联,而Event Category则必须关联一个或多个Event

Order-Line和Product、Service之间是一个exclusive or约束(异或、互斥约束,disjunctive mandatory约束)关系,使用超类和子类一样的表示法来表示。因为exclusive or的语义本身已经已经表明Order Line必须是Product或者Service其中之一,因此上图中Order Line右边和下面的(1,)1是多余的

EER - Enhanced Entity-Relationship Model 扩展ER模型
上面已经有些内容不属于最初的陈氏表示法,是后来其他人扩展的。陈氏表示法出现的早也存在一些不足,因此存在一些扩展以弥补缺陷,不同文档中使用的ER图也不尽相同,例如下图是wiki上的一个示例ER模型
这里写图片描述

图:Wiki上的ER模型示例图:Wiki上的ER模型示例
属性带下划线表示主键属性;关联关系连接线为两条线的表示”最少一个,或多个”(用于n的一端);实体和关联关系使用两个框的,可能是上面讲到的唯一标识表示法,也可能是”最少一个,或多个”表示法的一部分(这一点有待确认)。还有一些,例如属性与实体间用两条线连接的表示该属性为多值属性(上图中Region实体的Foliage属性)。图中的部分解释如下:

1 Account has n(at least one) Character, Account的AcctName属性将成为Has的唯一标识的一员;
1 Region contains n(at least one) Character, Region的RegionName属性将成为Character的唯一标识的一员;

Information Engineering - IE模型
Information Engineering采用Crow’s Foot表示法(也有叫做James Martin表示法的),中文翻译中对使用了Crow’s Foot表示法的模型也有笼统的称做鸭掌模型的(关联关系的关联基数中采用到了一个鸭掌形的三叉线来表示)。他由Clive Finkelstein发明,与James Martin一起推广,后来两人各自做了些修正形成两份版本
前面示例模型的Information Engineering表示如下:
这里写图片描述

图:Information Engineering - IE模型 - Crow’s Foot Model - 鸭掌模型图:Information Engineering - IE模型

注意IE模型与ER模型的区别。Purchase Order与Party是多对一 n:1 的关联关系,在ER模型中n被放置在了Party的左边,而IE模型中n被放置在了Purchase Order的右边。两种表示法的形式(相当于语法)不一样,但语义是一致的。这一点也只有ER模型是特殊的,其他模型表示法中都与IE 模型一致

Entity & Attribute:实体属性并不出现在IE模型中,而是单独使用另外的文档记录
Relationship
Crow’s Foot的可选项optionality和关联基数cardinality 表示法:
这里写图片描述

图:Crow’s Foot的可选项optionality和关联基数cardinality 表示法图:Crow’s Foot的可选项optionality和关联基数cardinality 表示法

Optionality 可选项:用来表示该关联关系是可选的,还是必须的。对于可选的关联关系,通常表现为用于关联的外键字段允许为null值,或者对于使用中间关联关系表的情况下可以不出现关联数据,而必须的关联关系则不允许外键为null或者必须存在关联数据
Cardinality 关联基数:用来表示关联实体的数量上限,为1、n等
图中右边部分表示的意义如下:1个A必须关联到1个或多个B,一个B可以关联0个或1个A

关联的约束如图所示,Product和Service通过一个圆连接到Order Line。如果是实心圆则表示Product和Service是exclusive or;如果是空心圆则表示Product和Service是inclusive or(相容的,conjunctive),表示可以是其中之一或者多个
在上面IE模型图中,Order Line右侧是Finkelstein的一个特殊符号,表示一个Purchase Order初始时有0或n个Order Line,但最终必须有1或n个Order Line
Martin以动词命名关联关系,只命名一个方向(遵循从左到右、从上往下的方式),而Finkelstein不对关联关系命名

Sub-type:图中Party子类的表示方法由Martin采用,Finkelstein则对每个子类使用单独的实体,使用ISA关联关系(关联关系名称为ISA,也有采用类似UML继承的三角形符合,在关联线上使用一个三角形的)表示其为子类

Richard Barker’s Notation
这个表示法最早是英国咨询公司CACI发明,经过了Richard Barker的推广,后来Richard Barker去了Oracle,开发了相关的建模工具,因此也叫做Oracle表示法(Oracle’s Notation)
示例模型的Barker表示法如下:
这里写图片描述

Richard Barker’s Model图:Richard Barker模型

Entity & Attribute:实体试用圆角的方框表示,属性出现在实体框中。可选属性(允许null)前面带一个空心圆,必须的属性(不允许null)前面带一个实心圆,唯一标识属性前面带一个#符号(因为制图工具原因,有时可选属性前面不使用任何符号,必须属性前使用一个点)

Relationship:
Barker表示法中可选项通过半边连接线的虚实线表示,表示法如下图所示。上面的模型中Purchase Order必须关联到一个Party,所以关联线在Party一侧的那一半是实线表示;而Party可以关联到0或多个Purchase Order,所以关联线在Purchase Order一侧的那一半是虚线表示
这里写图片描述

图:Richard Barker’s Notation图:Richard Barker’s Notation

关联基数为n时采用一个三叉线,线条末端没有符号时表示关联基数为1
另外Barker表示法中有一个表示aggregation、composition的特殊符号,例如示例模型中的Purchase Order和Order Line的关系,在Order Line右侧的三叉线边上添加一个竖线,注意与Crow’s Foot表示法之间的区别
Sub-type:Barker表示法中子类型显示在父类型的实体框中
Constraint:Barker表示法仅支持exclusive or约束,如示例模型中所示,用一条弧线划过2个关联关系

IDEF1X模型
IDEF1X是美国联邦政府广泛使用的一种模型,前面示例模型的IDEF1X等效模型如下:
这里写图片描述

图:IDEF1X模型图:IDEF1X模型

Entity & Attribute:实体使用方框和圆角框表示,独立实体(Independent entities,主键不包含其他实体主键值)使用方框,非独立实体(dependent entities,主键包含其他实体主键值)使用圆角框。属性出现在实体框中,主键用线隔开

Relationship:
外键不是使用关联线表示,必须在实体属性中明确的标注外键属性
如果关联关系一方的唯一标识将作为另一方唯一标识的一部分(即identifying relationship),关联线使用实线,否则(即non-identifying relationship)使用虚线

不同于IE模型,IDEF1X中可选项和关联基数是分开表示的,关联线的一端表示关联基数,另一端表示可选项
这里写图片描述

图:IDEF1X Cardinality 关联基数图示图:IDEF1X Cardinality 关联基数图示
如IDEF1X示例模型中,关联基数的图示都是出现在关联关系的左端或者上面,可选项出现在右端或者下面。对于可选的关联关系(即类似外键允许为null 值的情况),在可选项一端使用一个菱形,例如示例模型中Event Category左边的菱形;对于必须的关联关系(即外键必须为有效的实体标识值的情况),则在可选项一端直接将关联线与实体连接。对于多对多的情况,两端均使用关联基数符号,可选项问题在模型中通过其他文档标注

关联关系的名称有几种表示方法。默认情况下遵循从左至右从上至下的顺序,关联关系从左至右的名称放在关联线上方,从右至左的名称放在关联线下方。也可以使用一个反斜杠将两个方向的名称分开,从左至右从上至下的在反斜杠前面,否则在后面

Sub-type & Constraint
IDEF1X中的子类和关联约束分别如示例模型中所示。另外一点,示例模型中的子类和关联约束图例中,小圆圈下面都是使用2条横线,这表示模型中已经列举了所有的子类和约束情况,如果模型只是部分列举子类和约束情况,则使用1条横线
Domain:IDEF1X中定义了domain,domain即数据类型的定义,比如数据类型、取值范围等各种需要运用到属性值上的约束
详尽的IDEF1X规范参考IDEF1X标准:Integration Definition for Information Modeling

EXPRESS-G表示法
EXPRESS-G是一个ISO标准ISO 10303-11。示例模型的EXPRESS-G表示法如下(省略了Event、Event Category部分):
这里写图片描述

图:EXPRESS-G表示法图:EXPRESS-G表示法

Entity & Attribute:
实体使用方框表示,实体名称出现在方框中
属性通过空心圆结束的线条连接到属性值类型,属性名称出现在线条上。可选属性使用虚线条连接,必须属性使用实现连接
属性值类型使用右边多一条竖线的方框表示,ISO规范中确定的简单数据类型(String, Binary, Logical, Boolean, Number, Integer, Real等)均使用上图中所示的实体框表示。扩展或者自定义的数据类型使用虚线框表示,例如上图示例中order_date属性的DATE类型。枚举类型的表示方法如下图:
这里写图片描述

图:EXPRESS-G的枚举表示方法图:EXPRESS-G的枚举表示方法

Relationship:
使用空心圆结束的线条连接关联实体
关联关系的名称出现在关联线上,朝空心圆一端的方向为正向,相反则为反向,反向的关联关系名称前面使用(INV)表示
关联基数紧随关联名称之后,第一个字符可以是S、B、L、A,分别表示Set、Bag、List、Array,后面中括号的内容即为关联基数,问号表示多个。默认情况下(没有明确标注)关联基数都为[1:1],因此上图中出现[1:1]的地方都可以省略

前面提到过的exclusive or约束,EXPRESS-G中使用Select(可选类型)表示,如上图中的order_line_item

Sub-type:如上图中Party、Person、Organization所示,连接线使用粗线条

ORM - Object-Role Modeling
下面是ORM2的部分表示法
基本元素
下面是ORM模型几个基本元素图示:
这里写图片描述

图:ORM模型基本元素图:ORM模型基本元素

唯一性约束表示法
ORM中唯一性约束是在相应角色上使用带箭头的线条表示,线条在哪些角色上,则这些角色的组合必须唯一,例如下图:
这里写图片描述

图:ORM模型唯一性约束表示法图:ORM模型唯一性约束表示法
图中Person is of Gender的关系中,Person必须唯一,因此这是一个n:1的关系。同样Person was born in Country是1:n,Person speaks Language是n:m,Person is president of Country是1:1

下面表格是用于理解Person is of Gender、Person was born in Country的数据示例:
这里写图片描述

图:数据示例

关联关系中必须的角色使用带圆点的线条表示,如上图中Person was born in Country
上面示例中的唯一性约束都是位于一个关联关系(包括二元和多元关系)中,这种唯一约束叫做内部唯一约束Internal UC。多个关联关系组合起来形成的唯一约束称为外部唯一约束External UC,例如下图所示
这里写图片描述

图:ORM模型External UC图:ORM模型External UC
图中State具有2个外部唯一约束,一个是Country+StateCode,圆圈中使用2跟线条表示这个唯一约束作为State的主键;另一个是 Country+StateName

Inclusive or ((disjunctive mandatory role)
这里写图片描述

图:ORM Inclusive or表示每个Visitor必须有护照Passport或者驾驶执照DriverLicence,或者两样都有

Exclusive
这里写图片描述

图:ORM Exclusive约束表示Person不可能同时是married和widowed状态

exclusive or则是inclusive or和exclusive的结合,即必须是其中之一
这里写图片描述

图:ORM Exclusive or约束

详细的ORM2图形表示法参考ORM 2 Graphical Notation Summary
使用ORM建模的过程示例参考Object Role Modeling: An Overview
ORM2的完整介绍参考ORM2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ER模型详解-陈氏模型 的相关文章

  • H2数据库-快速指南

    H2数据库 简介 H2是开源的轻量级Java数据库 它可以嵌入Java应用程序中或以客户端 服务器模式运行 H2数据库主要可以配置为作为内存数据库运行 这意味着数据将不会持久存储在磁盘上 由于具有嵌入式数据库 因此它不用于生产开发 而主要用
  • 成为Qt开发大牛,从入门到精通,一步一步走完整个学习路线!

    简介 本文为 C QT 学习路线大纲 资料 文章底部 Qt 可以做什么 Qt 虽然经常被当做一个 GUI 库 用来开发图形界面应用程序 但这并不是 Qt 的全部 Qt 除了可以绘制漂亮的界面 包括控件 布局 交互 还包含很多其它功能 比如多
  • 盘点一下不到100行的给力代码

    作者 景略集智 https jizhi im blog post short and excellent code 只需10行Python代码 我们就能实现计算机视觉中目标检测 from imageai Detection import O
  • qt 创建第二个ui_QT多个ui文件使用

    在使用QT做应用程序的时候几乎都会用到比较多的对话框 下面内容讲解下如何使用多个ui文件进行设计 注 下面使用的是Ubuntu16 04下的QT5 首先先建立一个工程 编译后结果如下 上面只有一个按钮 现在我们新建一个ui 然后点击该按钮来

随机推荐

  • 直方图-绘制子图subplot imshow

    显示好几幅图片在一个窗口内 逗号可以省略 其实imshow这个函数前两篇博客中已经开始使用了 与matlab中的使用很相似 下面介绍一下 若要显示灰度图片 参数为 cam plt cm gray 若要显示彩色图片 opencv 读入的图片默
  • Docker CE 学习笔记2 : Docker 安装后的步骤

    目录 1 以非 root 用户管理 Docker 2 配置Docker 在系统启动时运行 3 使用不同的存储引擎 4 配置Docker守护进程侦听连接的位置 4 1 配置远程访问使用systemd单元文件 参考 https docs doc
  • .net core 连接Mysql

    1 安装依赖包 在这里插入图片描述 https img blog csdnimg cn 16e74e954c414688b26af8b9d92fd793 png x oss process image watermark type d3F5
  • python -range()

    range 函数 range 101 可以用来产生0到100范围的整数 需要注意的是取不到101 range 1 101 可以用来产生1到100范围的整数 相当于前面是闭区间后面是开区间 range 1 101 2 可以用来产生1到100的
  • 时间卷积网络TCN:CNN也可以处理时序数据并且比LSTM更好

    本文回顾了 Shaojie Bai J Zico Kolter 和 Vladlen Koltun 撰写的论文 An Empirical Evaluation of Generic Convolutional and Recurrent Ne
  • top命令详解

    Top命令查看的内容 第一行是任务队列信息 06 29 43 当前时间 up 4 12系统运行时间 2 users当前登录用户数 load average 0 00 0 00 0 00系统负载 即任务队列的平均长度 第二行 为进程信息 Ta
  • linux部署tomcat项目详细教程(安装linux到部署tomcat)

    近来想要研究下linux 所以就搭了个linux系统来配置服务器玩玩 这里分了个目录 如果已经安装好虚拟机或者linux系统的小伙伴可以直接跳过前面的安装介绍 直接看部署 文章目录 一 总步骤说明 二 安装虚拟机 三 创建linux系统 四
  • DQL基础查询

    一 基础查询 1 语法 select 查询列表 from 表名 select后面跟的查询列表 可以有多个部分组成 中间用逗号隔开 例如 select 字段1 字段2 表达式 from 表 2 特点 查询的结果集是一个虚拟表 3 执行顺序 f
  • 循环神经网络RNN论文解读

    版权声明 本文为CSDN博主 了不起的赵队 的原创文章 遵循CC 4 0 by sa版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net zhaojc1995 article details 80572
  • Linux网络和安全:配置、远程访问与防御指南

    文章目录 Linux 网络和安全 引言 网络配置 IP地址配置 配置网络接口 防火墙设置 安全性加强 Linux网络配置及端口管理 网络配置命令 端口管理 防火墙和安全性设置 防火墙管理工具 安全性设置 Linux远程访问技术 SSH和VP
  • leetcode Path Sum

    Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeNode int x val x left NULL ri
  • 基于B/S的网上零食销售系统的设计与实现(附:源码 论文 Sql文件)

    摘要 本文介绍了网上零食销售系统的整个开发过程 采用国内认准的B2C商城建站系统模式 并按照现有的购物系统的现状而设计开发的网络买卖平台 本文主要阐述的了整个系统的完成过程 模拟了一个具备卖家 买家和管理员的网络交易系统 而本平台对不同的用
  • 若依打包上线前后端配置

    1 后台访问打包设置 vue config js 文件中需要修改代理地址 devServer host 0 0 0 0 host 188 188 188 64 port port open true proxy detail https c
  • STM32进入STOP模式并唤醒实验总结

    项目需求 需要实现设备低功耗功能 实现过程中遇到几个问题 以此记录总结 stm32f103ret6 问题一 执行PWR EnterSTOPMode PWR Regulator LowPower PWR STOPEntry WFI 后 程序继
  • 进程间通信:比较脸熟的ftok()

    老师在讲这个函数时没有什么感觉 当我做了试验后 其实也没有什么感觉 就是当我在改进实验的时候 问题就来了 就在ftok 这出的的错误 不过先不去了解它的作用来先说说为什么要用它 共享内存 消息队列 信号量它们三个都是找一个中间介质 来进行通
  • OpenSSL:调用OpenSSL实现SHA算法

    安装 libssl dev sudo apt get install libssl dev example c include
  • 用python实现打字练习网站第一

    一 简介 在在线打字测试 dazi kukuw com 网站中 本人kpm一直不高 想着是否能用python写个脚本来改善下 于是选择用python的Selenium来实现 也对其中遇到一些常见问题进行解决 二 正文 1 首先 webdri
  • Notepad++安装NppFTP的和NppFTP的使用

    1 NotPad 插件的安装 NotPad 提供了很多方便的插件以供我们使用 没有的插件需要我们自己安装 安装分为手动安装和自动安装 1 gt 自动安装 选择需要的插件安装即可 安装完成就可以看见所安装的插件 如果在线不能安装就需要手动安装
  • python进阶篇

    想必看到这篇文章的朋友都已经有了一定的基础 已经能够理解python的语法 库的使用 循环遍历以及抛出异常 此时的我们已经拥有了解决问题的能力 但可能自己写不出代码 就像我们学数学 前面的低中档题可能不在话下 所向披靡 但一遇到压轴题就歇菜
  • ER模型详解-陈氏模型

    转载自 http blog 163 com magicc love blog static 18585366220142125836878 Entity Relationship Model ER模型 实体关系模型 1976年Peter C