> For the complete documentation index, see [llms.txt](https://lewiszlw.gitbook.io/notebooks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lewiszlw.gitbook.io/notebooks/blogs/history/shu-ju-ku-she-ji.md).

# 数据库设计

## 数据库设计概述

广义的数据库设计是指对于一个给定的应用环境，构造（设计）优化的数据库逻辑模式和物理结构，并据此建立数据库及其应用系统，使之能够有效地存储和管理数据，满足各种用户的应用需求，包括信息管理要求和数据操作要求。（DB+DBAS）

狭义的数据库设计是指对于一个给定的应用环境，构造（设计）优化的数据库逻辑模式和物理结构。（DB）

目标：为用户和各种应用系统提供一个信息基础设施和高效率的运行环境

### 数据库设计的特点

1. 数据库建设的基本规律 “三分技术，七分管理，十二分基础数据” “十二分基础数据”则强调了数据的收集、整理、组织和不断更新是数据库建设中的重要环节。
2. 结构（数据）设计和行为（处理）设计相结合

### 数据库设计方法

* 手工与经验相结合的方法
* 规范设计法 基本思想：过程迭代和逐步求精
  * 新奥尔良方法
  * 基于E-R模型的设计方法
  * 3NF（第三范式）的设计方法
  * 面向对象的数据库设计方法
  * 统一建模语言方法

### 数据库设计的基本步骤

数据库设计分6个阶段

1. 需求分析
2. 概念结构设计
3. 逻辑结构设计
4. 物理结构设计
5. 数据库实施
6. 数据库运行和维护

需求分析和概念设计独立于任何数据库管理系统 逻辑设计和物理设计与选用的DBMS相关

1. 需求分析阶段

* 准确了解与分析用户需求（包括数据与处理）
* 最困难、最耗费时间的一步

1. 概念结构设计阶段

* 整个数据库设计的关键
* 通过对用户需求进行综合、归纳与抽象，形成一个独立于具体DBMS的概念模型 （用ER图表示）

1. 逻辑结构设计阶段

* 将概念结构转换为某个DBMS所支持的数据模型
* 对其进行优化

1. 数据库物理设计阶段

* 为逻辑数据模型选取一个最适合应用环境的物理结构（包括存储结构和存取方法）

1. 数据库实施阶段 运用DBMS提供的数据库语言（如SQL）及宿主语言，根据逻辑设计和物理设计的结果

* 建立数据库
* 编制与调试应用程序
* 组织数据入库
* 进行试运行

1. 数据库运行和维护阶段

* 数据库应用系统经过试运行后即可投入正式运行
* 在数据库系统运行过程中必须不断地对其进行评价、调整与修改

### 数据库设计过程中的各级模式

![数据库设计1](http://ofolh8dcq.bkt.clouddn.com/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A11.PNG) 依次对应需求分析阶段、概念结构设计阶段、逻辑结构设计阶段和物理结构设计阶段。

## 需求分析

### 需求分析的任务

需求分析的任务是通过详细调查现实世界要处理的对象（组织、部门、企业等），充分了解原系统（手工系统或计算机系统）工作概况，明确用户的各种需求，在此基础上确定新系统的功能，新系统必须充分考虑今后可能的扩充和改变。

调查的重点是“数据”和“处理”，获得用户对数据库的要求：

* 信息要求。用户需要从数据库获取信息的内容和性质。
* 处理要求。用户要完成的数据处理功能，对处理性能的要求。
* 安全性和完整性要求。

### 需求分析的方法

调查步骤： （1） 调查组织机构情况 （2） 调查各部门的业务活动情况 （3） 分析用户需求 （4） 确定新系统的边界

常用调查方法： （1）跟班作业 （2）开调查会 （3）请专人介绍 （4）询问 （5）设计调查表请用户填写 （6）查阅记录

### 数据字典

数据字典是进行详细的数据收集和数据分析所获得的主要成果。它是关于数据库中数据的描述，即元数据，而不是数据本身。数据字典是在需求分析阶段建立，在数据库设计过程中不断修改、充实、完善的。它在数据库设计中占有很重要的地位。

数据字典的内容

* 数据项
* 数据结构
* 数据流
* 数据存储
* 处理过程

数据项是数据的最小组成单位 若干个数据项可以组成一个数据结构 数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容

1. 数据项

* 数据项是不可再分的数据单位
* 对数据项的描述 数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
  * “取值范围”、“与其他数据项的逻辑关系”定义了数据的完整性约束条件，是设计数据检验功能的依据
  * 可以用关系规范化理论为指导，用数据依赖的概念分析和表示数据项之间的联系

1. 数据结构

* 数据结构反映了数据之间的组合关系。
* 一个数据结构可以由若干个数据项组成，也可以由若干个数据结构组成，或由若干个数据项和数据结构混合组成。
* 对数据结构的描述 数据结构描述={数据结构名，含义说明，组成:{数据项或数据结构}}

1. 数据流

* 数据流是数据结构在系统内传输的路径。
* 对数据流的描述 数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
  * 数据流来源：说明该数据流来自哪个过程
  * 数据流去向：说明该数据流将到哪个过程去
  * 平均流量：在单位时间（每天、每周、每月等）里的传输次数
  * 高峰期流量：在高峰时期的数据流量

1. 数据存储

* 数据存储是数据结构停留或保存的地方，也是数据流的来源和去向之一。
* 对数据存储的描述 数据存储描述={数据存储名,说明,编号,输入的数据流 ,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
  * 存取频度：每小时、每天或每周存取次数，每次存取的数据量等信息
  * 存取方法：批处理 / 联机处理；检索 / 更新；顺序检索 / 随机检索
  * 输入的数据流：数据来源
  * 输出的数据流：数据去向

1. 处理过程

* 处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息
* 处理过程说明性信息的描述 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
  * 功能：该处理过程用来做什么
  * 处理要求：处理频度要求，如单位时间里处理多少事务，多少数据量、响应时间要求等
  * 处理要求是后面物理设计的输入及性能评价的标准

## 概念结构设计

将需求分析得到的用户需求抽象为信息结构（即概念模型）的过程就是概念结构设计。

### 概念模型

概念模型的特点

* 能比较真实地模拟现实世界
* 易于理解
* 易于修改
* 易于向关系、网状、层次等各种数据模型转换

描述概念模型的工具

* E-R模型

### E-R模型

实体之间的联系

* 两个实体型之间的联系
  * 一对一联系（1∶1）
  * 一对多联系（1∶n）
  * 多对多联系（m∶n）
* 两个以上的实体型之间的联系 一般地，两个以上的实体型之间也存在着一对一、一对多和多对多联系。
* 单个实体型内的联系 同一个实体集内的各实体也可以存在着一对一、一对多和多对多的联系。

一般地，把参与联系的实体型的数目称为联系的度。两个实体型之间的联系度为2，也称为二元联系；三个实体型之间的联系度为33，称为三元联系；N个实体型之间的联系度为N，也称为N元联系。

E-R图

* 实体型：用矩形表示，矩形框内写明实体名。
* 属性：用椭圆形表示，并用无向边将其与相应的实体连接起来。
* 联系：用菱形表示，菱形框内写明联系名，并用无向边分别与有关实体连接起来，同时在无向边旁标上联系的类型（1:1、1:n或m:n）。

需要注意的是，如果一个联系具有属性，则这些属性也要用无向边与该联系连接起来。

### 概念结构设计

实体与属性的划分原则

* 为了简化E-R图的处置，现实世界的事物能作为属性对待的，尽量作为属性对待。
* 两条准则：
  * 属性不能再具有需要描述的性质。即属性必须是不可分的数据项，不能再由另一些属性组成
  * 属性不能与其他实体具有联系。联系只发生在实体之间

E-R图的集成 E-R图的集成步骤

* 合并
* 修改与重构

（1）合并分E-R图，生成初步E-R图

* 各个局部应用所面向的问题不同，各个子系统的E-R图之间必定会存在许多不一致的地方，称之为冲突。
* 冲突的种类
  * 属性冲突
    * 属性域冲突 属性值的类型 取值范围 取值集合不同
    * 属性取值单位冲突
  * 命名冲突
    * 同名异义：不同意义的对象在不同的局部应用中具有相同的名字
    * 异名同义（一义多名）：同一意义的对象在不同的局部应用中具有不同的名字
  * 结构冲突
    * 同一对象在不同应用中具有不同的抽象
    * 同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同
    * 实体之间的联系在不同的E-R图中呈现不同的类型

（2）消除不必要的冗余，设计基本E-R图

* 冗余的数据是指可由基本数据导出的数据，冗余的联系是指可由其他联系导出的联系 。
* 消除冗余主要采用分析方法 以数据字典和数据流图为依据，根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。
* 规范化理论来消除冗余
  * 确定分E-R图实体之间的数据依赖。
  * 求函数依赖集FL的最小覆盖GL，差集为 D=FL-GL

## 逻辑结构设计

逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。

### E-R图向关系模型的转换

转换内容

* E-R图由实体型、实体的属性和实体型之间的联系三个要素组成
* 关系模型的逻辑结构是一组关系模式的集合
* 将E-R图转换为关系模型：将实体型、实体的属性和实体型之间的联系转换为关系模式。

转换原则

1. 一个实体型转换为一个关系模式。
2. 实体型间的联系有以下不同情况

* 一个1:1联系
  * 转换为一个独立的关系模式
  * 与某一端实体对应的关系模式合并
* 一个1:n联系
  * 转换为一个独立的关系模式
  * 与n端对应的关系模式合并
* 一个m:n联系转换为一个关系模式
* 三个或三个以上实体间的一个多元联系转换为一个关系模式。
* 具有相同码的关系模式可合并
  * 目的：减少系统中的关系个数
  * 合并方法：将其中一个关系模式的全部属性加入到另一个关系模式中，然后去掉其中的同义属性（可能同名也可能不同名），并适当调整属性的次序

### 数据模型的优化

得到初步数据模型后，还应该适当地修改、调整数据模型的结构，以进一步提高数据库应用系统的性能，这就是数据模型的优化。 关系数据模型的优化通常以规范化理论为指导。

优化数据模型的方法

1. 确定数据依赖 按需求分析阶段所得到的语义，分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖
2. 消除冗余的联系 对于各个关系模式之间的数据依赖进行极小化处理，消除 冗余的联系。
3. 确定所属范式

* 按照数据依赖的理论对关系模式逐一进行分析
* 考查是否存在部分函数依赖、传递函数依赖、多值依赖等
* 确定各关系模式分别属于第几范式

1. 按照需求分析阶段得到的各种应用对数据处理的要求，分析对于这样的应用环境这些模式是否合适，确定是否要对它们进行合并或分解。 注意：并不是规范化程度越高的关系就越优，一般说来，第三范式就足够了
2. 按照需求分析阶段得到的各种应用对数据处理的要求，对关系模式进行必要的分解，以提高数据操作的效率和存储空间的利用率

### 设计用户子模式

定义用户外模式时应该注重的问题，包括三个方面： (1)使用更符合用户习惯的别名 (2)针对不同级别的用户定义不同的View ，以满足系统对安全性的要求。 (3)简化用户对系统的使用

## 物理结构设计

数据库在物理设备上的存储结构与存取方法称为数据库的物理结构，它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程，就是数据库的物理设计。

数据库物理设计的步骤

1. 确定数据库的物理结构，在关系数据库中主要指存取方法和存储结构
2. 对物理结构进行评价，评价的重点是时间和空间效率 如果评价结果满足原设计要求，则可进入到物理实施阶段，否则，就需要重新设计或修改物理结构，有时甚至要返回逻辑设计阶段修改数据模型

### 数据库物理设计的内容和方法

设计物理数据库结构的准备工作

* 对要运行的事务进行详细分析，获得选择物理数据库设计所需参数
* 充分了解所用RDBMS的内部特征，特别是系统提供的存取方法和存储结构

选择物理数据库设计所需参数

* 数据库查询事务
  * 查询的关系
  * 查询条件所涉及的属性
  * 连接条件所涉及的属性
  * 查询的投影属性
* 数据更新事务
  * 被更新的关系
  * 每个关系上的更新操作条件所涉及的属性
  * 修改操作要改变的属性值
* 每个事务在各关系上运行的频率和性能要求

关系数据库物理设计的内容

* 为关系模式选择存取方法(建立存取路径)
* 设计关系、索引等数据库文件的物理存储结构

### 关系模式存取方法选择

DBMS常用存取方法

* B+树索引方法
* HASH方法
* 聚簇（Cluster）方法

B+树索引存取方法的选择 选择索引存取方法的一般规则

* 如果一个(或一组)属性经常在查询条件中出现，则考虑在这个(或这组)属性上建立索引(或组合索引)
* 如果一个属性经常作为最大值和最小值等聚集函数的参数，则考虑在这个属性上建立索引
* 如果一个(或一组)属性经常在连接操作的连接条件中出现，则考虑在这个(或这组)属性上建立索引

HASH存取方法的选择 选择Hash存取方法的规则 如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中，而且满足下列两个条件之一

* 该关系的大小可预知，而且不变；
* 该关系的大小动态改变，但所选用的数据库管理系统提供了动态Hash存取方法。

聚簇存取方法的选择 聚簇

* 为了提高某个属性（或属性组）的查询速度，把这个或这些属性（称为聚簇码）上具有相同值的元组集中存放在连续的物理块称为聚簇

设计候选聚簇 （1）常在一起进行连接操作的关系可以建立组合聚簇 （2）如果一个关系的一组属性经常出现在相等比较条件中，则该单个关系可建立聚簇； （3）如果一个关系的一个（或一组）属性上的值重复率很高，则此单个关系可建立聚簇。

### 确定数据库的存储结构

确定数据库物理结构主要指确定数据的存放位置和存储结构，包括：确定关系、索引、聚簇、日志、备份等的存储安排和存储结构，确定系统配置等。

确定数据的存放位置和存储结构要综合考虑存取时间、存储空间利用率和维护代价3个方面的因素。

## 数据库的实施和维护

### 数据的载入和应用程序的调试

1. 数据的载入 (load) 数据库结构建立好后，就可以向数据库中装载数据了。组织数据入库是数据库实施阶段最主要的工作。 数据装载方法

* 人工方法
* 计算机辅助数据入库

1. 应用程序的编码和调试

* 数据库应用程序的设计应该与数据设计并行进行
* 在组织数据入库的同时还要调试应用程序

### 数据库的试运行

数据库试运行主要工作包括：

* 功能测试
* 性能测试

### 数据库的运行和维护

在数据库运行阶段，对数据库经常性的维护工作主要是由DBA完成的，包括：

* 数据库的转储和恢复 制定不同的转储计划，定期进行备份。
* 数据库的安全性、完整性控制 初始定义，修改定义
* 数据库性能的监督、分析和改进 监督系统运行，进行数据分析，改进系统性能的。
* 数据库的重组织和重构造

> 《数据库系统概论（第5版）》王珊 萨师煊 著
