E-R模型:一个数据库可以被建模实体集,和实体集之间的关系。
实体与实体集:实体是现实世界中可区别于所有其他对象的一个“事物”或“对象。而实体集就是相同类型即具有相同性质(或属性)的一个实体集合。实体通过一组属性表示。属性是实体集中每个成员所拥有的描述性性质。
联系与联系集:联系是指多个实体间的相互关联。联系集是相同类型联系的集合。正规的说,联系集是n≥2个实体集上的数学关系。
映射基数:
对于实体集A和B之间的二元联系R来说,映射基数必然是一下情况之一:
- 一对一:A中的一个实体至多与B中的一个实体相关联,并且B中的一个实体至多与A中的一个实体相关联。
- 一对多:A中的一个实体可以与B中的任意多个实体相关联,但B中的一个实体至多与A中的一个实体相关联。
- 多对一:A中的一个实体至多与B中的一个实体相关联,但B中的一个实体可以与A中的任意多个实体相关联。
- 多对对:A中的一个实体可以与B中的任意多个实体相关联,并且B中的一个实体也可以与A中的任意多个实体相关联。
参与约束:如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系R中的参与称为全部的。如果E中只有部分实体参与到R的联系中,实体集E到联系集R的参与称为部分的。
码:从概念上来说,各个实体是互异的;但从数据库的观点来看,它们的区别必须通过其他属性来表明。也就是说一个实体集中不允许两个实体对于所有属性都具有完全相同的值。
实体-联系图:
基本结构:
分成两部分的矩形,代表实体集,第一部分包含实体集的名字,第二部分包含实体集中所有属性的名字。构成主码的属性以下划线标明。
菱形代表联系集。
未分割的矩形,代表联系集的属性。
线段:将实体集联系到联系集。
虚线:将联系集的属性连接到联系集。
双线:显示实体集在联系中的参与度,双线表示全参与。
双菱形:代表连接到弱实体集的标志性联系集。
映射基数:
用箭头表示:用箭头连接将实体集链接到联系集,表示这个实体集在这个联系中是 “一” 的映射关系,用线段将实体集连接到联系集,表示这个实体集在这个联系中是 “多” 的映射关系。
用l..h形式表示:其中l表示最小映射基数,而h表示最大映射基数。例如,最小值为1表示这个实体集中的在该联系集中全部参与,即实体集中的每个实体在联系集中的至少一个联系中出现。最大值为1表示这个实体参与至多一个联系。
弱实体集:
弱实体集,即没有足够的属性构成主码的实体集称作弱实体集。有主码的实体集称作强实体集。
弱实体集必须与另一个称作标识或属主实体集的实体集关联才有意义。每一个弱实体必须和一个标识实体关联;也就是说,弱实体集的存在依赖于标识实体集。我们称标识实体集拥有它所标识的弱实体集。将弱实体集与其标识实体集相联的联系称为标识性联系。
在E-R图中,弱实体集与强实体集都是用矩形表示,但又下面两点区别:
- 弱实体集的分辨符用虚下划线表示,而不是实线。
- 关联弱实体集和标识性强实体集的联系集用双菱形表示。
转换为关系模式:
强实体集的表示:对于从强实体集转而来的模式,强实体集的主码就是生成的模式的主码,如果这个强实体集有n个不同的属性,那么我们就用具有n个不同属性的模式E来表示这个实体集,该模式的关系中的每个元组同实体集E的一个实体相对应。另外,当这个强实体集具有复合属性时,我们通过为每个子属性创建一个单独的属性来处理复合属性;我们并不为复合属性自身创建一个单独的属性。
弱实体集的表示:对于从弱实体集转换而来的模式,该模式的主码由其所依赖的强实体集的主码与弱实体集的分辨符组合而成。
设A是具有属性a1, a2, ..., am的弱实体集,设B是A所依赖的强实体集,而B的主码包括属性b1, b2, ..., bn。则A的关系模式的每个属性对应以下集合中的一个成员。
{a1, a2, ..., am}∪{b1, b2, ...,bn}
联系集的表示:对于联系集,其模式的属性除了联系集本身具有的属性外,还应具有从参与联系的实体集中的主码。关于主码的选择有以下规则:
- 对于多对多的二元联系集,参与联系的实体集的主码属性的并集称为主码。
- 对于一对一的二元联系集,任何一个参与联系的实体集的主码都可以选作主码,而且这个选择是任意的。
- 对于一对多或者多对一的二元联系集,联系集中“多”的那一方的实体集的主码构成联系集模式的主码。