# 实体

实体是可区别于其他事务的 “事物” 或 “对象”
实体集是相同类型的实体的集合

# 实体的特征

  • 独立存在
  • 可区别于其他实体

# 属性

实体是通过一组属性来描述的,属性是实体集中的每个实体都具有的特征描述
对于一个属性来说,每个实体都拥有自己的属性值

# 属性的分类

  • 简单属性和复合属性
    • 简单属性:不能再分为更小部分的属性(原子属性)
    • 复合属性:可以进一步划分的属性
  • 单值属性和多值属性
    • 单值属性:只有一个值的属性
    • 多值属性:可能有不同数目的值的属性(每个人可以有若干个号码)
      • 多值属性可以转换为多个单值属性(电话 \to 个人、家庭.....)
  • 派生属性
    • 某属性的值可以从其他属性实体(集)派生出来

# 联系与联系集

联系是多个实体间的相互关联
联系集是相同类型的联系的集合

# 联系属性

联系集也可以有自己的属性,称为联系属性

# 联系集的度

联系集所关联的实体集的数量

# 约束

# 映射约束

# 映射基数

一个实体集中的一个实体通过某种联系和另一个实体集中的实体相联系的数目

# 映射种类

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

# 码约束

# 实体集的码

  • 选择原则
    • 属性长度短
    • 包含属性少
    • 生命周期内变化少

# 联系集的码

# 超码

联系集所涉及的所有实体集的主码的并集,就构成了联系集的超码

# 二元联系集超码的选择原则

  • 一对一:选任何一方实体集的主码
  • 一对多:选 “多” 的一方的实体集的主码
  • 多对多:参与联系的所有实体集的主码的并集

# 依赖约束

依赖约束是指联系中一种实体的存在依赖于该联系的存在

# 两种依赖约束

  • 依赖联系的存在
    • 将依赖于联系存在的实体集称为依赖实体集
  • 依赖实体集中实体的存在
    • 将依赖于其他实体集中的实体存在的实体集称为弱实体集

# 参与约束

如果一个实体集中的每个实体都参与到联系集的一个联系中,则称该实体集全部参与该联系集。反之称为部分参与

# 多值联系

若联系集的联系属性是多值属性,则称该联系是多值联系,同时称该联系集为多值联系集
如:一个客户和一个银行的贷款联系,可能不止一笔贷款,所以 {贷款编号、日期 ...} 可能有多个值

# 多值联系会产生的问题

  • 一个客户向一个银行申请多笔贷款时,按相关实体集主码并集则无法唯一标识
  • 多个银行联合给一个客户发放贷款,或反过来了,则会造成数据冗余

# 解决方法

  • 再从多值联系集中选择一个或多个标识性属性,一起构成主码
    • 此方法违背了 ERE-R 模型的联系集主码确定原则,且无法解决数据冗余
  • 更好的办法是:将多值联系集建模为依赖实体集或弱实体集

# 弱实体集

属性不足以形成主码,必须依赖于其他实体集的存在而存在的
弱实体集依赖的实体集称为标识实体集,与之相关的联系集称为标识联系集

对于给定的标识实体集,一个弱实体集中用来标识弱实体的属性(集)称为该弱实体集的部分码
弱实体集中的实体是由其标识实体集的主码与其部分码共同标识

# 弱实体集的限制

  • 标识实体集和弱实体集必须是一对多的联系集
    • 一个课程可能有多个教学班
    • 一个教学班只能有一个课程
  • 弱实体在标识联系集中是全部参与
    • 有一个联系就有一个弱实体集中的实体

# 类层次

ERE-R 模型使用实体集的继承ISAISA 联系来描述这种概念上的层次关系
ISAISAis a 的含义,表示高层实体和底层实体之间的 “父类 - 子类” 的联系

# 聚合

聚合是一种抽象,它将一个联系集及其相关联的实体集抽象为一个联系实体集(或称为高层实体集),然后建立这个联系实体集和其他实体集的联系集