彪码野郎

  • 首页

  • 分类

  • 归档

数据库设计与ER图

发表于 2019-11-29 阅读次数:

基本概念

  • 实体:可以简单理解为一条具体记录,具有属性

    • 每个属性都有域
    • 属性可分为
      1. 简单属性、复合属性(姓名是由姓和名组合而成)
      2. 单值属性、多值属性(一对多)
      3. 派生属性:由其他属性计算后可得的属性,与之相对的是基属性
  • 实体集:相同类型实体的集合。

  • 联系:多个实体互相关联(如小明和A课室关联,学生表和课室表是分开的)

  • 联系集:相同类型联系的集合

    • 度:参与联系的实体集的个数,联系集可以涉及多于两个的实体集(X元联系,常见为二元联系)
  • 映射基数:表示某实体X通过联系集进行关联的其他实体的个数

    • 二元联系集的映射基数有以下情况:
      1. 一对一,如:总统和国家
      2. 一对多,如:班级和学生
      3. 多对一,如:病人和医生
      4. 多对多,如:学生和课程

键、码与联系集

  • 参与同一联系集的各个实体集的码的组合,就是联系集的超码
  • 联系集的候选码依赖于联系集的映射基数(1:1,1:n,m:n)

er图图例

实体集与联系集的表示

  • 矩形:实体集,上半部分是实体集的名字,下半部分是实体集中的所有属性名
  • 菱形:联系集,用虚线连接的是联系集的描述性属性
    • 有横线的属性表示主码

角色

  • 自环联系集(recurisve relationship set):涉及同一个实体集的相同属性的联系集
  • 参与preeq的实体集两个都是course

基数约束(联系的上限)

  • 再联系集和实体集之间用→表示“一”,-表示“多”。

一名老师只能有一个学生

一位老师与多位学生联系

参与约束(联系的下限)

  • 实体集参加联系集的方式
    1. 全参与(双线):实体集中每个实体都至少参加联系集中的一个联系
    2. 部分参与:某些实体可能没参加联系集中的任何联系
1
2
3
course是系列课程,section是具体的课程。
具体的课程一旦存在就必须要有对应的系列课程。反之,系列课程不一定需要有具体的课程。
ps:双菱形表示连接到弱实体集的标志性联系集

关系约束的另一表示方式

  • 每个学生有且仅有一个导师,教师可以有0个或多个学生

弱实体集

  • 没有主键的实体集叫做弱实体集
  • 若实体集的存在依赖于它的标识实体集(属主实体集)的存在
  • 标识性联系(双菱形):将弱实体集与其标识实体集相联的联系

扩展ER特性

  • 特化(继承):自顶向下设计过程中,低层实体集继承它连接的高层实体集的所有属性及参加的联系,用空心箭头表示。
  • 泛化(概化):自底向上涉及过程中,将数个共享相同特殊的实体集组合成一个高层实体集

  • 特化/概化的设计约束

    • 不相交:一个实体只能属于一个低层实体集(画法:在isa旁边加disjoint)
    • 重叠:一个实体可属于多个低层实体集
    • 完备性约束:略

不相交与重叠的例子

  • 聚集
1
2
3
4
5
上图中eval_for和proj_guide都是三元联系,并且他们的信息是由重叠的。
每个evalf_for联系对应一个proj_guide联系,,而proj_guide联系可能不用对应任何eval_for,所以肯定不能去除proj_guide。

此时我们可以通过聚集消除这种冗余
- 将联系视为一个抽象实体

我们把proj_guide的三元联系抽象成一个实体集

全排列问题
  • 文章目录
  • 站点概览
Weapon

Weapon

40 日志
6 分类
4 标签
  1. 1. 基本概念
  2. 2. 键、码与联系集
  • er图图例
    1. 1. 实体集与联系集的表示
    2. 2. 角色
    3. 3. 基数约束(联系的上限)
    4. 4. 参与约束(联系的下限)
    5. 5. 关系约束的另一表示方式
    6. 6. 弱实体集
    7. 7. 扩展ER特性
  • © 2019 Weapon
    由 Hexo 强力驱动 v3.9.0
    |
    主题 – NexT.Pisces v7.3.0