1. E-R模型
- 弱实体集
| | 有时联系集是冗余的,但删除后又无法凸显联系,只好在某个实体集中删除属性,但剩余属性不足以标识唯一指定的实体,必须依赖于一个强实体集,将其主键作为外键,并与弱实体集合的分辨符组成一组属性作为弱实体集主键
| | —- | —- |
大学数据库为例
实体 | 学生Shankar | 弱实体集 |
---|---|---|
实体集 | 所有学生 | section 依赖的强实体集为course 分辨符sec_id, semester,year |
联系 | 教师Katz和学生Shankar的联系advisor(导师) | |
联系集 | instructor和student中的advisor关联 |
2. 约束
3. E-R图
- 非二元联系
当联系集有不止一个箭头时
大学数据库为例
一对多关系 | ||
---|---|---|
联系集上的基数约束 | - ❌错误理解:由图为instructor——>student,是instructor到student的多对一联系 - ✔正确理解:一个student能参与一次advisor联系,一个instructor可参与多次,实际上是instructor<——student |
|
弱实体集 | ||
复杂属性 | - composite attributes - name - address - street - multivalued attributes - phone_number - derived attributes - age() |
|
角色(联系) | course |
a是b的前置课,b是c的前置课,此时b具有两个角色 | | | 非二元联系 | | |
大学数据库完整ER图
4. E-R图->关系模式
简单属性强实体集 | student(ID, name, tot_cred) | |
---|---|---|
复杂属性强实体集 | 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. 关系模式的冗余
合并举例
- 双横线:表示全部参与 - 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. 设计问题
设计举例
比较takes联系集和注册信息registration实体集 |
---|
❌虽然registration集合也准确记录了信息,但略显冗余. |
✔"学生上课",takes是直接发生于两个实体集间的关系,使用联系集更紧凑 |
7. 其他特性
特化概化 | 聚集 | |||
---|---|---|---|---|
8. E-R图标识总结
- 实体集&联系集
- 集合属性
- 映射基数&概化特化
- 其余可选表示