ER图转换到关系模型
基本概念
- 对于每个非弱实体集,建立一个与之同名而且具有相同属性集的关系。该关系不包含任何联系的信息。
- E/R模型中的联系转换到关系模型中也用关系表示。对于给定的联系R,它所对应的关系具有以下属性:
- 联系R涉及到的每个实体集的键码属性或属性集。
- 联系R的属性。
如果一个实体集在联系R中出现多次,转换到关系时必须进行改名,以免出现重名属性。
E/R到关系的键码的推断
- 对于来自实体集的关系,它的键码就是该实体集的键码。
- 如果关系来自二元联系,有三种情形:
- 多对多联系 该联系相连的两个实体集的键码都是关系R 的键码属性。
- 从实体集E1到E2的多对一联系 实体集E1的键码是关系的键码,而E2的键码则不是该关系的键码。
- 一对一联系 联系的任何一个实体集的键码都是该关系的键码,即该关系有两个键码。
- 如果关系R来自多向联系,若多向联系R有一个箭头指向实体集E,则转换后的关系中,除了E的键码以外,其他实体集的键码的集合就构成了这个关系的键码。
E/R图转换成关系举例
Customers(ssNo,name,address,phone)
Accounts(number,type,balance)
Owns(ssNo,number)
E/R图到关系的转换举例
Movie(title,year,length,filmType)
Star(name,street,city)
Studio(name,address)
Owns(title,year,studioName)
Stars-in(title,year,starName)
多向联系的转换举例
Contracts(title,year,starName,studioOfStar,producingStudio)
E/R图转换成关系举例
下面的E/R图表示舰艇。如果两艘舰艇是根据同一个方案设计制造的,就称它们为“姐妹"舰。把这个E/R图转换为关系数据库模式。
E/R到关系的转换
- 对E/R图中的弱实体集,需要注意:
- 弱实体集W转换成关系,该关系既包含W的属性,也包含构成W的键码的其他实体集的键码属性。
- 与弱实体集W相连的非双菱形联系转换成关系,该关系必须包含W的所有键码属性。
- 与弱实体集W相连的双菱形联系,不需要转换成关系。此过程中,必须注意属性不能重名。
弱实体集的处理举例
从该图直观上可以得到三个关系,关系模式分别为:
Studios(name,addr)
Crews(number,studioName)
Unit-of(number,StudioName,name)
Unit-of关系可以省略。因此最后的转换结果是两个关系:
Studios(name,addr)
Crews(number,studioName)
弱实体集Contracts(签约)对应的关系Contracts的关系模式为:
Contracts(starName,studioName,title,year,salary)
Customers(ssNo,name,address,phone)
Flights(number,day,aircraft)
Bookings(ssNo,number,day,row,seat)
Entry3(name,addr)
Entry2(Entry3name,Entry2name,addr)
Entry1(Entry1name,number,entry2name1,entry3name1, entry2name2,entry3name2)
“属于”联系到关系的转换
E/R中isa联系转换到关系时
- 属于联系本身不需要建立相应的关系。
- 对于子类,除了包含自己的属性集外,还应包含超类的键码。
- 如果在元组中允许使用NULL值,就可以用单个关系来表示E/R图中的继承。
继承的转换举例
Movies(title,year,length,filmType)
Muder(title,year,weapon)
Cartoons(title,year)
Voices(title,year,name)
利用NULL合并
Movie(title,year,length, filmType,weapon)
直观上得到:
Depts(name,chair)
Courses(name,deptName,room)
LabCourses(name,deptName,room,allocation)
利用NULL合并Courses和LabCourses得到
Depts(name,chair)
Courses(name,deptName,room,allocation)