# 数据建模 & 数据库设计
# 数据模型 & 概念模型
- 表达 "计算机世界/数据世界" 的模型称为『 数据模型 』
- 可以有 "关系模型, 网状模型, 层次模型", 等等;
- 表达 "信息世界/概念世界" 的模型称为『 概念模型 』
- E-R 模型;
- 概念模型是对现实世界的理解和抽象;
- 通过对数据库的设计, 用概念模型去实现数据模型;
# E-R 模型介绍
- E-R 模型, Entity-Relationship Model. 用以描述概念模型;
- 基本观点: 世界是由一组称为『 实体 』的基本对象和这些对象之间的『 联系 』构成的;
E-R 模型给出了一组基本概念, 用这些概念可以刻画概念世界:
# 实体
- 『 实体 』 客观存在并且可以互相区分的事务;
- 关于实体分为『 类 』和『 实例 』的概念:
- 类: 实体组成的集合;
- 实例: 一个个具体的实体;
- 平时所说的 "实体" 指的是 "实体的类"
# 属性
- 『 属性 』实体所具有的某一方面特性;
- 属性分为多种类型:
- 单一属性 & 复合属性;
- 复合属性由多个单一属性组合而得;
- 🌰 家庭住址 = 省份 + 城市 + 具体住址
- 在关系模型中, 复合属性是一定要转换成单一模型的 ( 关系的第 1 范式 )
- 单值属性 & 多值属性:
- 🌰 电话号码, 一个人可能有多个电话号码;
- 在关系模型中, 多值属性一定要转换成单值属性 ( 关系的第 1 范式 )
- 空值属性 & 非空值属性:
- 每个实例的该属性可不可以为空;
- 导出属性:
- 可由其他属性计算而得;
- 🌰 "出生年份 + 今年年份" ==> "年龄"
- 单一属性 & 复合属性;
# 关键字
- 『 关键字 』实体中能够用其值来唯一区分开每一个实例的属性或属性组合;
# 联系
- 『 联系 』指一个实体的实例和其他实体实例之间可能发生的联系;
# 联系的元数
- 根据参与发生联系的实体的数目不同, 联系分为不同的类型;
- 参与联系的实体的数目称为『 元 』:
- 一元联系: 同一个实体中的实例之间互相联系;
- 二元联系: 两个实体的实例之间进行联系;
- 三元联系: 三个实体的实例之间进行联系;
- ...
# 实体的角色
- 当同一个实体的不同实例参与一个联系时,为了区别各实例参与联系的方式, 需要显示的指明实例的『 角色 role 』
# 联系的基数
- 联系的『 基数 Cardinalities 』表示一个实体的实例通过联系与另一个实体的实例相关联的数量:
- 一对一 ( 1:1 ): 实体 A 的一个实例只能与实体 B 的一个实例发生联系. 反之, 实体 B 的一个实例只能与实体 A 的一个实例发生联系;
- 🌰 夫妻关系, 一个丈夫只能有一个妻子, 一个妻子只能有一个丈夫;
- 一对多 ( 1:m ): 实体 A 的一个实例能与实体 B 的多个实例发生联系. 而实体 B 的一个实例只能与实体 A 的一个实例发生联系;
- 父子关系, 一个父亲可以有多个孩子, 一个孩子只能有一个法定父亲;
- 多对多 ( m:n ): 实体 A 的一个实例能与实体 B 的多个实例发生联系. 反之, 实体 B 的一个实例也能与实体 A 的多个实例发生联系;
- 🌰 学生与课程: 一个学生可以上多门课, 一个课可以有多个学生;
- 一对一 ( 1:1 ): 实体 A 的一个实例只能与实体 B 的一个实例发生联系. 反之, 实体 B 的一个实例只能与实体 A 的一个实例发生联系;
# 完全参与联系 & 部分参与联系
根据基数可能的『 最小基数 』和『 最大基数 』来将 "实体参与联系的方式" 划分为如下两种类型:
- 完全参与联系: 该实体的实例至少有一个参与到联系中;
- 部分参与联系: 该实体的实例可以不参与到联系中;
- 部分参与联系的实体的实例在联系中可以取『 空值 』
🌰 以 "书架" 和 "图书" 构成的 "存放图书" 联系举例:
- "书架" 参与 "存放图书" 联系的基数为 ( 0..m ), 意思是, 一个书架可以存放 0 或多本图书;
- "图书" 参与联系的基数为 ( 1..1 ), 意思是, 一个书只能放在一个书架;
# E-R 模型的图示化表示方法
# Chen 方法
# 🌰 案例: 仓储管理的 E-R 图
# Crow's Foot 方法
# 数据库设计中的抽象
# 型 & 值
# 数据模型 & 抽象层次
# IDEF1x 表达方式
# 什么是 IDEF1x
- IDEF1x 是 IDEF 标准之一;
- IDEF 是美国空军在 ICAM 计划中位项目规范化管理提出的一系列项目描述方法;
- IDEF1x 是将 E-R 模型扩充语义而形成的;
- IDEF1x 是一种进行数据建模或数据库设计时使用的, 图示化的, 工程化的建模方法;
# 独立实体 & 从属实体
# 标定联系 & 非标定联系
- 『 联系 』是实体间的一种连接关系;
- 可以分为, 连接联系, 分类联系, 不确定联系;
- 连接联系, 又称『 父子联系 』或『 依存联系 』
- 再进一步又可以分为『 标定联系 』和『 非标定联系 』
# 非确定联系 & 相交实体
『 非确定联系 』即实体之间的多对多联系;
- 非确定联系必须分解为若干个『 一对多 』的联系来表达;
# 分类联系 & 分类实体
- 『 完全分类实体 』: 所有的分类实体实例集合一起构成了一般实体的实例集合;
- 『 非完全分类实体 』: 所有分类实体实例集合构成了部分一般实体的实例集合;
# 🌰 案例: 仓储系统
# 数据库设计过程与设计方法
数据库设计的四个过程:
- 需求分析: 收集需求和理解需求;
- 概念数据库设计: 建立概念模型, 🌰 E-R 图/IDEF1x 图;
- 逻辑数据库设计: 建立逻辑模型, 🌰 关系模式;
- 物理数据库设计: 建立物理模型, 🌰 用 SQL 建立数据库, 定义数据表;
# 需求分析
# 概念数据库设计
# 两种设计思路
# 消除冲突
# 设计结果
# 逻辑数据库设计
# 数据库设计理论
👆 上面这些后面会讲.
综合来讲, 逻辑数据库设计流程如下: