四. 数据库建模

4.1 数据库设计过程

1. 数据库设计的任务:设计最优的数据库概念模型、逻辑模型、物理模型

  • 概念模型:E-R模型
  • 逻辑模型(关系模型):数据库模式(关系模式的集合)
  • 物理模型:物理存储结构和存取方法

2. 数据抽象与数据库三级模式:

  • 物理层抽象:内模式(存储模式),全体数据的物理存储结构和索引
  • 逻辑层抽象:模式(逻辑模式),全体数据的逻辑结构
  • 视图层抽象:外模式(子模式或用户模式),局部数据的逻辑结构

3. 数据库设计过程:

  • ① 需求分析
  • 需求规格说明书(市场调研)
  • ② 概念设计
  • E-R图(实体、联系、属性)
  • ③ 逻辑设计
  • 常见逻辑模型:层次、网状、关系数据库(本书讨论的对象)、面向对象、XML
  • ④ 模式求精
  • 改进和优化(如减少数据冗余,消除更新、插入与删除异常等)
  • ⑤ 物理设计
  • ⑥ 应用与安全设计

 

4.2 E-R 模型基本概念及表示

4.2.3 实体与实体集

1. 实体:客观世界中可区别于其他事物的“事物”或“对象”

  • 实体的特征:① 独立存在;② 区别于其他实体

2. 实体集:具有相同类型及相同性质(或属性)的实体组成的集合

 

4.2.2 属性

1.  属性:实体集中每个实体都具有的特征描述

2. 属性的分类:

  • 简单属性、复合属性 
  • 简单属性:不能再分为更小部分的属性
  • 复合属性:可以进一步划分为更小部分的属性
  • 单值属性、多值属性
  • 单值属性:某属性对一个特定实体任何时候都只能有单独的一个值
  • 多值属性:不唯一
  • 派生属性
  • 从其它相关属性或实体(集)派生出来
  • NULL值
  • 当实体在某个属性上没有值时可使用,表示属性的值是未知的或不存在

数据库设计模板 中的逻辑架构设计 怎么写_实体集

3. E-R图

  • 实体集——矩形
  • 属性——椭圆
  • 多值属性——双椭圆
  • 派生属性——虚线椭圆
  • 属性与实体之间——连线

数据库设计模板 中的逻辑架构设计 怎么写_数据库_02

 

 多值属性转换为多个单值属性:

数据库设计模板 中的逻辑架构设计 怎么写_数据库_03

4.2.3 联系与联系集

1. 联系与联系集

  • 联系(relationship):多个实体间的相互关联
  • 联系集:同类联系的集合
  • E-R图用菱形表示联系(集)

 

数据库设计模板 中的逻辑架构设计 怎么写_建模_04

2. 多联系:在相同的实体集上可能存在多个不同的联系集

数据库设计模板 中的逻辑架构设计 怎么写_建模_05

3. 实体的角色:实体在联系中的作用

数据库设计模板 中的逻辑架构设计 怎么写_数据库_06

 4. 联系集的度:参与联系集的实体集的数目

数据库设计模板 中的逻辑架构设计 怎么写_实体集_07

  • 二元联系集的度为2 ,三元联系集的度为3 (上图为3元)

 

 4.3 约束

 4.3.1 映射约束

1. 映射基数:实体集中的一个实体通过一个联系集能同时与另一个实体集相联系的实体数目

2. 在二元联系中,共有4种映射基数:

  • 1:1(一对一)
  • 1:m(一对多)
  • m:1(多对一)
  • m:n(多对多)

 

 4.3.2 码约束与联系集的属性安置

 1. 实体集的码

  •  超码(super key):一个或多个属性的集合,且这些属性的集合在一实体集中能够唯一标识一个实体
  • 若一超码的任意真子集都不能成为超码,则称该最小超码为候选码(candidate key)
  • 可以从多个候选码中选择一个作为实体集的主码(primary key)
  • 选择属性长度最短的候选码;
  • 选择包含单个属性的码,而不是复合候选码;
  • 选择在数据库系统生命周期内属性值最少变化的候选码;
  • 选择在数据库系统生命周期内更可能包含唯一值的候选码。

 2. 联系集的码

  • 二元联系集的主码选择,依赖于联系集的映射基数
  • 一对一:主码可以使用参与联系集中的任何一方实体集的主码;
  • 一对多(多对一):主码由“多”的一方实体集的主码组成;
  • 多对多:主码由参与联系集中所有实体集的主码组成。

 3. 联系集的属性安置  

  • 二元联系集的属性安置
  • 一对一联系集的属性:安置于联系集或任一边的实体集上;
  • 一对多联系集的属性:安置于联系集或多的一方实体集上;
  • 多对多联系集的属性:它是描述相关联实体集间的交互性语义

 

 4.3.3 依赖约束

1. 依赖约束:联系中一种实体的存在依赖于该联系集中联系或其他实体集中实体的存在

2. 两种依赖约束:

  • 联系中一种实体的存在依赖于该联系集中联系的存在,称为实体集与联系集之间的依赖约束,并将依赖于联系集而存在的实体集称为依赖实体集
  • 联系中一种实体的存在依赖于其他实体集中实体的存在,称为实体集之间的依赖约束,并将依赖于其他实体集而存在的实体集称为弱实体集

 

4.3.4 参与约束

 对于下图中选课联系集,学生实体集是全部参与,而课程实体集是部分参与。

数据库设计模板 中的逻辑架构设计 怎么写_建模_08

 

4.3.5 多值联系

  1. 多值联系是指在同一个给定的联系集中,相关联的相同实体之间可能存在多个联系。

 

4.4 弱实体集

  1. 弱实体集:属性不足以形成主码,必须依赖于其它实体集的存在而存在的实体集
  2. 强实体集 :与弱实体集相对应,其属性可以形成主码的实体集
  3. 标识实体集:弱实体集所依赖的强实体集
  4. 标识联系集 :弱实体集必须与一标识实体集相关联才有意义的联系集
  5. 部分码:一个弱实体集中用来标识弱实体的属性(集) 
  6. 弱实体集中的实体,由其标识实体集中的主码与其部分码共同标识 
  • E-R图使用:
  • 双矩形 -- 弱实体集
  • 双菱形 -- 标识联系集
  • 虚下划线 -- 弱实体集的部分码 

7. 对于弱实体集,必须满足下列限制:

  • 标识实体集和弱实体集必须是“一对多”联系集 
  • 弱实体在标识联系集中是全部参与(双连线表示全部参与)

 

4.5 扩展E-R特征

  1. 类层次:高层实体和低层实体之间的“父类-子类”联系,也称为“特殊化”或“属性继承”(即子类会继承父类的所有属性)
  2. 聚合:抽象概念,它将一个联系集及其相关联的实体集抽象为一个高层实体集(或称为联系实体集)对待,然后建立该高层实体集与其它实体集之间的联系集

数据库设计模板 中的逻辑架构设计 怎么写_建模_09

 

4.6 E-R 建模问题

4.6.1 E-R 建模的基本原则

  1. 忠实于应用需求
  2. 简单性,只对数据库使用者所关心、感兴趣的属性建模 
  3. 避免冗余,一个对象只存放在一个地方
  4. 实体集 / 属性的选择
  5. 实体集 / 联系集的选择
  6. 多元联系转化为二元联系

4.6.2 依赖约束的建模

 对于多值属性的建模问题,解决方法之一就是:将多值属性建模为弱实体集,将多值属性所转换得到的弱实体集与原实体集之间的依赖约束建模为标识联系集

 

4.6.3 多值联系的建模

  1. 将多值联系建模为弱实体集
  2. 将多值联系建模为依赖实体集

 

4.7 数据库概念设计实例——大学选课系统

 略

 

4.8 逻辑设计——E-R模型转化为关系模型

 1. 强实体集转化方法

将实体集的每个属性对应为关系模式的属性,实体集的码作为关系模式的码

2. 弱实体集转化方法

弱实体集没有主码属性,其元组需借助强实体集的主码标识。

弱实体集对应的关系模式属性由本身的描述属性加上所依赖的强实体集的主码属性组成,其主码由所依赖的强实体集主码和弱实体集的部分码组成。

3. 联系集转化方法

4. 复合属性及多值属性转化方法

5. 类层次转化方法

6.聚合转化方法

 

 

 

 

未完待续...