# 数据建模 & 数据库设计

2020-06-07-11-09-09

# 数据模型 & 概念模型

  • 表达 "计算机世界/数据世界" 的模型称为『 数据模型
    • 可以有 "关系模型, 网状模型, 层次模型", 等等;
  • 表达 "信息世界/概念世界" 的模型称为『 概念模型
    • E-R 模型;
  • 概念模型是对现实世界的理解和抽象;
  • 通过对数据库的设计, 用概念模型去实现数据模型;

# E-R 模型介绍

  • E-R 模型, Entity-Relationship Model. 用以描述概念模型;
  • 基本观点: 世界是由一组称为『 实体 』的基本对象和这些对象之间的『 联系 』构成的;

E-R 模型给出了一组基本概念, 用这些概念可以刻画概念世界:

2020-06-07-11-57-24

# 实体

  • 实体 』 客观存在并且可以互相区分的事务;
  • 关于实体分为『 』和『 实例 』的概念:
    • 类: 实体组成的集合;
    • 实例: 一个个具体的实体;
  • 平时所说的 "实体" 指的是 "实体的类"

# 属性

  • 属性 』实体所具有的某一方面特性;
  • 属性分为多种类型:
    • 单一属性 & 复合属性;
      • 复合属性由多个单一属性组合而得;
      • 🌰 家庭住址 = 省份 + 城市 + 具体住址
      • 在关系模型中, 复合属性是一定要转换成单一模型的 ( 关系的第 1 范式 )
    • 单值属性 & 多值属性:
      • 🌰 电话号码, 一个人可能有多个电话号码;
      • 在关系模型中, 多值属性一定要转换成单值属性 ( 关系的第 1 范式 )
    • 空值属性 & 非空值属性:
      • 每个实例的该属性可不可以为空;
    • 导出属性:
      • 可由其他属性计算而得;
      • 🌰 "出生年份 + 今年年份" ==> "年龄"

# 关键字

  • 关键字 』实体中能够用其值来唯一区分开每一个实例的属性或属性组合;

# 联系

  • 联系 』指一个实体的实例和其他实体实例之间可能发生的联系;

2020-06-07-12-18-41

# 联系的元数

  • 根据参与发生联系的实体的数目不同, 联系分为不同的类型;
  • 参与联系的实体的数目称为『 』:
    • 一元联系: 同一个实体中的实例之间互相联系;
    • 二元联系: 两个实体的实例之间进行联系;
    • 三元联系: 三个实体的实例之间进行联系;
    • ...

2020-06-07-12-25-48

2020-06-07-12-23-15

# 实体的角色

  • 当同一个实体的不同实例参与一个联系时,为了区别各实例参与联系的方式, 需要显示的指明实例的『 角色 role 』

2020-06-07-12-29-58

# 联系的基数

  • 联系的『 基数 Cardinalities 』表示一个实体的实例通过联系与另一个实体的实例相关联的数量:
    • 一对一 ( 1:1 ): 实体 A 的一个实例只能与实体 B 的一个实例发生联系. 反之, 实体 B 的一个实例只能与实体 A 的一个实例发生联系;
      • 🌰 夫妻关系, 一个丈夫只能有一个妻子, 一个妻子只能有一个丈夫;
    • 一对多 ( 1:m ): 实体 A 的一个实例能与实体 B 的多个实例发生联系. 而实体 B 的一个实例只能与实体 A 的一个实例发生联系;
      • 父子关系, 一个父亲可以有多个孩子, 一个孩子只能有一个法定父亲;
    • 多对多 ( m:n ): 实体 A 的一个实例能与实体 B 的多个实例发生联系. 反之, 实体 B 的一个实例也能与实体 A 的多个实例发生联系;
      • 🌰 学生与课程: 一个学生可以上多门课, 一个课可以有多个学生;

# 完全参与联系 & 部分参与联系

根据基数可能的『 最小基数 』和『 最大基数 』来将 "实体参与联系的方式" 划分为如下两种类型:

  • 完全参与联系: 该实体的实例至少有一个参与到联系中;
  • 部分参与联系: 该实体的实例可以不参与到联系中;
    • 部分参与联系的实体的实例在联系中可以取『 空值

🌰 以 "书架" 和 "图书" 构成的 "存放图书" 联系举例:

  • "书架" 参与 "存放图书" 联系的基数为 ( 0..m ), 意思是, 一个书架可以存放 0 或多本图书;
  • "图书" 参与联系的基数为 ( 1..1 ), 意思是, 一个书只能放在一个书架;

# E-R 模型的图示化表示方法

# Chen 方法

2020-06-07-13-34-06

2020-06-07-13-35-16

2020-06-07-13-36-09

2020-06-07-13-38-03

2020-06-07-13-43-15

# 🌰 案例: 仓储管理的 E-R 图

2020-06-07-13-45-40

2020-06-07-13-47-03

2020-06-07-13-48-40

2020-06-07-13-48-57

2020-06-07-13-50-24

# Crow's Foot 方法

2020-06-07-13-54-48

2020-06-07-13-56-01

2020-06-07-13-57-37

2020-06-07-13-59-09

2020-06-07-13-59-56

2020-06-07-14-04-32

# 数据库设计中的抽象

2020-06-07-14-09-24

# 型 & 值

2020-06-07-14-17-23

# 数据模型 & 抽象层次

2020-06-07-14-19-01

2020-06-07-14-27-04

2020-06-07-14-29-35

# IDEF1x 表达方式

# 什么是 IDEF1x

  • IDEF1x 是 IDEF 标准之一;
  • IDEF 是美国空军在 ICAM 计划中位项目规范化管理提出的一系列项目描述方法;
  • IDEF1x 是将 E-R 模型扩充语义而形成的;
  • IDEF1x 是一种进行数据建模或数据库设计时使用的, 图示化的, 工程化的建模方法;

# 独立实体 & 从属实体

2020-06-07-17-52-52

2020-06-07-17-54-24

2020-06-07-18-02-15

2020-06-07-17-55-45

2020-06-07-17-56-37

2020-06-07-18-01-12

# 标定联系 & 非标定联系

  • 联系 』是实体间的一种连接关系;
  • 可以分为, 连接联系, 分类联系, 不确定联系;
  • 连接联系, 又称『 父子联系 』或『 依存联系
  • 再进一步又可以分为『 标定联系 』和『 非标定联系

2020-06-07-18-08-54

2020-06-07-18-12-55

2020-06-07-18-15-34

# 非确定联系 & 相交实体

非确定联系 』即实体之间的多对多联系;

  • 非确定联系必须分解为若干个『 一对多 』的联系来表达;

2020-06-07-18-31-10

2020-06-07-18-33-26

# 分类联系 & 分类实体

2020-06-07-18-35-55

2020-06-07-18-37-45

2020-06-07-18-39-47

2020-06-07-18-43-02

2020-06-07-18-46-23

2020-06-07-18-50-30

  • 完全分类实体 』: 所有的分类实体实例集合一起构成了一般实体的实例集合;
  • 非完全分类实体 』: 所有分类实体实例集合构成了部分一般实体的实例集合;

# 🌰 案例: 仓储系统

2020-06-07-19-12-28

2020-06-07-19-13-32

2020-06-07-19-14-16

2020-06-07-19-16-28

2020-06-07-19-20-20

# 数据库设计过程与设计方法

数据库设计的四个过程:

  • 需求分析: 收集需求和理解需求;
  • 概念数据库设计: 建立概念模型, 🌰 E-R 图/IDEF1x 图;
  • 逻辑数据库设计: 建立逻辑模型, 🌰 关系模式;
  • 物理数据库设计: 建立物理模型, 🌰 用 SQL 建立数据库, 定义数据表;

# 需求分析

2020-06-08-08-50-22

2020-06-08-08-53-03

2020-06-08-08-51-43

2020-06-08-08-51-57

# 概念数据库设计

2020-06-08-08-55-36

# 两种设计思路

2020-06-08-08-57-06

2020-06-08-08-59-00


2020-06-08-08-57-22

2020-06-08-08-59-09

# 消除冲突

2020-06-08-09-11-53

# 设计结果

2020-06-08-09-13-20

2020-06-08-09-14-42

2020-06-08-09-15-03

2020-06-08-09-16-15

2020-06-08-09-16-51

# 逻辑数据库设计

2020-06-08-09-19-16

2020-06-08-09-21-39

2020-06-08-09-22-25

2020-06-08-09-23-18

2020-06-08-09-26-57

2020-06-08-09-28-02

2020-06-08-09-30-27

2020-06-08-09-32-32

2020-06-08-09-36-20

2020-06-08-09-42-19

2020-06-08-09-42-30

# 数据库设计理论

2020-06-08-09-47-15

2020-06-08-09-48-27

2020-06-08-09-51-29

👆 上面这些后面会讲.


综合来讲, 逻辑数据库设计流程如下:

2020-06-08-09-52-39

# 物理数据库设计

2020-06-08-09-54-02

2020-06-08-09-54-37

2020-06-08-09-55-38

上次更新: 7/4/2020, 4:14:54 AM