E-R模型

实体 是现实世界中可区别于所有其他对象的一个事务,例如大学中的每个人

实体集 是相同类型即具有相同属性的一个实体集合,例如大学中的所有人

属性 每个实体的每个属性都有一个值

联系 是指多个实体间的相互关联

联系集 是相同类型联系的集合,是n≥2个实体集上的数学关系

参与 实体集之间的关联,实体集$E_1,E_2,…,E_n$参与联系集$R$

参与联系集的实体集的数目

每个属性的可取值的集合

属性分类

  • 简单和复合
    • 简单不能划分为更小饿部分
    • 复合比如说姓名可以划分为姓和名
  • 单值和多值
  • 派生 这类属性的值可以从相关属性得出

约束

映射基数 标识一个实体通过联系集能关联的实体的个数

  • 一对一
  • 一对多
  • 多对一
  • 多对多

参与约束

  • 全部 实体集E对的每个实体都参与到联系集R的至少一个联系
  • 部分 实体集E只有部分实体参与到联系集R的联系

唯一标识该实体

基线约束

→ 箭头指向

— 横线指向

对于三元(或更高度)关系,我们最多允许从关系中有一个箭头出去,以表示基数约束

E-R图

  • 矩形表示实体集
    • 复合属性跟在简单属性下面,统一缩进格式
  • 菱形表示关系集
  • 实体矩形内列出属性
  • 下划线表示主键属性
  • 非二次的联系集用多条线连接
  • 弱实体集 没有主码的实体集
  • 强实体集 有主码的实体集
  • 弱实体集必须与标识实体集关联

关系模式的转化

  • E-R图转化为一些关系模式的集合
  • 强实体集:$(A_1,A_2,…,A_n)$,其中$A_1,A_2,…,A_n$是实体集内的属性
  • 弱实体集:$(A_1,A_2,…,A_n,p)$,其中$A_1,A_2,…,A_n$是实体集内的属性,$p$是识别强实体集的主码
  • 联系集:参与的所有实体集的主码的集合 + 自己的属性
    • 多对多 双方主码的并集为联系集的主码
    • 一对多 多的主码为联系集的主码
    • 一对一 任意的都可以

设计问题

用实体集还是用属性?
  • 用实体集比较灵活,可存储额外信息
用实体集还是用联系集?
  • 不好说,更多的是用联系集表示实体之间的操作
用二元关系集还是用n元关系集?
  • 可以用多个二元关系集表示n元关系集,但n元关系集清楚一些

扩展的E-R特性

特化

  • 自顶向下的设计过程
  • 在实体集内部进行分组的过程,比如说person实体集分为employee和student

概化

  • 自底向上的设计过程
  • 将共享相同特征的多个实体集合并为一个较高层的实体集

高层和低层实体集也称为超类(superclass)和子类(subclass)

属性继承

  • 高层实体集的属性被低层实体集继承
  • 高层实体集所关联的所有属性和联系适用于它的所有低层实体集
  • 低层实体集特有的性质仅适用于特定的低层实体集

概化上的约束

  • 条件定义的
  • 用户定义的
  • 不相交:一个实体至多属于一个低层实体集
  • 重叠:一个实体可以属于多个较低级别实体集
  • 完全性约束
    • 全部概化或特化: 每次高层实体必须属于一个低层实体集
    • 部分概化或特化:允许一些高层实体不属于任何低层实体集

聚集

使联系化为高层实体,并且可以参与联系

  • 将关系视为抽象实体
  • 允许关系之间的关系
  • 将关系抽象成新的实体,避免引入冗余

转为关系模式

  • 方法一
    • 为高级实体形成一个模式
    • 为每个低级实体集形成一个模式,包括上层实体集的主键和局部属性
    • 缺点:获取有关员工的信息需要访问两个关系,即对应于低级别模式和高级别模式的关系
  • 方法二
    • 为每个实体集构建模式,包括所有本地和继承的属性
    • 缺点:可能会冗余存储

统一建模语言UML

  • 类图:与E-R图类似
  • 用况图:说明用户与系统之间的交互
  • 活动图:说明系统不同部分之间的任务流
  • 实现图:在软硬件说明系统的各组成部分以及它们之间的联系
  • 关联:类比联系集

数据库设计的其他方面

  • 数据约束:自动的一致性保持
  • 使用需求:查询、性能:吞吐量和响应时间
  • 授权需求
  • 数据流、工作流