1. Database Design
////时间不够了, 因此先记一个大纲, 有时间补上
结构和行为分离的设计
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230606231448262.png)
设计方法
- 新奥尔良
New Orleans( 方法) - 基于E-R模型的数据库设计方法
- 3NF
第三范式( 的设计方法) - 面向对象的数据库设计方法
- 统一建模语言
UML( 方法)
数据库设计中最重要的是基础数据本身, 而我们将数据抽象成数据模型: 数据结构 + 数据操作 + 数据约束.
数据模型又被抽象成这样的三个部分:
- 概念数据模型: 直观上主要研究E-R图的设计
- 结构数据模型: 直观上主要研究关系模型的设计
- 物理数据模型: 直观上并不需要数据库使用者来操心
2. Demanding Analysis
3. Conceptual Model & Entity-Relationship Model
将需求分析得到的用户需求抽象为信息结构
E-R模型是描述概念结构的工具
两个实体型之间的联系
- 一对一 (1 : 1)
- 一对多 (1 : n)
- 多对多 (m : n)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230606233922968.png)
两个以上的实体型之间的联系
- 一对一 (1 : 1)
- 一对多 (1 : n)
- 多对多 (m : n)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230606234146920.png)
单个实体型内的联系
- 实体型是相对的, 一个实体型可以由多个子实体型构成
联系的度
-
2个实体型之间的联系度为2
也称为二元联系, -
N个实体型之间的联系度为N
也称为N元联系,
E-R图提供了表示实体型
- 实体型
用矩形表示: 矩形框内写明实体名, 。 - 属性
用椭圆形表示: 并用无向边将其与相应的实体型 连接起来, 。 - 联系
用菱形表示: 菱形框内写明联系名, 并用无 向边分别与有关实体型连接起来, 同时在无向边旁 标上联系的类型, 1∶1( 1∶n或m∶n, ) 。 - 联系可以具有属性
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230606234407256.png)
实体性之间联系的类型:
1. ISA联系:
有的实体型是某个实体型的子类型
这种父类-子类 联系称为ISA联系 , 表示 , is a “ 语义 ” 用△表示 。 。
ISA联系的性质: 子类继承了父类的所有属性
分类属性是父实体型的一个属性 (分类属性的值把父实体型中的实体分派到 子实体型中)
ISA联系中, 子类之间的约束关系可以有几种
-
基数约束: 说明实体型中的任何一个实体可以在联系中出现的最少 次数和最多次数
- 实际上是对实体之间一对一
一对多、 多对多联系的细化、 - 约束用一个数对 min…max表示
0≤min ≤ Smax, 例如。 0…1, 1…3, 1…*, , 其中*代表无穷大, 。 - 强制参与约束: min = 1
- 非强制参与约束: min = 0
- 实际上是对实体之间一对一
-
完备性约束: 描述父类中的一个实体是否必须是某一个子类中的实体 (一个学生要么是研究生要么是本科生. etc)
- 如果是
则叫做完全特化( total specialization ) : 完全特化用父类到子类的双线连接来表示, - 否则叫做部分特化( partial specialization) : 部分特化用父类到子类的单线连接来表示
- 如果是
-
不相交约束: 一个父类中的实体最多属于一个子类实体集 (用ISA联系符号三角形的-一个叉号
X"来表示“ )。 -
可重叠约束: 父类中的一个实体能同时属于多个子类中的实体集
子类符号中没有叉号表示是可重叠的。 。
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607000654337.png)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607000850814.png)
2. Part-of 联系
描述某个实体型是另外一个 实体型的一部分
- 非独占的 Part-of 联系
简称 非独占联系 (整体实体如果被破坏, 另一部分实体仍然可以独立存在), - 独占的 Part-of 联系
简称独占联系 (整体实体如果被破坏, 部分实体不能存在),
如果一个实体型的存在依赖于其它实体型的存在
用弱实体类型和识别联系来表示独占联系双矩形表 示弱实体型
3. 识别联系 (Identifying Relationship)
4. Conceptual Structure Design
设计方法:
- 自顶向下, 逐步求精
- 自底向上
- 逐步扩张
首先定义全局概念结构的框架
然后逐步细化 ,
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607162002677.png)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607162037156.png)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607162127178.png)
![](https://naturalifica.oss-cn-nanjing.aliyuncs.com/~/Users/wuchentian/SoloLearning/Blog/source/imgs/image-20230607162227824.png)
5. Conceptual Structure Design (plus)
E-R图合并时可能的冲突
- 属性冲突
属性域冲突: 即属性值的类型, 取值范围或取值集合不同、 - 命名冲突
同名异义: 异名同义, - 结构冲突
同一对象具有不同的抽象: 同一实体包含属性不同, 实体间的联系类型不同,
6. Logical Structure Design
逻辑结构设计要做这样的事: 把概念结构设计阶段设计好的基本E-R图转换 为与选用数据库管理系统产品所支持的数据模 型相符合的逻辑结构
一个实体型转换为一个关系模式
- 关系的属性
实体的属性: - 关系的码
实体的码:
在转换的过程中, 可能会遇到不同的联系类型, 可以进行相应的转换 / 合并
转换好了之后, 由于数据库逻辑设计的结果不是唯一的, 还应该适当地修改
如何优化: 关系数据模型的优化通常以规范化理论为 指导
6.2. Decomposing
对关系模式进行必要分解
常用分解方法
- 水平分解: 把(基本)关系的元组分为若干子集合
定义每 个子集合为一个子关系, 以提高系统的效率, 。 - 垂直分解: 把关系模式R的属性分解为若干子集合
形成若干 子关系模式, 。