ER图转为关系模式(超详细,超简单)

相关系列:
ER图转为关系模式
无损分解和保持依赖
3NF分解与BCNF分解
正则覆盖与候选码
如何设计ER图(弱实体集)
如何设计ER图(映射基数)


1.简单属性的强实体集

在这里插入图片描述

  • 人(身份证号,姓名,性别)

2.派生属性不出现

在这里插入图片描述
由身份证号可以推算出年龄,所以年龄是派生属性。

  • 人(身份证号,姓名)

3.复合属性由子属性代替

在这里插入图片描述

  • 人(身份证号,姓,名)

3.多值属性也构建

在这里插入图片描述
对于一个多值属性M,构建关系模式R,该模式包含一个对应于M的属性A,以及对应于M所在的实体集或联系集的主码的属性。R的主码由R的所有属性构成。

  • 人(身份证号,姓名);
  • 人-电话(身份证号电话号码

如果一个实体集只有一个主码和一个多值属性,我们只转换为一个关系模式。
在这里插入图片描述

  • 人(身份证号,电话号码

4.弱实体集

弱实体集的主码由自身的分辨符和所依赖的强实体集的主码构成。
其属性由自身的属性和所依赖的强实体集的主码构成。
在这里插入图片描述

  • section(course_id,sec_id,semester,year)(所列属性均为主码)

5.联系集

属性由自身属性和所有参与此联系的所有实体集的主码构成。
联系集的主码:

  1. 二元
    1. 一对一:两个实体集中的主码任意选择一个
    2. 一对多或者多对一:选择多的那一方
    3. 多对多:两个实体集的主码的并集
  2. n元
    1. 对于边上没有箭头的n元联系集:所有参与实体集的主码属性构成的并集
    2. 边上有一个箭头的n元联系集:不在箭头侧的实体集的主码属性构成的并集

去掉冗余

如果我们将所有的联系集全部写出来,那么有的会存在冗余。
消除冗余

  1. 一般情况下,连接弱实体集与其所依赖的强实体集的联系集的模式是冗余的,而且在基于E-R图的关系数据库设计中不必给出。即标识性联系是冗余的
  2. 多对一的联系集AB可以和全部参与的一方A合并。那么A将包含A和AB属性的并集。

在这里插入图片描述

inst_dept可以和instructor合并,最终是instructor(ID,dept_name,name,salary)
主键:ID
外键:dept_name
这样就消去了联系集inst_dept

.
3. 在一对一的联系的情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并。


ER图转为关系模式的例子

在这里插入图片描述

classroom(building, room_number, capacity)

主键:building, room_number

 

department(dept_name, building, budget)

主键:dept_name

 

course(course_id, title, dept_name, credits)

主键:course_id

外键:dept_name

 

instructor( ID , name, dept_name, salary)

主键:ID

外键:dept_name

 

section(course_id, sec_id, semester, year, building, room_number, time_slot_id)

主键:course_id, sec_id, semester, year

外键1:course_id

外键2:building, room_number
section是弱实体集,依赖强实体集course。这样确定了主键
同时又参与两个 一对多关系模型(classroom,time_slot)
 

teaches( ID , course_id, sec_id, semester, year)

主键:ID , course_id, sec_id, semester, year

外键1:ID

外键2:course_id, sec_id, semester, year

 

student( ID , name, dept_name, tot_cred)

主键:ID

外键:dept_name

 

takes( ID , course_id, sec_id, semester, year, grade)

主键:ID , course_id, sec_id, semester, year

外键1:ID

外键2:course_id, sec_id, semester, year

 

advisor(s_ID , i_ID )

主键:s_ID

外键1:s_ID

外键2:i_ID

 

time_slot(time_slot_id, day, start_time, end_time)

主键:time_slot_id, day, start_time

 

prereq(course_id, prereq_id)

主键:course_id, prereq_id

外键1:course_id

外键2:prereq_id

 

参考:数据库系统概念第六版

  • 76
    点赞
  • 301
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值