时间:2021-07-01 10:21:17 帮助过:9人阅读
1. 设计阶段
·最初阶段:刻画未来数据库用户的数据需求,产品为用户需求规格说明;
·概念设计阶段(conceptual-design phase):(关注描述抽象数据及其联系,通常使用实体-联系模型)
概念模式:定义数据库中表示的实体、实体的属性、实体之间的联系以及实体和联系上的约束。
概念设计阶段需要完成
1. 选择数据模型,并采用所选数据模型的概念将需求转化为数据库的概念模式
2. 指明企业的功能需求,完善概念模式:在功能需求规格说明(specification of functional requirement)中描述在数据上进行的各类操作/事务。
设计者检查概念模式确保功能需求满足、所有数据需求都满足且互相不冲突;
·逻辑设计阶段(logical-design phase):将(通常以实体-联系模型定义)高层概念模式映射到数据库系统的(通常为关系数据模型的)实现数据模型上。
·物理设计阶段(physical-design phase):指明数据库的物理特征(包括文件组织格式和索引结构的选择)。
2. 设计选择
设计数据库模式时必须避免两个主要缺陷:
·冗余:重复存储信息;
·不完整
实体-联系模型
数据库的设计主要涉及数据库模式的设计。E-R数据模型是一个广泛用于数据库设计的数据模型,提供了一个方便的图形化表示方法以查看数据、联系和约束。
实体-联系(entity-relationship, E-R)模型采用三个基本概念:实体集、联系集、属性。
1. 实体集
数据库包括一组实体集,每个实体集包括任意数量的相同类型的实体。
实体是在现实世界中存在并且区别于其他对象的对象。我们通过把每个实体痛描述该实体的一组属性相关联来表示区别。相同类型的实体的集合为实体集。
实体(entity):现实世界中可区别于所有其他对象的一个”事物“或”对象“。每个实体有一组性质,其中一些性质的值可以唯一地标识一个实体。实体可以是实在或抽象的。
实体集(entity set):相同类型(具有相同性质/属性)的一个实体集合。(e.g. 一所给定大学的所有教师的集合定义为实体集instructor)
实体集不必互不相交。(e.g. 一个person实体可以是instructor实体、或student实体、或既是instructor实体又是student实体、或都不是。)
外延(extension):实体集的外延指术语实体集的实体的实际集合。(e.g. 大学中实际教师的集合构成了实体集instructor的外延)
属性(attribute):实体集中每个成员所拥有的描述性性质。
实体通过一组属性来表示;
为某实体集指定一个属性表明数据库为该实体集中每个实体存储相似的信息,但每个实体在每个属性上都有各自的值(value)。
2. 联系集
联系是多个实体间的关联。相同类型的联系的集合为联系集。
联系(relationship):多个实体间的相互关联。
联系集(relationship set):相同类型联系的集合。
联系集是n≥2个(可能相同的)实体集上的数学关系。联系集R是
{ (e1, e2, …, en) | e1∈E1, e2∈E2, …, en∈En } 的一个子集,其中E1, E2, …, En为实体集,(e1, e2, …, en)为一个联系。
参与:实体集之间的关联。(e.g. 实体集E1, E2, …, En参与(participate)联系集R。)
相同的实体集可能会参与到多于一个联系集中。
二元(binary)联系集:设计两个实体集的联系集。数据库系统中的大部分联系集都是二元的,有时联系集会涉及多于两个实体集。
度(degree):参与联系集的实体集的数目称为联系集的度。(e.g. 二元联系集的度为2,3元联系集的度为3。)
角色(role):实体在联系中扮演的功能称为实体的角色。(隐含,一般并不指定。)
在自环(recursive,i.e. 同样的实体集以不同角色参与一个联系集多于一次)联系集中,有必要使用显式的角色名指明实体是如何参与联系实例的。
联系也可具有描述性属性(descriptive attribute)。(e.g. 实体集instructor和student之间的联系集advisor,可将属性date作为描述性属性与该联系关联。)
联系实例(relationship instance):E-R模式中的一个联系实例表示所在建模的现实世界企业中命名实体的一个关联。(e.g. 一个教师ID为45565的instructor实体Katz和一个学生ID为12345的student实体Shankar参与到advisor的一个联系实例中)
给定的联系集中的一个联系实例必须是由其参与实体唯一标识的(不必使用描述属性)。
3. 属性
域(domain)/值集(value set):每个属性都有的一个可取值的集合。
实体集的属性是将实体集映射到域的函数,每个实体可以用一组(属性,数据值)对来表示。
E-R模型中的属性可进行如下划分:
·简单(simple)属性/复合(composite)属性:
简单属性不能划分为更小的部分;
复合属性可以划分为更小的部分(其他属性)。(e.g. 属性name可设计为一个包括first_name、middle_initial和last_name的复合属性) 复合属性可以有层次,子属性可进一步划分。
·单值(single-alued)属性/多值(mutivalued)属性:
单值属性对一个特定的实体都只有单独的一个值;
多值属性对一个特定的实体有对应的一组值。用花括号表示属性是多值的。(e.g. instructor实体集可有{ phone_number }属性,每个教师可以有0到多个电话号码。) 可对多只属性的取值数目设置上、下界。
·派生(derived)属性:可从别的相关属性或实体派生出来。(e.g. instructor实体集可有属性student_advised表示一个教师指导了多少个学生,可通过统计与一个教师相关联的所有student实体的数目来得到该属性的值) 派生属性的值不进行存储,而是在需要时计算出来。
基属性:存储的属性
约束
1. 映射基数
映射基数(mapping cardinality)/基数比率:表示一个实体通过一个联系集能关联的实体的个数。(可用于描述二元联系集和涉及多于两个实体集的联系集)
对于实体A和B之间的二元联系集R,映射基数必然是以下情况之一:
·一对一(one-to-one):A中的一个实体至多与B中的一个实体相关联,B中的一个实体也至多与A中的一个实体相关联;
·一对多(one-to-many):A中的一个实体可与B中任意数目(0到多个)实体相关联,B中的一个实体至多与A中的一个实体相关联;
·多对一(many-to-one):A中的一个实体至多与B中的一个实体相关联,B中的一个实体可与A中任意数目实体相关联;
·多对多(many-to-many):A中的一个实体可与B中任意数目实体相关联,B中的一个实体可与A中任意数目实体相关联。
2. 参与约束
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系集R中的参与称为全部的(total);
如果实体集E中只有部分实体参与到联系集R的联系中,实体集E到联系集R的参与称为部分的(partial)。
3. 码
一个实体的属性值必须可以唯一标识该实体。(在一个实体集中不允许两个实体对于所有属性都具有完全相同的值)
码:实体的码是一个足以区分每个实体的属性集。(关系模式汇总的超码、候选码、主码同样适用于实体集)
术语超码(superkey)、候选码(candidate key)以及主码(primary key)同适用于关系模式一样适用于实体集合联系集。
码也可用于唯一地标识联系。
设一个涉及实体集E1, E2, …, En的联系集R,primary-key(Ei)代表构成实体集Ei的主码的属性集合(假设实体集中所有主码属性名互不相同)。
a. 如果R没有属性与之相关联,则属性集合
primary-key(E1)∪primary-key(E1)∪…∪primary-key(En)
描述了集合R中的一个联系;
b. 如果R有属性a1, a2, …, am与之相关联,则属性集合
primary-key(E1)∪primary-key(E1)∪…∪primary-key(En)∪{ a1, a2, …, am }
描述了集合R中的一个联系。
在以上两种情况中,属性集合
primary-key(E1)∪primary-key(E1)∪…∪primary-key(En)
构成了联系集的一个超码。(如果实体集中主码属性名有重名情况可重命名构成唯一名称以区分。)
联系集的主码结构依赖于联系集的映射基数。
e.g. 考虑实体集instrutor、student和具有属性date的联系集advisor。
a. 假设联系集是多对多的,则advisor的主码由instructor和student的主码的并集组成;
b. 如果联系是从student到instructor多对一的,则student的主码就是advisor的主码;
c. 如果联系是从instructor到student多对一的,则instructor的主码就是advisor的主码;
d. 如果联系集是一对一的,则两个候选码中的任意一个可用作主码。
4. 从实体集中删除冗余属性
建立实体间的联系集,可能会导致不同实体集中的属性冗余,则需要将冗余的属性从原始实体集中删除,用E-R设计中的联系代替冗余的属性。
e.g.
关系模式设计:
实体集instructor (ID, name, dept_name, salary);
实体集department (dept_name, building, budget);
分析:
属性dept_name在实体集instructor中冗余,移除。
实体-联系设计:
实体集instructor (ID, name, salary);
实体集department (dept_name, building, budget);
联系集inst_dept关联instructor和department。
类似,实体集student中不需要dept_name属性,联系集student_dept关联student和department。
e.g.
关系模式设计:
实体集section (course_id, sec_id, semester, year, building, room_number, time_slot_id);
实体集time_slot (time_slot_id, { (day, start_time, end_time) } );
实体集classroom (building, room_number, capacity);
分析:
属性time_slot_id在实体集section中冗余,移除。
属性{ building, room_number}在实体集section中冗余,移除。
实体-联系设计:
实体集section (course_id, sec_id, semester, year);
实体集time_slot (time_slot_id, { (day, start_time, end_time) } );
实体集classroom (building, room_number, capacity);
联系集sec_time_slot关联section和time_slot;
联系集sec_class关联section和class。
实体-联系图
E-R模型主要用于数据库设计过程,它的发展是为了帮助数据库设计,这是通过允许定义企业模式(enterprise schema)实现的。这种企业模式代表数据库的全局逻辑结构,该全局结构可用E-R图(E-R diagram)图形化地表示。
E-R图(E-Rdiagram)可图形化表示数据库的全局逻辑结构。
1. 基本结构
E-R图的主要构件:
·分割为两部分的矩形:代表实体集。第一部分(有阴影)包含实体集的名字,第二部分包含实体集中所有属性的名字;
·菱形:代表联系集;
·未分割的矩形:代表联系集的属性。构成主码的属性以下划线标明;
·线段:将实体集连接到联系集;
·虚线:将联系集属性连接到联系集;
·双线:显示实体在联系集中的参与度;
·双菱形:代表连接到弱实体集的标志性联系集。
e.g.
2. 映射基数
二元联系集可以是一对一、一对多、多对一或多对多的,联系集和实体集之间画箭头或线段以区分这些类型。
·一对一:当实体集A中的一个实体最多只能与实体集B中的一个实体关联,并且实体集B中的一个实体也最多只能与实体集A中的一个实体关联时,从联系集向实体集A和B各画一条箭头;
·一对多:当实体集A中的一个实体可与实体集B中任意数目的实体关联,但实体集B中的一个实体最多只能与实体集A中的一个实体关联时,从联系集向实体集A画一条箭头,向实体集B画一条线段;
·多对一:当实体集A中的一个实体最多只能与实体集B中的一个实体关联,但实体集B中的一个实体可与实体集A中任意数目的实体关联时,从联系集向实体集A画一条线段,向实体集B画一条箭头;
·多对多:当实体集A中的一个实体可与实体集B中任意数目的实体关联,实体集B中的一个实体也可与实体集A中任意数目的实体关联时,从联系集向实体集A和B各画一条线段。
e.g.
(一对多:一名教师可以指导多名学生,但一名学生可以至多有一位导师。)
E-R图提供描述“每个实体参与联系集中联系的次数约束”的方法:
实体集和二元联系集之间的一条边可以有一个关联的最大和最小的映射基数,用l..h表示。其中l为最小映射基数,h为最大映射基数。
l=1时表示这个实体集在该联系集中全部参与(每个实体在联系集中的至少一个联系中出现);
h=1时表示这个实体参与至多一个联系;
最大值为*,表示没有限制。
e.g. 约束每个学生必须有且仅有一个导师,教师可以有零个或多个学生。
(从instructor到student的一对多联系,student在advisor联系中的参与是全部的。)
另一种画法:在基数约束的位置画一条从student到advisor的双线,以及一条从advisor到instructor的箭头。
3. 复合属性、多值属性、派生属性的表示
e.g.
实体集instructor包含:
复合属性name,由子属性first_name、middle_initial和lastname组成;
复合属性address,由子属性street、city、state和zipcode组成,其中street也是符合属性,其子属性为street_number、street_name和apartment_number;
多值属性phone_number,由{ phone_number }表示;
简单属性date_of_birth;
派生属性age,由{ aget( ) }表示。
4. 角色
通过在菱形和矩形之间的连线上进行标注来表示角色。
e.g. course实体集合prereq联系集之间的角色标识course_id和prereq_id
5. 非二元联系集
e.g. 三个实体集instructor、student和project通过联系集proj_guide相关联。
在非二元联系集中可表示某些类型的多对一联系。(e.g. 假设一个student在每个项目上最多只能有一位导师,可用从project_guide的边指向instructor的箭头表示。)
在一个非二元联系集外包含两个或更多箭头的E-R图可有两种解释:
(假设实体集A1, A2, …, An之间有联系集R,并且只有指向实体集Ai+1, Ai+2, …, An的边是箭头。)
a. 来自A1, A2, …, Ai的实体的一个特定组合可以与至多一个来自Ai+1, Ai+2, …, An的实体组合相关联。因此联系R的主码可用A1, A2, …, Ai的主码的并集来构造。
b. 对于每个实体集AK, i<k≤n, 来自其他实体集的实体的每个组合可以和来自AK的至多一个实体相关联。因此对于i<k≤n,每个集合{ A1, A2, …, Ak-1, Ak+1, …, An }构成一个候选码。
因为以上两种解释在不同的书/系统中使用,为避免混淆,我们规定在一个非二元联系集外只允许有至多一个箭头。
6. 弱实体集
弱实体集(weak entity set):不具有足够的属性构成主码的实体集。
有主码的实体集则称作强实体集(strong entity set)。
e.g.
情况:
实体集section由course_id, semester, year, sec_id唯一标识;
实体集course 由course_id唯一标识;
(i.e. 不同course的section可能会有相同的sec_id、year和semester。)
联系集sec_course关联section和course。
分析:
因为section已有属性course_id,sec_course中信息冗余。
如果删除联系sec_course会使section和course的联系隐含于一个属性中,不合适。
如果删除section中的属性course_id,则剩下的属性不足以唯一标识一个指定的section实体;
处理方法:
删除section中的属性course_id,标志性联系sec_course关联弱实体集section与其标识实体集course,
给唯一标志的section实体提供额外信息course_id。
标识实体集(identifying entity set)/属主实体集(owner entity set):一个弱实体集必须与一个标识实体集关联才有意义。每个弱实体集必须和一个标识实体关联。
弱实体集存在依赖(existence dependent)于标识实体集,标识实体集拥有(own)它所标识的弱实体集。
标志性联系(identifying relationship):将弱实体集与其标识实体集相联的联系。
标志性联系是从弱实体集到标识实体集多对一的,弱实体集在联系中参与是全部的。
标志性实体集不应该有任何描述性属性。
分辨符(discriminator):弱实体集的分辨符,也成为弱实体集的部分码,是用于区分依赖于特定强实体集的弱实体集中的实体的属性集合。
e.g. 弱实体集section的分辨符{ sec_id, year, semester },对每个course来说,该属性集唯一标识了该course对应的一个section。(用于区分同一course的不同section实体)
弱实体集的主码由标识实体集的主码加该弱实体集的分辨符构成。
e.g. 弱实体集section的主码{ course_id, sec_id, year, semester }由标识实体集course的主码course_id加其分辨符{ course_id, sec_id, year, semester }构成。
E-R图中,弱实体集以矩形表示(类似强实体集),其分辨符以虚下划线标明,关联弱实体集和标识性强实体集的联系集以双菱形表示。双线表示参与是全部的。
e.g. 弱实体集section通过联系集sec_course依赖于强实体集course,弱实体集section在联系sec_course中的参与是全部的,每次section与单门course相关联。
弱实体集可以参与标识性联系以外的其他联系;
弱实体集可以作为属主与另一个弱实体集参与一个标识性联系;
一个弱实体集可能与不止一个标识实体集关联(i.e. 一个特定的弱实体将被一个实体的组合标识,其中每个标识实体集有一个实体在该组合中,弱实体集的主码则由标识实体集的主码的并集加弱实体集的分辨符组成)。
如果弱实体集只参与标识性联系,并且属性不多,则建模时适合将其表示为属主实体集的一个多值复合属性;
如果若实体集参与到标识性联系以外的联系中,或属性较多,则建模时适合将其表示为弱实体集。
E-R图转换为关系模式
对于每个实体集/联系集,都有唯一的关系模式与之对应,关系模式名为相应的实体集或联系集的名称。所以,一个符合E-R数据库模式的数据库可表示为一些关系模式的集合。
1. 具有简单属性的强实体集的表示
设E为只具有n个简单描述性属性的强实体集,则用具有n个不同属性的关系模式E表示。
关系中的每个元组都对应于实体集中的一个特定实体。
如果实体集为强实体集,则其转换得到的关系模式的主码就是强实体集的主码。
2. 具有复杂属性的强实体集的表示
如果强实体集具有复合属性,关系模式中不为复合属性自身创建一个单独的属性,而为复合属性的每个子属性创建一个单独的属性。
e.g.
对于复合属性name,模式包括first_name, middle_initial, lastname,没有单独的属性表示name;
对于复合属性address,模式包括street, city, state, zip_code,因为street是一个复合属性,将其替换为子属性street_number, street_name, apt_number。
多值属性不能直接映射到相应关系模式的属性上,需要为多值属性创建新的关系模式。
对于实体集的一个多值属性M,构建关系模式R,该模式包含一个对应于M的属性A以及对应于M所在的实体集或联系集的主码的属性。
R的主码由其所有属性组成。
R上外码约束:由M所在实体集的主码所生成的属性参照M所在实体集所生成关系。
e.g. 实体集Instructor主码为ID,包含多值属性phone_number。为phone_number构建关系模式:
instructor_phone(ID, phone_number)。Instructor_phone关系上有外码约束:属性ID参照instructor关系。
特殊情况:实体集只有两个属性,一个主码B和一个多值属性M。则该实体集的关系模式只包含一个属性(主码属性B)。也可删掉该关系,保留具有属性B和对应M的属性A的关系模式。)
e.g. 实体集time_slot含主码time_slot_id和多值复合属性{day, start_time, end_time},可生成关系模式time_slo t(time_slot_id, day, start_time, end_time)。
派生属性不在关系模式中显示表示,可在类似对象-关系数据模型的其他数据模型中表示为方法。
3. 弱实体集的表示
设A为具有属性a1, a2, …, am的弱实体集,B为A所依赖的强实体集,B的主码包括属性b1, b2, …, bn。则:关系模式A的每个属性对应集合{ a1, a2, …, am }∪{ b1, b2, …, bn }的一个成员;
该模式的主码由B的主码与A的分辨符组成;
关系A上建立外码约束:属性b1, b2, …, bn参照关系B的主码。(保证弱实体的每隔元组都有一个表示相应强实体的元组与之对应)。
可添加外码约束上的级联删除规范,如果弱实体集A依赖的强实体集B中的一个实体被删除,那么所有与它关联的A实体也被删除。
4. 联系集的表示
设R为联系集,a1, a2, …, am为所有参与R的实体集的主码的并集构成的属性集合,b1, b2, …, bn为R的描述性属性。则关系模式R的每个属性对应集合{ a1, a2, …, am }∪{ b1, b2, …, bn }的一个成员。
二元联系集关系模式主码的选择:
·多对多:参与实体集的主码属性的并集;
·一对一:任意一个实体集的主码;
·多对一或一对多:联系集中“多”的那一方实体集的主码。
n元联系集关系模式主码的选择(联系集外至多允许一个箭头):
·边上没有箭头:所有参与实体集的主码属性的并集;
·边上有一个箭头:不在“箭头”侧的实体集的主码属性;
对于每个与联系集R相关的实体集Ei,建立一个关系模式模式R上的外码约束:R中来自Ei主码属性的那些属性参照关系模式Ei的主码。
模式的冗余
连接弱实体集与其所依赖的强实体集的联系集比较特殊,一般情况下其关系模式冗余,在基于E-R图的关系数据库设计中不必给出。
模式的合并
设从实体集A到实体集B的一个多对一联系集AB,构建三个关系模式A、B、AB。如果A在该联系中的参与是全部的(i.e. 实体集A中的每个实体都参与到联系AB中),则可将模式A和模式AB合并为单个包含两个模式所有属性并集的模式。合并后模式的主码为被合并的那个实体集的主码。
e.g.
从instructor到department的联系集inst_dept。
instructor { ID, name, salary };
department { dept_name, building, budget };
inst_dept {ID, dept_name };
模式instructor可与模式Inst_dept合并,得到模式instructor{ ID, name, dept_name, salary }。
即使实体集A在联系中的参与是部分的,也可使用控制来进行模式的合并。(e.g. 例中如果instructor在inst_dept部分参与,可为没有相关联的department的instructor在属性dept_name中存放空值。)
合并后,舍弃联系集上参照实体集A的外码约束,将参照实体集B的外码约束加到合并后的关系模式中。(e.g. 例中将原inst_dept上dept_name属性参照department的外码约束加到合并后的insructor关系中。)
如果联系是一对一的,联系集的关系模式可以跟参与联系的任何一个实体集的关系模式合并。
实体-联系设计问题
1. 用实体集还是用属性
e.g. 给instructor增加phone的两种方法
如果希望保存电话的额外信息(位置、类型、共享改电话的所有的人等),将电话看做实体的建模方式根据有通用性。
常见错误1:用一个实体集的主码作为另一个实体集的属性,而不是用联系。×
应当明确表示出实体集之间的关系,而不是将关系隐含在属性中。
e.g.
将student的ID作为instructor的属性(即使一对一)×
将advisor联系代表student和instructor之间的关联。√
常见错误2: 将相关实体集的主码属性作为联系集的属性。×
因为在联系集中已经隐含了这些主码属性。
注意:当从E-R模式创建关系模式时,这些属性可能会出现在联系集的关系模式中,但不应该出现在E-R模式的联系集中。
e.g.
将student的ID和instructor的ID作为advisor联系的属性。 ×
2. 用实体集还是联系集
原则:当描述发生在实体间的行为时采用联系集。
e.g. 用实体集registration代表课程-注册记录,替代student和section之间的联系集takes。
一般使用联系集takes更紧凑可取。如果课程-注册记录与其他信息相关联则适合作为实体集。
3. 二元还是n元联系集
一个n元(n>2)的联系集总能用一组不同的二元联系集替代。
E.g. 用实体集E和联系集RA、RB、RC替代三元联系集R。【可推广到n元联系集】
如果联系集R有属性,则将这些属性赋给实体集E,并为E创建一个特殊的标识属性(用于区分E中的各个实体)。
针对联系集R中的每个联系(ai, bi, ci)在实体集E中创建一个新的实体ei。
在三个联系集中插入联系:在RA中插入(ei, ai);在RB中插入(ei, bi);在RC中插入(ei, ci)。
在概念上可以限制E-R模型只包含二元联系集,但这种做法也存在一些劣势:
·对为表示联系集而创建的实体集,必须创建一个标志属性,增加了设计的复杂程度和对存储空间的需求;
·n元联系集可以更清晰地表示几个实体集参与单个联系集;
·有些三元联系集上的约束不能转变为二元联系上的约束。
4. 联系属性的布局
一个联系的映射基数的比率会影响联系属性的布局:
·一对多的联系集的属性可以从联系集中移除,放到参与联系的“多”方的实体集中;
·一对一的联系集的属性可以从联系集中移除,放到任意一个参与联系的实体集中。
e.g. 设从实体集instructor到实体集student一对多的联系集advisor,其属性date可放在student实体集中(与原先放在advisor中具有相同含义)。
设计时将描述性属性作为联系集的属性还是实体集的属性,取决于被建模企业的特点。(e.g. 例中也可选择保留date作为advisor的属性以显式表明指导关系的日期。)
(多对多)当一个属性是由参与的实体集联合确定,而不是由单独某个实体集确定时,该属性就必须放在多对多联系集中。
扩展的E-R特性
特化和概化定义了一个高层实体集和一个或多个低层实体集之间的包含关系。特化是取出高层实体集的一个子集来形成一个低层实体集。概化是用两个或多个不想交的(低层)实体集的并集形成一个高层实体集。高层实体集的属性被低层实体集继承。
1. 特化
特化(specialization):在实体集内部进行分组的过程。
e.g. 实体集person可进一步特化为employee类和student类,特化实体集用一个包括实体集person的所有属性和可能的附加属性的属性集来描述。(employee实体可进一步用属性salary描述;student实体可进一步用属性tot_cred描述。)
一个实体集可以根据多个可区分的特征进行特化。当一个实体集形成了多于一种特化时,某个特定实体集可能同时属于多个特化实体集。
e.g. 实体集employee可根据从事工作特化,也可根于工作任期特化,因此一个特定的employee可以既是temporary_employee又是secretary_employee。
E-R图中用从特化实体指向另一方实体的空心箭头表示特化,称为ISA关系,代表”is a”。(e.g. instructor “ is a” employee.)
重叠特化(overlapping specialization):一个实体集可能属于多个特化实体集。对于一个重叠特化(e.g. student和employee作为person的特化),分开使用两个箭头。
不相交特化(disjoint specialization):一个实体集必须属于至多一个特化实体集,对于一个不相交特化(e.g. instructor和secretary作为employee的特化),使用一个箭头。
特化关系可能形成超类-子类(superclass-subclass)联系。
高层和低层实体集按普通实体集表示(包含实体集名称的矩形)。
2. 概化
概化(generalization):高层实体集与一个或多个低层实体集间的包含关系。低层实体集间存在共性(包含相同的属性),这些属性被赋予相同的名字并由高层实体集表示。
高层与低层实体集也分别称作超类(superclass)和子类(subclass)。
概化不是特化的逆过程。特化和概化的区别在于出发点和总体目标:
特化:从单一实体集出发,通过创建不同的低层实体集来强调同一实体集中不同实体间的差异。低层实体集可以有不适用于高层实体集中所有实体的属性,也可以参与到不适用于高层实体集中所有实体集的联系中。
概化:基于“一定数量的实体集共享一些共同特征(用相同的属性描述,且参与到相同的联系集中)”。在这些实体集共性的基础上将它们总和成一个高层实体集,用于强调低层实体集间的相似性并隐藏差异。
(概化使共享属性不重复出现,表达简洁。)
3. 属性继承
属性继承(attribute inheritance):由特化和概化所产生的高层实体和低层实体的一个重要特性,高层实体集的属性被低层实体集继承(inherit)。
属性继承适用于所有低层实体集。
e.g.
实体集person用属性ID、name和address描述;
实体集student继承person的属性,用属性ID、name和adress,以及附加属性tot_cred描述;
实体集employee继承person的属性,用属性ID、name和address,以及附加属性salary描述;
employee的子类instructor和secretary从person继承属性ID、name和address,又从employee继承属性salary。
参与继承:低层实体集(子类)也同时继承地参与其高层实体集(超类)所参与的联系集。参与继承也适用于所有低层实体集。
e.g.
实体集person和department参与person_dept联系集;
person的子类student、employee、instructor和secretary也都和department隐式地参与到person_dept联系中。
对于E-R图的一个给定部分(无论是通过特化还是概化得到的),都具有以下性质: