1. E-R模型

image.png

  • 弱实体集 | image.png | 有时联系集是冗余的,但删除后又无法凸显联系,只好在某个实体集中删除属性,但剩余属性不足以标识唯一指定的实体,必须依赖于一个强实体集,将其主键作为外键,并与弱实体集合的分辨符组成一组属性作为弱实体集主键
    | | —- | —- |

大学数据库为例

实体 学生Shankar 弱实体集
实体集 所有学生 section
image.png
依赖的强实体集为course
分辨符sec_id, semester,year
联系 教师Katz和学生Shankar的联系advisor(导师)
联系集 instructor和student中的advisor关联
image.png

2. 约束

image.png


3. E-R图

image.png

  • 非二元联系

当联系集有不止一个箭头时
image.png
大学数据库为例

一对多关系 image.png
联系集上的基数约束 image.png
- ❌错误理解:由图为instructor——>student,是instructor到student的多对一联系
- ✔正确理解:一个student能参与一次advisor联系,一个instructor可参与多次,实际上是instructor<——student
弱实体集 image.png
复杂属性 image.png
- composite attributes
- name
- address
- street
- multivalued attributes
- phone_number
- derived attributes
- age()

角色(联系) image.png
course

a是b的前置课,b是c的前置课,此时b具有两个角色 | | | 非二元联系 | image.png | |

大学数据库完整ER图
image.png


4. E-R图->关系模式

转换.png

简单属性强实体集 student(ID, name, tot_cred)
复杂属性强实体集 image.png instructor(ID, first_name, middle_initial, last_name
, street_number, street_name, apt_number,

city, state, zip, date_of_birth)
❗ 只表示复合属性的子属性
❗ 不显式表示派生属性(函数)
❗ 为多值属性单独创建模式
| | 多值属性 | instructor_phone(ID, phone_number)
❗ ID为多值属性所在关系模式的主码 | | | 弱实体集 | section(ID, sec_id, semester, year[虚线]) | | | 联系集 | 角色: prereq(course_id, prereq_id)(多对多)
❗ 关系模式中对外码没有明确的标注, 但默认联系集中来自某一个实体主码的属性就是参照该实体的外码
弱实体集周围: teaches(ID, course_id, sec_id, semester, year)(多对多) | |


5. 关系模式的冗余

冗余&合并.png
合并举例

image.png

- 双横线:表示全部参与
- instructor和inst_dept合并
- (ID, name, salary)=>(ID, name, salary, dept_name)
- student和stud_dept合并
- (ID, name, tot_cred)=>(ID, name, tot_cred, dept_name)

|


6. 设计问题

设计问题.png
设计举例

比较takes联系集和注册信息registration实体集
image.png
❌虽然registration集合也准确记录了信息,但略显冗余.
  1. "学生上课",takes是直接发生于两个实体集间的关系,使用联系集更紧凑 |

7. 其他特性

其他特性.png

特化概化 image.png 聚集 image.png image.png

8. E-R图标识总结

  • 实体集&联系集

image.png

  • 集合属性

image.png

  • 映射基数&概化特化

image.png

  • 其余可选表示

image.png
image.png