通过建立实体到概念模型的映射,Entity-Relationship Model可以表达整个数据库的逻辑结构,很多数据库产品都采用E-R模型来表达数据库设计。

一、E-R模型采用了三个基本概念:实体集、关系集和属性
a)实体集
实体Entity相当于现实中的事物或对象,比如大学中的一个person就是一个entity,实体具有一系列属性,通过其中的某个或某几个属性可以唯一地确定这个实体,比如person_id。实体可以是现实中具体的事物,比如person、book,也可以是抽象的事物,比如money、course等。
实体集是一系列具有相同属性实体的集合,比如某所大学的所有教师构成了一个称为instructors的实体集。
实体集可以是相交的,假如persons实体集为学校中的所有人,则一个person实体可能是一个instructor实体或者一个student实体,或者两者都不是。
b)联系集
联系是指多个实体间的相互关联。比如可以定义教师A与学生B之间的联系advisor,这一联系指明A是B的导师。联系集是相同类型联系的集合,是n>=2个实体集直接的数学关系。实体集之间的关联称为参与(participate),联系也可以具有描述性属性(descriptive

attribute),实体集instructor和student之间的联系为advisor,可以将属性date与该联系关联起来,表示教师成为学生导师的日期。
c)属性
每个属性都有一个可取值的集合,称为属性的域(domain)或者值集(value

set)。Course_id的域可能是特定长度的所有字符串的集合,semester的域则可以是春夏秋冬四个季节。实体有多个属性,每个属性可以用属性名-值的键值对来描述,比如instructor的一个实体可以描述为:{(ID,7677),(name,Crick),(dept_name,
Biology)}
属性的分类
简单属性与复合属性。简单属性无法再被划分为更小的部分,复合属性却可以。比如name可以进一步划分为first_name\middle_name\last_name。如果在一些场景下要使用整个属性,在另外的场景则只需要属性的一部分,则适合使用复合属性。复合属性有助于分组相关的属性,让建模更清晰。
单值属性和多值属性。
一般情况下一个属性只会有一个值,但有些多值的情况,比如phone_number,一个人可能会有多个电话号码。多值属性用花括号区分,{phone_number},在适当的情况下,可以设置多值属性的上下界,比如设定phone_number的数目为1-2。

二、约束Constraints
a)映射基数(Mapping Cardinalities)
映射基数也称映射比率,表示一个实体统一联系集能关联的实体个数,常用于二元联系集。假设R为实体A-B之间的联系集,则映射基数有如下几种情况:
一对一(one to one),A的实体至多与一个B实体关联,反之亦然。
一对多(one to many),A的实体可以与任意多个B实体关联(>=0),B实体则只能与至多一个A实体关联。
多对多(many to many)。A和B实体间相互关联的数目不受限制。

b)参与约束(Participation Constraints)
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,则E在R中的参与是全部的(total),否则为部分的(partial)。比如A-B为一对一映射,A中的实体数多于B,则A部分参与,B全部参与。

三、E-R模型转换为关系模型
a)转换具有简单属性的强实体集
假设E是具有简单描述性属性a1,a2..的强实体集,可以转换为具有同样属性的关系模型E,它的一个元祖对应实体集中的一个实体,主键也是实体集E的主键。
b)转换具有复杂属性的强实体集
对于复合属性,转换时需要为每个子属性创建单独的属性,比如将name拆分为first_name,
middle_name,
last_name;对于多值属性,需要使用多个元祖来表示,比如ID为22的教师的phone_number有555-1234与444—4321,则对应两条元祖(22,
555-1234)与(22, 444—4321),这两个属性共同构成了主键。
c)转换联系集
联系集也转换为关系模型,所有参与联系的实体集的属性和联系集的描述性属性构成了转换的模型的属性。关于主键,对于多对多的二元联系,主键为参与联系的实体集的主键的并集;对于一对一的联系,可使用任意一方的主键;对于多对一的联系,选择“多”端的主键。

学习资料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan​

《数据库系统概念》10-ER模型的更多相关文章

  1. 数据库系统概论——从E-R模型到关系模型

    E-R模型和关系模型都是现实世界抽象的逻辑表示 E-R模型并不被 DBMS直接支持,更适合对现实世界建模 关系模型是 DBMS直接支持的数据模型 基本 E-R图中的元素包括实体集.联系集.属性 椭圆框 ...

  2. 数据库设计与 ER 模型 - 数据库系统原理

    数据库系统生存周期 数据库应用系统的开发是一项软件工程,一般具有信息的采集.组织.加工.抽取.综合.传播等功能,但又有自己的特点,所以称为 数据库工程. 数据库应用系统从开始规划.设计.实现.维护到最 ...

  3. ​《数据库系统概念》1-数据抽象、模型及SQL

    ​DBMS(database-management system)包括数据库和用于存取数据的程序,DBMS的基本目标是为数据的存取提供方便.高效的方式,此外对大多数企业来说,数据是非常重要的,所以DB ...

  4. 数据库系统原理——ER模型与关系模型

    原文链接: http://blog.csdn.net/haovip123/article/details/21614887 犹记得第一次看<数据库系统原理>时看天书的感觉,云里雾里:现在已 ...

  5. 17数据表&E-R模型&概念数据模型上-选学天轰穿大话数据库视频教程

    大纲:解剖“数据表”,戏说E-R模型,概念数据模型(E-R 到 CDM),使用PowerDesigner创建概念模型,生成逻辑数据模型 土豆超清地址: 腾讯超清地址: 百度云盘下载地址:上传ing,稍 ...

  6. 数据库设计和ER模型-------之ER模型的基本概念(第二章)

    ER模型(实体联系模型)的基本元素 实体:是一个数据对象,在ER模型中,实体用方框表示,方框内注明实体的名称 联系:表示一个或多个实体之间的关联关系,联系用菱形框表示,并用线段将其与相关的实体联系起来 ...

  7. 《数据库系统概念》11-扩展的E-R特性

    ​虽然基本的E-R特性可以应对大部分数据库建模,但为了使用方便,也提供扩展的E-R特性 一.特化Specialization有时一个实体集会保护若干子集,这些子集各自具有不同的属性.比如person可 ...

  8. 数据库设计和ER模型-------之关系模型的基本概念(第二章)

    关系模型的基本术语 定义:用二维表格来表示实体集,用关键码表示实体之间联系的数据模型称为关系模型 有时也习惯称呼关系为表或表格,元组为行(Row),属性为列.关系中属性个数称为“元数”,元组个数称为“ ...

  9. ER模型

    一.什么是ER模型 实体-联系图(Entity-RelationDiagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器.独立于DBMS的ER图模型.通常将它简称为ER ...

随机推荐

  1. API接口设计:防参数篡改+防二次请求

    API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数 为了防止被第别有用心之人获取到真实请求参数后再次发起请求获取信息,需要采取很多安全机制 1.首先: 需要采用ht ...

  2. Linux - 在当前系统内查找信息的方法

    查找文本 使用grep命令 grep命令 - 示例 grep命令 - 正则表达式 grep命令 - 统计匹配字符串的行数 grep命令 - 搜索多个单词 结合正则表达式使用grep命令 注意:在搜索指 ...

  3. js 学习记录(一)

    前情提要: 本记录参照  <<javascript 入门导论>>  这本书学习 

  4. Liferay7 BPM门户开发之5: Activiti和Spring集成

    参考文档: https://github.com/jbarrez/spring-boot-with-activiti-examplehttps://github.com/sxyx2008/spring ...

  5. 【xsy2332】Randomized Binary Search Tree DP+FFT

    题目大意:给你一个$[0,1]$之间等概率随机序列,你需要把这个序列插入到一棵$treap$中,问这棵$treap$的期望深度,请对于$[1,n]$中的每个深度分别输出它的概率(实数,保留五位小数). ...

  6. 【Object类、常用API】

    Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类 ...

  7. SQL SERVER 用sql语句将一列数据拼接成一个字符串

    执行 SELECT userid FROM userinfo   得到 1 2 3 4   如果要得到 1,2,3,4   执行方案 DECLARE @STR NVARCHAR(8000) SELEC ...

  8. 没有安装hiredis

    在redis的发行包中的deps目录中就包含hiredis的源码,手动编译安装,或者自行下载一份.地址:hiredis的地址 cd /deps/hiredis make make install 然后 ...

  9. 原生js实现vue组件功能

    在如今VUE盛行的情况下,我们一直在惊叹于VUE的组件的功能,却不知道,原生js早就已经支持了这个功能. 最近在公开课学到的,js还有很多很多需要探索学习. 下面是一个简单的例子 <!DOCTY ...

  10. Oracle 基本知识回顾

    1.查找数据库所用的字符集编码:SELECT USERENV('language') FROM DUAL;2.将一个表中的字段,插入到这个表:INSERT INTO TABLE SELECT * FR ...