相关系列:
ER图转为关系模式
无损分解和保持依赖
3NF分解与BCNF分解
正则覆盖与候选码
如何设计ER图(弱实体集)
如何设计ER图(映射基数)
对于一个多值属性M,构建关系模式R,该模式包含一个对应于M的属性A,以及对应于M所在的实体集或联系集的主码的属性。R的主码由R的所有属性构成。
如果一个实体集只有一个主码和一个多值属性,我们只转换为一个关系模式。
弱实体集的主码由自身的分辨符和所依赖的强实体集的主码构成。
其属性由自身的属性和所依赖的强实体集的主码构成。
属性由自身属性和所有参与此联系的所有实体集的主码构成。
联系集的主码:
如果我们将所有的联系集全部写出来,那么有的会存在冗余。
消除冗余
inst_dept可以和instructor合并,最终是instructor(ID,dept_name,name,salary)
主键:ID
外键:dept_name
这样就消去了联系集inst_dept
.
3. 在一对一的联系的情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并。
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
参考:数据库系统概念第六版