一、实体—联系(E-R)数据模型概述
该数据模型基于对现实世界的这样一种认识:世界由一组称为实体的基本对象及这些对象间的联系组成,该模型是一种语义模型,模型的语义方面主要体现在模型力图去表达数据的意义。
1.1 实体集
实体是现实世界中可区别于其他对象的“事件”或“物体”。每个实体有一组性质,其中一部分性质的取值可以唯一地标识实体。
实体集是具有相同类型及共享相同性质(或属性)的实体集合。
实体通过一组属性来表示。属性是实体集中每个成员具有的描述性性质。将一个属性赋予某实体集表明数据库为实体集中的每个实体存储相似信息,但每个实体在自己的每个属性上都有各自的值。而每个属性都有一个可取值的集合,称为该属性的域,或者该属性的值集。因此,数据库包括一组实体集,每个实体集中包括一些相同类型的实体。
实体集是具有相同类型及共享相同性质(或属性)的实体集合。
实体通过一组属性来表示。属性是实体集中每个成员具有的描述性性质。将一个属性赋予某实体集表明数据库为实体集中的每个实体存储相似信息,但每个实体在自己的每个属性上都有各自的值。而每个属性都有一个可取值的集合,称为该属性的域,或者该属性的值集。因此,数据库包括一组实体集,每个实体集中包括一些相同类型的实体。
1.2 属性类型
E-R模型中的属性可以按照以下的属性类型进行划分:
1)简单属性和复合属性
例如,地址可以作为复合属性,因为从中可以更细分为国家、省、市、县、镇、村。可以看出,复合属性是有层次的。
1)简单属性和复合属性
例如,地址可以作为复合属性,因为从中可以更细分为国家、省、市、县、镇、村。可以看出,复合属性是有层次的。
2)单值属性和多值属性
3)派生属性
这类属性的值可以从其他的相关属性或实体派生出来。例如,一个的年龄可以由其出生年月派生而来。
1.3 联系集
3)派生属性
这类属性的值可以从其他的相关属性或实体派生出来。例如,一个的年龄可以由其出生年月派生而来。
1.3 联系集
联系是指多个实体间的相互关联。例如,定义一个客户与其贷款的联系。
联系集是同类型联系的集合。例如,联系集是n(n>2)个实体集上的数学关系。
联系集是同类型联系的集合。例如,联系集是n(n>2)个实体集上的数学关系。
二、约束
2.1 映射基数
映射基数,或基数比例,指明通过一个联系集能同时与另一实体相联系的实体数目。对于实体集A与B之间的二元联系集R来说,映射基数无非是这几种情况:一对一(A中的一个实体至多同B中的一个实体相联系,B中的一个实体也至多同A中的一个实体相联系);一对多(A中的一个实体可以同B中的任意数目的实体相联系,而B中的一个实体至多同A中的一个实体相联系);多对一(与前者相反);多对多。
2.2 参与约束
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,则称之为实体集E全部参与联系集R;如果只有部分,则称之为实体集E部分参与联系集R。举例:对于银行的客户而言,由于每个贷款必须通过某种联系与客户相关联,但并不是每个客户都有贷款。这就是部分参与,集贷款实体集部分参与联系集。
2.2 参与约束
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,则称之为实体集E全部参与联系集R;如果只有部分,则称之为实体集E部分参与联系集R。举例:对于银行的客户而言,由于每个贷款必须通过某种联系与客户相关联,但并不是每个客户都有贷款。这就是部分参与,集贷款实体集部分参与联系集。
三、码
码的概念可以使我们区别实体,也可以惟一地标识联系,并将联系相区分开来。
3.1 实体集
超码是一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中惟一地标识一个实体。例如,对于客户而言,其”客户编号“就是一个超码,该属性可以惟一区别一个实体(客户);而“客户编号”+“客户名称”的组合也是实体集的一个超码,但“客户名称”有可能出现重复,因此,“客户名称”不是超码。由此可以看出,超码中可能也包含了一些无关紧要的属性。须知,如果K是一个超码,那么K的任意超集也是超码。但这并没有多大探讨的意义,我们需要关注的是,如果K是一个超码,那么它的任意真子集都不能成为超码,这样的最小超码,称之为候选码。值得注意的是,几个不同的属性集都可以作为超码的情况是存在的,只要所给的属性足够严谨甚至苛刻。在这之中,我们使用主码(来源于候选码)来表示被开发者选用的超码。记住,码(主码、候选码、超码)是实体集的性质,而不是单个实体的性质。实体集中的任意两个实体都不允许同时在码属性上具有相同的值。
3.2 联系集
实体集的主码使得我们可以将实体集中不同的实体区别开来,而联系集的作用是如何选用主码来使得实体集A与实体集B达到某种合理的联系。
四 实体—联系图
组件 | 意义 | 组件 | 意义 |
矩形 | 表示实体集 | 双椭圆 | 表示多值属性 |
椭圆 | 表示属性 | 虚椭圆 | 表示派生属性 |
棱形 | 表示联系集 | 双线 | 表示一个实体全部参与到联系集中 |
线段 | 将属性连接到实体集或将实体集连接到联系集 | 双矩形 |
表示弱实体集
|
注:
线段:表示从实体集A到B是多对多或一对多的关系
箭头:表示从实体集A到B是一对一或多对一的关系
举例:
3.3 弱实体集
箭头:表示从实体集A到B是一对一或多对一的关系
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/44ea2f458c0c832c1ce5b5fdd888e055.png)
3.3 弱实体集
一个弱实体集的属性可能不足以形成主码,这样的实体集就称为弱实体集。与此相对,有主码的实体称为强实体集。例如实体集付款单payment,其具有属性payment-number、payment-date以及payment-amount。payment-number是从1开始的,虽然payment实体互不相同,但不同贷款的payment却可能具有相同的payment-number。因此,实体集payment-numner没有主码,是一个弱实体集。
弱实体集必须与另一个标识实体或属主实体集关联才有意义。每个弱实体必须和一个标识实体关联,即,弱实体集是存在依赖于标识实体集。我们称标识实体集拥有它所标识的弱实体集。将弱实体与其标识实体集相联的联系集称为标识性联系。标识性联系是从弱实体集到标识实体集的多对一联系,并且弱实体集全部参与联系。
虽然弱实体集没有主码,但仍需要使用某个属性来区分那些依赖于某个强实体集的弱实体集。弱实体集的分辨率是使得我们能进行这种区分的属性集合。对于下图中的payment弱实体而言,payment-number就是其分辨符。
弱实体集必须与另一个标识实体或属主实体集关联才有意义。每个弱实体必须和一个标识实体关联,即,弱实体集是存在依赖于标识实体集。我们称标识实体集拥有它所标识的弱实体集。将弱实体与其标识实体集相联的联系集称为标识性联系。标识性联系是从弱实体集到标识实体集的多对一联系,并且弱实体集全部参与联系。
虽然弱实体集没有主码,但仍需要使用某个属性来区分那些依赖于某个强实体集的弱实体集。弱实体集的分辨率是使得我们能进行这种区分的属性集合。对于下图中的payment弱实体而言,payment-number就是其分辨符。
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/00e2f59bef72942f5abd84f7b53942d0.png)
四、扩展的特殊化
4.1 特殊化
4.1 特殊化
实体集中有时包含一些子集,子集中的实体在某些方面区别于实体集中的其他实体。例如,实体集中某个实体子集可能具有不被该实体集中所有实体集中所有实体所共享的一些属性。须知,在实体集内部进行分组的过程称为特殊化。
4.2 一般化
对初始实体集求精产生一系列不同层次的实体子集代表自顶向下的设计过程,在这个自顶向下的设计过程中,区别被显示地表达出来。设计过程还可以是自底向上的,在这个过程中,根据共同具有的特征,多个实体集综合成一个较高的实体集。
举例:在E-R图中,特殊化通过标记为ISA的三角形构建来表示。标记ISA表示“is a”,例如,一个客户“is a”人。ISA联系也称超类-子类联系。高层实体和低层实体仍如同普通实体的表示法,即以包含了实体集名称的矩形表示。
4.2 一般化
对初始实体集求精产生一系列不同层次的实体子集代表自顶向下的设计过程,在这个自顶向下的设计过程中,区别被显示地表达出来。设计过程还可以是自底向上的,在这个过程中,根据共同具有的特征,多个实体集综合成一个较高的实体集。
举例:在E-R图中,特殊化通过标记为ISA的三角形构建来表示。标记ISA表示“is a”,例如,一个客户“is a”人。ISA联系也称超类-子类联系。高层实体和低层实体仍如同普通实体的表示法,即以包含了实体集名称的矩形表示。
![](https://i-blog.csdnimg.cn/blog_migrate/d16f78e1a5a7730d16bad7bf977ba13f.png)