6. 数据库设计基础知识
1 数据库基本概念
- 数据(Data):描述事物的符号记录,具有多种形式。
- 信息(Information):反映现实世界事物的存在方式或状态。
- 数据库(Database, DB):长期存储在计算机内的数据集合。
- 数据库系统(Database System, DBS):采用数据库技术存储大量相关联数据,方便用户访问的计算机系统。
- 特点:数据共享、独立性、冗余度小、一致性高、易扩展。
- DBMS:数据库系统的核心软件,管理数据的存储和访问。
1.1 数据库技术的发展
- 人工管理阶段
- 数据量少,数据和程序一对一。
- 文件系统阶段
- 数据量增加,数据独立性,数据冗余,数据不一致,数据孤立。
- 数据库系统阶段
- 数据共享,数据独立性高,数据冗余少,数据一致性高。
1.2 数据模型
数据库的基础结构是数据模型,是用来描述数据的一组概念和定义。数据模型的三要素是数据结构、数据操作和数据的约束条件。
- 数据结构:数据的组织方式。
- 数据操作:对数据的操作。
- 数据约束:数据的完整性和一致性。
数据库技术的发展
- 层次和网状数据库系统
- 层次模型:树形结构表示数据。
- 网状模型:多对多联系。
- 关系数据库系统
- 关系模型:用表格结构表示数据及其关系。
- 第三代数据库系统
- 面向对象模型、语义数据模型、XML 数据模型。
- No SQL:支持简单 SQL 查询。
1.3 数据库管理系统(DBMS)
1.3.1 DBMS 功能
- 数据定义:提供数据定义语言(DDL),描述数据库结构。
- 数据操作:提供数据操纵语言(DML),实现数据库基本操作。
- 数据库运行管理:运行期管理,多用户并发控制,安全性检查和存取控制。
- 数据组织、存储和管理:组织、存储和管理数据,提高存取效率。
- 数据库建立和维护:数据库的建立、数据转换、性能监测和分析。
- 其他功能:与网络和其他软件系统的通信功能。
1.3.2 DBMS 特点
- 数据结构化且统一管理:描述数据联系,实现数据共享。
- 数据独立性:程序独立于数据存储,简化应用程序。
- 数据控制功能
- 数据安全性
- 定义:保护数据库免受非法使用和破坏。
- 措施:用户权限控制、数据加密、访问日志。
- 完整性
- 定义:确保数据正确性和相容性。
- 措施:数据验证、约束检查。
- 并发控制
- 定义:协调多用户访问数据库。
- 目标:保证数据完整性和一致性。
- 故障恢复 (recovery from failure):主要是指恢复数据库本身,即在故障导致数据库状态不一致时,将数据库恢复到某个正确状态或一致状态。
- 方法:冗余数据、事务日志、备份和恢复。
- 数据安全性
1.4 数据库三级模式
数据库系统体系结构
系统开发人员需要通过视图层、逻辑层和物理层三个层次上的抽象来对用户屏蔽系统的复杂性,简化用户与系统的交互。
- 视图层(View Level):描述数据库部分数据。
- 逻辑层(Logical Level):描述数据存储和组织方式。
- 物理层(Physical Level):数据存储细节。
数据库三级模式概述
数据库三级模式:外模式、概念模式和内模式。
- 外模式:用户视图,简化用户与系统的交互。
- 概念模式:数据库的整体逻辑结构。
- 内模式:数据的物理存储结构和存取方式。
模式间映射
- 外模式与概念模式映射:简化用户交互。
- 概念模式与内模式映射:逻辑到物理的转换。
数据库三级模式的作用
- 简化用户与数据库的交互。
- 屏蔽系统复杂性。
- 提高数据独立性。
- 支持数据共享。
总之,数据按外模式的描述提供给用户,按内模式的描述存储在磁盘上,而概念模式提供了连接这两极模式的相对稳定的中间观点,并使得两级的任意一级的改变都不受另一级的牵制。
2 关系数据库
2.1 关系数据库基本概念
关系数据库系统:支持关系数据模型的数据库系统。
2.1.1 关系的基本术语
- 属性(Attribute):描述事物特征。例如学生通过学号、姓名、性别、系别、年龄、籍贯等属性来描述。
- 域(Domain):属性值范围。
- 目或度 (Degree): 目或度指的是一个关系中属性的个数。
- 候选码(Candidate Key):唯一标识元组,则称该属性或属性组为候选码。
- 主码(Primary Key):或称主键,若一个关系有多个候选码,则选定其中一个作为主码。
- 主属性 (Prime Attribute): 包含在任何候选码中的属性称为主属性。不包含在任何候选码中的属性称为非主属性 (Non-Prime Attribute)。
- 外码(Foreign Key):引用其他关系属性。
- 全码(All-Key):关系模型的所有属性组是这个关系模式的候选码,称为全码。
- 笛卡尔积:数学表达式:A × B = {(a,b) | a ∈ A ∧ b ∈ B}
2.1.2 关系数据库模式
- 关系模式:关系数据库的结构描述。
- 定义:关系模式 ,其中 为关系名, 为属性名集合, 为属性域, 为属性值域, 为函数依赖集合。
2.1.3 关系的完整性约束
- 实体完整性(Entity Integrity):主键唯一且非空。
- 参照完整性(Referential Integrity):外码引用存在。
- 用户定义完整性(User Defined Integrity):特定应用约束。
2.2 关系运算
- 关系运算:操作对象和操作结果都是集合。
- 5 种基本运算
- 并集运算符:∪
- 交集运算符:∩
- 笛卡尔积运算符:×
- 选择运算符:σ
- 投影运算符:π
- 其他运算可以通过基本的关系运算导出。
关系代数运算符
- 集合运算符
- 并(Union)U
- 合并两个关系模式相同的关系。
- 交(Intersection) ∩
- 找出同时属于两个关系的元组。
- 差(Difference)差集运算符:-
- 找出属于第一个关系而不属于第二个关系的元组。
- ×
- 并(Union)U
- 比较运算符
>
≥
<
≤
=
≠
- 逻辑运算符
- 逻辑与:∧
- 逻辑或:∨
- 逻辑非:¬
- 专门的关系运算符
- 选择运算符:σ
- 投影运算符:π
- 连接(Join) 连接运算符:⨝
- θ 连接:从 R 与S 的笛卡尔积中选取属性满足一定条件的元组
- 等值连接:基于等值条件的连接。
- 自然连接 (Natural Join) :基于相同属性的连接。自然连接是一种特殊的等值连接。
- 广义投影(Generalized Projection):扩展连接运算。
- 外连接(Outer Join)
- 左外连接:保留左关系所有元组。
- 右外连接:保留右关系所有元组。
- 全外连接:保留两个关系所有元组。
- 除(Division)除法运算符:÷
- 找出满足特定条件的关系。
聚集运算
- 聚集函数:对关系中的元组进行聚集计算。
- 常用聚集函数:sum(求和)、avg(平均值)、min(最小值)、max(最大值)、count(计数)。
2.3 关系数据库设计基本理论
2.3.1函数依赖
- 定义:一个关系中属性间值的相等与否体现的相互关系。
- 类型:完全函数依赖、部分函数依赖、传递函数依赖。
2.3.2 多值依赖
- 定义:属性组之间的值依赖关系。
- 特性:传递性、闭包性质。
2.3.3 规范化
- 目的:减少数据冗余、提高数据一致性。
- 范式:1NF、2NF、3NF、BCNF、4NF 和 5NF。
- INF:一个关系模式中每个分量都是不可再分的数据项。
- 2NF:每个非主属性完全函数依赖主码。
- 3NF:3NF(Third Normal Form, 第三范式),消除部分函数依赖。
- BCNF:BCNF(Boyce Codd Normal Form, 巴克斯范式),消除部分函数依赖和传递函数依赖。
- 4NF:关系模式中每个非平凡且非函数依赖的多值依赖满足一定条件。
- 过程:分解关系模式,消除数据冗余和异常。
3 数据库设计
3.1 数据库设计的基本步骤
- 用户需求分析:分析和定义用户需求。
- 概念结构设计:形成独立于计算机系统的企业信息模型。
- 逻辑结构设计:将概念模型转化为数据库管理系统支持的逻辑模型。
- 物理结构设计:在计算机中实现逻辑模型。
- 数据库实施:建立数据库,组织数据入库。
- 数据库运行和维护:试运行和维护数据库。
6.3.2 数据需求分析
- 信息需求分析:确定系统中保存信息及其完整性。
- 处理要求:确定系统功能和性能要求。
- 系统要求:确定安全性、使用方式等要求。
3.3 概念结构设计
- 定义:分析和定义信息及其关系。
- 工具:E-R图。
3.4 逻辑结构设计
- 定义:将概念模型转化为逻辑模型。
- 模型:模式结构设计、子模式设计、应用设计。
3.4.1 ER 图转换为关系模式
- 实体转换:实体名对应关系模式名称,实体属性为关系模式的属性。
- 联系转换:一对一、一对多、多对多联系分别转换为独立关系模式或增加属性。
3.4.2 关系模式规范化
- 目的:消除数据冗余,更新异常。
- 步骤:
- 确定各关系模式的数据依赖。
- 确定关系模式的范式。
- 根据规范化理论,调整关系模式。
3.4.3 确定完整性约束
- 定义:确保数据的正确性。
- 方法:SQL标准约束、主码约束。
3.4.4 确定用户视图
- 定义:从用户角度建立视图模式。
- 考虑:用户需求、使用权限。
3.4.5 反规范化
对关系模式进行修正,对部分影响性能的关系模式进行处理,包括分解、合并、增加冗余属性等。
3.5 物理结构设计
一般来说,物理设计的主要工作步骤包括确定数据分布、存储结构和访问方式。
3.6 数据库实施阶段
根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构,数据加载(或称装入),进行试运行和评价的过程,叫作数据库的实施(或称实现)。
3.7 数据库运行和维护
数据库维护工作的主要内容包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。在数据库运行阶段,对数据库的维护主要由 DBA 完成。
6.4 应用程序与数据库的交互
在应用系统中,需要高级程序语言来完成与用户之间的交互,用户不能直接访问后台的数据库。因此数据库管理系统需要提供程序级别的接口来访问数据。
6.4.1 库函数级别访问接口
- 定义:数据库提供的最底层访问数据接口。
- 工具:Oracle 数据库的 OCI。
- 特点:强依赖特定数据库,开发效率不高。
6.4.2 嵌入式 SQL 访问接口
- 定义:将 SQL 语句直接写入高级程序语言。
- 工具:C、COBOL、Java、Ada。
- 特点:需要编译,效率低。
6.4.3 通用数据接口标准
- ODBC(Open Database Connectivity)
- 定义:为解决异构数据库间数据共享而产生的。
- 组成:DAO、RDO、ADO。
- 优点:统一访问不同数据库系统。
- 应用:ADO、DAO、RDO。
6.4.4 ORM 访问接口
对象关系映射 (Object Relational Mapping, 简称 ORM 或 O/RM 或 O/R mapping) 是一种程序设计技术,用于实现面向对象编程语言里不同类型系统数据之间的转换。
- 特点:降低数据库访问复杂度。
- 工具:Hibernate、Mybatis、JPA(Java Persistence API)。
7 NoSQL 数据库
7.1 NoSQL 数据库概述
- NoSQL 数据库:最常见的解释是 Non-Relational,Not Only SQL也被很多人接受。泛指非关系型的数据库,不保证关系数据库的 ACID 特性。
- 优势:灵活、可扩展性、高性能、易部署。
7.2 NoSQL 数据库类型
- 列式存储数据库
- 特点:按列存储数据,适合分析型查询。
- 键值对存储数据库
- 特点:通过键值对存储数据,简单易部署。
- 文档型数据库
- 优势:存储半结构化文档,灵活。
- 图数据库
- 适用:社交网络数据、生物信息网络。
7.3 NoSQL 数据库特点
- 灵活的数据模型:支持多种数据结构。
- 高可用性:易于扩展和复制。
- 简单的数据模型:易于理解和使用。
- 对数据类型要求低:容易映射复杂值。
7.4 NoSQL 数据库体系框架
NoSQL 整体框架分为 4 层,由下至上分为数据持久层 (Data Persistence)、 数据分布层(Data Distribution Model)、 数据逻辑模型层 (Data Logical Model) 和接口层 (Interface), 层次之间相辅相成,协调工作。