基本概念
实体:可以简单理解为一条具体记录,具有属性
- 每个属性都有域
- 属性可分为
- 简单属性、复合属性(姓名是由姓和名组合而成)
- 单值属性、多值属性(一对多)
- 派生属性:由其他属性计算后可得的属性,与之相对的是基属性
实体集:相同类型实体的集合。
联系:多个实体互相关联(如小明和A课室关联,学生表和课室表是分开的)
联系集:相同类型联系的集合
- 度:参与联系的实体集的个数,联系集可以涉及多于两个的实体集(X元联系,常见为二元联系)
映射基数:表示某实体X通过联系集进行关联的其他实体的个数
- 二元联系集的映射基数有以下情况:
- 一对一,如:总统和国家
- 一对多,如:班级和学生
- 多对一,如:病人和医生
- 多对多,如:学生和课程
- 二元联系集的映射基数有以下情况:
键、码与联系集
- 参与同一联系集的各个实体集的码的组合,就是联系集的超码
- 联系集的候选码依赖于联系集的映射基数(1:1,1:n,m:n)
er图图例
实体集与联系集的表示
- 矩形:实体集,上半部分是实体集的名字,下半部分是实体集中的所有属性名
- 菱形:联系集,用虚线连接的是联系集的描述性属性
- 有横线的属性表示主码
角色
- 自环联系集(recurisve relationship set):涉及同一个实体集的相同属性的联系集
- 参与preeq的实体集两个都是course
基数约束(联系的上限)
- 再联系集和实体集之间用→表示“一”,-表示“多”。
一名老师只能有一个学生
一位老师与多位学生联系
参与约束(联系的下限)
- 实体集参加联系集的方式
- 全参与(双线):实体集中每个实体都至少参加联系集中的一个联系
- 部分参与:某些实体可能没参加联系集中的任何联系
1 | course是系列课程,section是具体的课程。 |
关系约束的另一表示方式
- 每个学生有且仅有一个导师,教师可以有0个或多个学生
弱实体集
- 没有主键的实体集叫做弱实体集
- 若实体集的存在依赖于它的标识实体集(属主实体集)的存在
- 标识性联系(双菱形):将弱实体集与其标识实体集相联的联系
扩展ER特性
- 特化(继承):自顶向下设计过程中,低层实体集继承它连接的高层实体集的所有属性及参加的联系,用空心箭头表示。
泛化(概化):自底向上涉及过程中,将数个共享相同特殊的实体集组合成一个高层实体集
特化/概化的设计约束
- 不相交:一个实体只能属于一个低层实体集(画法:在isa旁边加disjoint)
- 重叠:一个实体可属于多个低层实体集
- 完备性约束:略
不相交与重叠的例子
- 聚集
1 | 上图中eval_for和proj_guide都是三元联系,并且他们的信息是由重叠的。 |
我们把proj_guide的三元联系抽象成一个实体集