Data Base学习记录:ER图转换到关系模型

基本概念

  • 对于每个非弱实体集,建立一个与之同名而且具有相同属性集的关系。该关系不包含任何联系的信息。
  • E/R模型中的联系转换到关系模型中也用关系表示。对于给定的联系R,它所对应的关系具有以下属性:
    • 联系R涉及到的每个实体集的键码属性或属性集。
    • 联系R的属性。
      如果一个实体集在联系R中出现多次,转换到关系时必须进行改名,以免出现重名属性。

E/R到关系的键码的推断

  • 对于来自实体集的关系,它的键码就是该实体集的键码。
  • 如果关系来自二元联系,有三种情形:
    • 多对多联系 该联系相连的两个实体集的键码都是关系R 的键码属性。
    • 从实体集E1到E2的多对一联系 实体集E1的键码是关系的键码,而E2的键码则不是该关系的键码。
    • 一对一联系 联系的任何一个实体集的键码都是该关系的键码,即该关系有两个键码。
  • 如果关系R来自多向联系,若多向联系R有一个箭头指向实体集E,则转换后的关系中,除了E的键码以外,其他实体集的键码的集合就构成了这个关系的键码。

E/R图转换成关系举例

ER图转换成关系

Customers(ssNo,name,address,phone) 
Accounts(number,type,balance) 
Owns(ssNo,number)

E/R图到关系的转换举例

ER图到关系

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图转换为关系数据库模式。
ER图转换成关系举例

E/R到关系的转换

  • 对E/R图中的弱实体集,需要注意:
    • 弱实体集W转换成关系,该关系既包含W的属性,也包含构成W的键码的其他实体集的键码属性。
    • 与弱实体集W相连的非双菱形联系转换成关系,该关系必须包含W的所有键码属性。
    • 与弱实体集W相连的双菱形联系,不需要转换成关系。此过程中,必须注意属性不能重名。

弱实体集的处理举例

举例1
从该图直观上可以得到三个关系,关系模式分别为:

Studios(name,addr)
Crews(number,studioName)
Unit-of(number,StudioName,name)

Unit-of关系可以省略。因此最后的转换结果是两个关系:

Studios(name,addr)
Crews(number,studioName)

举例2
弱实体集Contracts(签约)对应的关系Contracts的关系模式为:

Contracts(starName,studioName,title,year,salary)

弱实体集处理

Customers(ssNo,name,address,phone) 
Flights(number,day,aircraft)
Bookings(ssNo,number,day,row,seat)

弱实体集处理2

扫描二维码关注公众号,回复: 13143645 查看本文章
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)

猜你喜欢

转载自blog.csdn.net/m0_49564079/article/details/115097413