【数据库】数据库入门(五): 实体关系模型 (Entity-Relationship Model)

数据库的设计通常需要经历四个部分:

  1. 需求收集与分析(Requirements Collection and Analysis)
  2. 概念设计(Conceptual Design) —— 设计实体关系模型 (ER Model)
  3. 逻辑设计(Logical Design)—— 实现从 ER 模型到关系模式(Relation Schemas)的转换。
  4. 物理设计(Physical Design)

本文主要介绍一下概念设计的部分。

概念设计

概念设计是一个构建概念数据模型的过程,这个概念数据模型在抽象的高层建模;需要足够简单且通常是图形化的;并且能够用于与非技术用户交流数据库的需求。这里主要介绍如何使用 ER 模型来实现概念设计。

ER 模型

ER 模型主要有三个关键方面:

  • 数据结构:ER 模型中的数据表现为实体与属性之间的关系
  • 数据完整性:对于ER模型,键(key)用于实体或者关系类型,而基数约束或者参与约束用于关系类型。
  • 数据操作:ER 模型中不存在对数据的任何操作。

ER 模型中的关键概念与关系型数据库的概念联系如下:

关系型数据库 实体关系模型
属性 属性
超键 / 主键 / 候选键 超键 / 主键 / 候选键
元组 实体 / 关系
关系 实体集合 / 关系集合
关系模型 实体类型 / 关系类型

ER 模型的基本图表元素有:

属性(椭圆) 用于描述实体或者关系的性能或者特征
主要属性(内含下划线的椭圆) 能够用于识别特定实体的属性
实体(长方形) 在现实世界中独立存在的单一个体类别
关系(菱形) 实体之间的联系

实体类型与实体集合

实体类型定义了一个拥有相同属性的实体的集合。

实体集合是指在特定时间下,数据库中所有实体类型的集合。

对于某一个特定的实体以及其属性,可以用下面的形式表示:

实体名为员工(Employee),该实体类型的属性包括工号(SSN)、姓名,工资和地址。需要注意的是,在这里工号是主属性(下划线),地址是一个多值属性(双椭圆),意味着地址这个属性对于同一个实体而言,允许拥有一个或者一个以上的值。

弱实体类型

弱实体类型指的是一个实体类型没有足够的属性来构建一个能够识别特定个体的主键,因此它需要依赖一个能够被确定的实体才能存在。弱实体类型必须拥有一个或者多个属性,其中包括弱主键,与其所依赖的实体的主键共同作为该弱实体类型的主键,从而识别特定的个体。表示如下:

在这里,儿童(Child)是一个弱实体类型,不同的儿童可能会拥有相同的姓名和年龄,因此把儿童这个实体与员工建立依赖关系,其关系为员工-拥有(has)-儿童,通过 SSN 和 Cname 共同构建能够识别特定儿童的主键。

关系类型与关系集合

关系类型指的是多个实体之间的联系,该联系允许拥有隶属于这段联系的独立的属性。

关系集合指的是某个特定关系类型联系的所有实体的集合。

表示形式如下:


这里有两个实体,员工(Employee)和部门(Department),员工在部门里工作,这是它们之间的关系。

在现实世界里,实际上还可能会出现更加复杂的实体关系模型,比如递归关系:

在这里,员工之间存在监督者与下属之间的关系,监督者监管下属,而监督者和下属同样都属于员工,并且拥有员工的属性。

还有更高程度的关系:


在这个关系里,提供商(Supplier)为项目(Project)提供零件(Part),因此提供(Supply)这个关系同时涉及到三个实体,且该关系还具有数量(Quantity)这个属性。

关系中的约束

ER 模型中的约束关系通常是指实体与实体之间基于某种关系下的约束。主要包括两种:

  • 基数比例(Cardinality ratios):指定实体允许参与到关系中的最大数目。
  • 参与约束(Participation constraints):指定某个实体在其与其他实体的依赖关系中是否必然存在。

基数比例(Cardinality ratios)

基数比例的类型主要有三种:多对多(Many-To-Many)、一对多(One-To-Many)、一对一(One-To-One)。

  • 多对多(Many-To-Many)


含义:一名员工可以为多个部门工作;一个部门里允许拥有多名员工。

  • 一对多(One-To-Many)


含义:一名员工最多只能为一个部门工作;一个部门里允许拥有多名员工。

  • 一对一(One-To-One)


含义:一名员工最多只能为一个部门工作;一个部门里最多只允许有一个员工。(虽然这不符合现实。。。)

在以上三种类型的基础上,ER 模型还延伸出一种约束:基数限制。主要含义就是通过一个整数来指定两个实体在关系中允许参与的数量范围。表示如下:


含义:一个员工必须为一个且最多一个部门工作;一个部门必须拥有一个或者多个员工。

参与约束(Participation constraints)

参与约束主要分为两种:完全参与(Total)和局部参与(Partial)。一般情况下,默认为局部参与。

  • 完全参与(Total)


含义:每一名员工必须为一个部门工作;一个部门可能有或者没有员工。

  • 局部参与(Partial)


含义:一名员工可能有或者没有为一个部门工作;一个部门可能有或者没有员工。

实体类型中的父类与子类

实体类型的父类与子类指的是拥有不同名称的同一个概念,子类通常是父类实体根据其具体的应用意义所采用的的更加显式的表达。父类与子类之间的关系被称为 ISA 关系类型

专门化(Specialisation)与一般化(Generalisation)

专门化指的是自上而下定义一个实体所拥有的子类的集合。
一般化指的是自下而上地把拥有共同属性的多个子类归纳成一个单一的父类。

在上图中,员工(Employee)是父类,其子类根据不同的实际意义分别为秘书(Secretary)、技术员(Technician)和工程师(Engineer)。该图实现专门后就能得到下面的图:


图中的三个子类通过一般化以后,就能得到前一个图。

分离约束(Disjointness constraint)

分离约束主要是用于指定通过专门化产生的子类之间的关系。子类间的分离约束主要有两个方面:

  • 分离(disjoint):子类的各个实体之间完全分离,不存在任何交集。
  • 重叠(overlap):子类的各个实体之间可能存在某些交集,即某个父类的实体,既可以当做其中一个子类实体,也能当做另一个子类实体。
    不同的分离约束在 ER 模型中的表示形式如下:


完整性约束(Completeness constraint)

  • 完全约束(Total):每一个父类的实体必然属于至少一个子类的成员。
  • 部分约束(Partial):父类的实体可能不属于任何一个子类(默认约束)。

构建 ER 模型的流程

  1. 识别所以实体类型(包括弱实体类型);
  2. 识别所有关系类型(包括 ISA 关系和依赖关联);
  3. 识别所有实体和关系类型对应的属性(以及每个属性的定义域);
  4. 识别每个实体的主键;
  5. 辨别步骤 2 中找出的所有关系中的基数比例;
  6. 确定上述关系的参与约束;
  7. 确定 ISA 关系中的分离约束和完整性约束。

软件支持

网络上有很多软件能够用来画 ER 模型,比较常用的一个轻量级软件是 TerraER, 它是一个基于 JRE 运行的软件,支持Windows,Mac,Linux环境,能够生成 ER 模型的 XML 文件以及 JPEG 图片。

下载链接:https://github.com/rterrabh/TerraER/releases/download/TerraER3.01/TerraER3.01beta.jar

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容