Skip to content

数据库原理

标签
绩点/专业课
开发/后端
绩点
开发
字数
5260 字
阅读时间
22 分钟

知识复习

基本概念

chap.1 2

DBS系统构成

数据库 DB 的概念和特点

数据库 ( Database, DB )长期储存在计算机内、有组织可共享的大量数据集合

特点:

  • 数据按一定的数据模型组织、描述和储存
  • 可为各种用户共享
  • 冗余度较小
  • 数据独立性较高
  • 易扩展

数据库管理系统 DBMS 的功能

数据库管理系统 ( Database Management System, DBMS ):位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据

功能

  • 数据定义:提供数据定义语言 ( Data Definition Language, DDL )
  • 数据操纵:提供数据操纵语言 ( Data Manipulation Language, DML )
  • 完整性约束检查
  • 访问控制:提供数据控制语言 ( Data Control Language, DCL )
  • 并发控制 ( Concurrency Control )
  • 恢复功能 ( Database Recovery )

数据库系统 DBS 的特点与组成要素

数据库系统 ( Database System, DBS ):在计算机系统中引入数据库后的系统构成,不引起混淆的情况下简称为数据库

特点(与文件系统相比):

  1. 整体数据结构化
  2. 数据共享性高
  3. 数据独立性高
  4. 高度的数据控制能力
    • 较高的数据安全性 security —— DBMS
    • 较好的数据完整性 Integrity —— DBMS
    • 较强的并发控制能力
    • 较强的数据恢复能力

构成

  • 数据库
  • 数据库管理系统(及其开发工具)
  • 应用系统
  • 数据库管理员 DBA (和用户)

最主要模块

  • 查询处理器
  • 存储管理器
  • 事务管理器

数据库管理员 DBA 的职责

数据库管理员 ( Database Administrator, DBA ):数据库所属单位的代表

主要职责

  • 在用户与数据库开发人员之间进行沟通和协调
  • 参与数据库设计工作
  • 决定数据的完整性约束条件和不同用户的存取权限
  • 保证数据库的正常运行,进行数据库的维护工作
  • 提出数据库的重构计划

C/SB/S的区别

客户端/服务器系统 ( Client/Server, C/S ) :一服务器多客户机

浏览器/服务器系统 ( Browse/Server, B/S ): 三层结构的C/S模式,增加了应用服务器(Web服务器中间层)

DB的三级结构与关系数据模型的实例

三级模式的优点及各级之间的关系

三级模式结构

  1. 外模式 ( Extern Schema ):子模式 Sub、用户模式
    • 一个应用程序使用一个外模式,一个外模式可被多个应用程序使用
    • DBMS 提供 外模式描述语言 (Sub-DDL) 来描述外模式
  2. 模式 ( Schema ):概念模式 Conceptual
    • 全体数据在逻辑上的视图
    • 定义全部数据的逻辑结构
    • 只描述了结构,不设计硬件环境、物理存储细节、计算机语言
    • DBMS 提供 模式描述语言 (模式DDL) 来描述外模式
  3. 内模式 ( Internal Schema ):存储模式 Storage
    • 全部数据的物理结构
    • 存储方法、存储策略
    • 与软硬件环境有关 一个数据库系统——一个模式和一个内模式——多个外模式

实际的数据库 -> 内模式 应用程序 -> 外模式

数据独立的含意: 通过映射关系对模式结构进行隔离,确保独立性

  1. 逻辑独立性
    • 数据库模式改变时,只需要改变外模式/模式映像,不必改变外模式
  2. 物理独立性
    • 数据库内模式改变时,只需要改变模式/内模式映像,不必改变模式和外模式

三大世界的概念

  1. 现实世界
  2. 信息世界:现实世界在人脑中的反映
    • 真实;完整、精确;易于理解、易于修改;易于向 DBMS 所支持的数据模型转换
    • (现实世界)事物 / 事物特征 -> 实体 / 实体属性
    • 描述信息世界的数据模型——概念模型
  3. 数据世界:信息世界数据化后的产物
    • (信息世界)实体 / 属性 -> 记录 / 数据项

数据模型三要素

  1. 数据结构
  2. 数据操作
  3. 完整性约束

概念模型中的概念和表示方法

概念模型的基本概念

  1. 实体 Entity:对象或概念
  2. 属性 Attribute:实体的属性,属性名+属性值
  3. Domain :属性的取值范围
  4. 实体集 Entity Set:所有属性名完全相同的实体的集合,名称即实体名,同一实体集无完全相同的实体
  5. 实体型 Entity Type:实体名 + 其所有属性名 的集合
  6. Key:唯一确定实体的属性或属性组,有时也称候选码 (Candidate Key)

概念模型、逻辑模型、物理模型的关系

  • 概念模型:业务逻辑 E-R图
  • 逻辑模型:具体化设计 关系模型
  • 物理模型:数据库实现 数据库构建语句

关系数据模型的三要素

  1. 关系数据结构
  2. 关系操作集合
  3. 关系完整性约束

基本表、视图均可作为用户视图,模型由基本表构成,存储模式为储存文件

对关系模型,不论实体或联系均用统一的关系(表)来表示 在设计中体现为抽离的联系和实体形式一致

关系数据库的操作

chap.3 4 5 6 10

国内外数据库产品

  • 国外:关系型数据库 RDBMS —— DB2、Oracle、Sybase、Informix、Ingres、Microsoft SQL Server、MySQL、PostgreSQL
  • 国内:分布式关系型数据库 TiDB、达梦数据库、华为的 openGauss 和云数据库 Gauss DB、阿里的 OceanBase 和 PolarDB、腾讯云 TDSQL、人大金仓数据库、南大通用 GBase

关系代数与运算

超级简略版

不是很会打公式,就一天复习实在没什么空了 下次再说考完试有空会回来更完

  1. 关系的基本运算规则 交、差、并、除(这个我们好像不考)、连接、投影、选择
  2. 正确使用关系代数SQL编程

SQL语句

数据定义语句 (Data Definition Language, DDL) :CREATE、ALTER、DROP

CREATE

SQL
CREATE TABLE <表名>
(<列定义清单>);

CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX <索引名> 
ON <表名|视图名>(<列名清单>); 
-- 聚簇索引,在表或视图中唯一,利查询不利更新
-- 列名清单每个列名后指定 ASC(升序),DESC(default)(降序)

ALTER

SQL
ALTER TABLE <表名>
	[ADD <列名><数据类型>[列的完整性约束]]|[ADD <表级完整性约束>]
	[ALTER COLUMN <列名><新的数据类型>]  -- openGauss使用 MODIFY <列名><新的数据类型>
	[DROP COLUMN <列名>]
	[DROP CONSTRAINT <表级完整性约束名>]

DROP

SQL
DROP TABLE <表名1>[, <表名2>]

DROP INDEX <索引名1>[, <索引名2>]-- <索引名> = <表名|视图名.索引名>

数据操作语句 (Data Manipulation Language, DML):INSERT、UPDATE、SELECT、DELETE

SELECT

设计嵌套、子查询时,从外向内解构要求(从需要的内容开始),从内向外设计SQL(从查询出发点开始),每次套一层逻辑会更顺

SQL
SELECT * 
FROM Employee
where not exist
	(
		SELECT * 
		FROM Item_Emp
		WHERE Eno = Employee.Eno
	)

INSERT

SQL
INSERT INTO <表名>[<属性名清单>]
VALUES (<常量清单>);

UPDATE

SQL
UPDATE <表名>
SET <列名> = <表达式> [, <列名> = <表达式>]
[WHERE <条件>];

DELETE

SQL
DELETE FROM <表名>
[WHERE <条件>];

数据控制语句 (Data Control Language, DCL)GRANTREVOKE

GRANT

SQL
GRANT <权限清单>
	[ON <对象类型><对象名>]
	TO <用户标识符清单> [WITH GRANT OPTION] -- 权限传播能力

REVOKE

SQL
REVOKE <权限清单>
	[ON <对象类型><对象名>]
	FROM <用户标识符清单> [CASCADE] -- 级联收回

数据库编程的概念基础

存储过程

用户自定义函数

游标

数据存储与查询优化

文件组织方法

  • 堆文件组织:需要周期性重组
  • 顺序文件组织:溢出文件需要周期性重组
  • 索引文件组织
  • 散列文件组织

索引与散列

  1. 顺序索引
    • 索引顺序文件——建立了主索引的顺序文件,主索引唯一
      • 稠密索引——一一对应
      • 稀疏索引——只对部分数据进行索引
    • 多级索引——处理庞大情况
    • 辅助索引
  2. 散列索引
    • 静态散列
    • 动态散列(可扩展散列表)——桶分裂
  3. B+树索引:复杂高效

查询处理与查询优化

查询处理RDBMS 执行查询语句的过程,从SQL语句到物理表达式,同时进行查询优化

  1. 查询分析和检查
    • 扫描器 (Scanner) 识别语言标记、语法分析
    • 语法分析器 (Parser) 进行语法检查
  2. 生成查询树
  3. 查询优化
    • 查询优化器 (Query Optimizer) 完成代数优化存取路径的优化
  4. 生成执行规划
    • 代码生成器 (Code Generator) 的预编译模块生成
  5. 运行查询代码
  6. 返回结果

查询优化:等价变换,减小代价

  1. 转换成内部表示形式,一般为语法树
  2. 代数优化
  3. 代价估计物理优化
  4. 生成查询执行方案

关系代数相关知识

查询优化的一般策略

  1. 尽早执行选择
  2. 高频属性建立索引分类排序
  3. 同一关系的投影选择运算同时进行
  4. 选择选择之前笛卡尔积结合成连接运算
  5. 投影前后双目运算结合进行
  6. 公共表达式结果存为外存,需要时再读入

先列最直接的SQL语句代数式,再拆分选择 -> 连接替代选择 -> 投影必要字段 即可

实际做题只需要跟着书本例题过一遍就行,感觉不会考的很难

数据库设计

chap.2 7 8

实体-联系模型 E-R图

E-R模型:表示概念模型最常用的模型

  • 实体:矩形
  • 属性:圆形
  • 联系集:菱形
  1. 使用E-R图表示数据库概念结构的方法 chap.2

分ER模型合并时的三类冲突

  1. 属性冲突:域冲突,取值单位冲突
  2. 命名冲突:同名异意,异名同意
  3. 结构冲突:抽象不同,包含属性不同,联系类型不同

数据库设计的一般步骤

  1. 概念结构设计最常用的工具是ER模型
    1. 逻辑模型设计:概念模型向关系模型的转化,关系模型的优化通常以规范化理论为指导(必要时可反规范化)
    2. 物理设计主要包括存取方法的选择和存储结构的确定

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

转换流程

  1. 将每个实体集转换为一个关系模式
  2. 1:1 联系,将任意一方的关系中加入另一方的码
  3. 1:n 联系,在多方实体集转换的关系中加入另一方实体集的码
  4. m:n 联系,新增一个关系模式,加入原联系的属性相关实体集的码属性

PS. 加入的码均为外码

转换后关系的码

  • 1:1 联系:相关实体的码均为关系候选码,择一为码
  • 1:n 联系n 端的码为关系的码
  • m:n 联系相关实体码的集合为关系的码

  1. 根据关系中的函数依赖FD(或者根据提供的数据归纳出FD)判断关系的码,进而继续判断关系所属的最高范式 chap.7
  2. 进行简单的规范化分解(要求到BCNF)

数据库保护

chap.4 9

事务与事务日志

事务:用户定义的一个数据库操作序列,可嵌套

Microsoft SQL Server 下的事务语句

  1. BEGIN TRANSACTION (开始)
  2. COMMIT TRANSACTION (结束)
  3. ROLLBACK TRANSACTION (结束)

事务的特性ACID

  1. 原子性 Atomicity 全部完成,或完全不做 Nothing or Everything
  2. 一致性 Consistency 整体一致,由原子性保证,由并发控制子系统实现
  3. 隔离性 Isolation 多事务可并行,外部不可见、不受干扰
  4. 持久性 Durability 一旦提交,改变持久

事务日志:以记录为单位的,记录所有更新事务的日志文件

  • 事务开始时登记开始记录(START
  • 事务结束时登记结束记录(COMMIT / ROLLBACK
  • 任一事务的任一更新都必须在日志文件中写入记录
    • <事务标记>,<操作类型 | 插入/删除/修改>,<更新前数据的旧值>,<更新后数据的新值>

事务日志的作用:用来进行事务故障恢复系统故障恢复,并协助后备副本进行介质故障恢复

事务日志原则

  1. 每一次更新工作均有日志记载
  2. 日志先写原则,先记录日志再执行更新操作

数据库完整性保护

关系数据库的完整性

约束的实现方式

  1. 实体完整性
    • 主码 Primary Key 实现,不为空且唯一
    • Eno CHAR(4) PRIMARY KEY
    • PRIMARY KEY(Eno)
    • 复数个属性构成的主码只能通过表级约束 PRIMARY KEY(,) 进行定义
  2. 参照完整性
    • 外部码 Foreign Key 实现,空值被参照关系中的主码值
    • REFERENCES <父表名>(<属性名>)
    • FOREIGN KEY<属性名表> REFERENCES <父表名>(<属性名表>)
  3. 用户自定义完整性
    • 非空约束实现 NOT NULL
    • CHECK约束实现
      1. 基于属性 CHECK <条件>,条件可为子查询等表达式
      2. 基于元组 即涉及多属性
    • 触发器实现,见下

触发器的定义

  • 指明触发器的触发事件
  • 指明触发器执行的动作
SQL
CREATE TRIGGER <触发器名> {BEFORE | AFTER | INSTEAD OF}
	{[DELETE | INSERT | UPDATE OF [列名清单]]}
	ON 表名
	[REFERENCING <临时视图名>]
	[WHEN <触发条件>]
[FOR EACH {ROW | STATEMENT}]
  <触发动作>

约束的更新

  1. 定义时对约束进行命名
    • <属性定义> CONSTRAINT <约束名> <约束内容>
  2. ALTER TABLE 语句进行删除 DROP 和添加 ADD 操作
    • 不能修改
    • 无法创建属性约束,只能创建元组约束 因为只能在表级操作

数据库安全性保护

  1. 数据库安全性控制的一般方法
  2. 理解视图作为安全性保护的方法
  3. DBMS中用户与角色的关系
    • 对用户的授权,
    • 先对角色授权,再把用户加入到角色中,用户继承角色的权限

数据库并发控制

数据不一致性:并发操作调度不当所产生

  1. 丢失更新 Lost Update
    • A事务的结果覆盖了其他事务的结果,导致其他事务的更新丢失
  2. 读“脏”数据 Dirty Read
    • A 事务读取了 B 事务更新的 x 值,但 B 事务 ROLLBACK,A事务读取了未恢复的错误值
  3. 不可重复读 Non-Repeatable Read
    • A 事务读取了 x 值,B 事务更新了 x 值并 COMMIT,A 事务又读取了不一样的 x 值

封锁 Locking

  1. 排他锁 Exclusive Lock, XLock, 写锁
    • XLock 中不可上任何锁,除持锁事务外其他事务不可进行任何操作
  2. 共享锁 Share Lock, SLock, 读锁
    • SLock 中可上 SLock,可读;但不可上 XLock,不可写

封锁协议 Locking Protocol

  1. 一级封锁协议
    • 修改数据前上 XLock,结束时释放,不使用 SLock
    • 解决了丢失更新,但未解决读“脏”数据不可重复读
  2. 二级封锁协议
    • 一级 + 读数据前先加 SLock读完释放
    • 解决了丢失更新读“脏”数据,但未解决不可重复读
  3. 三级封锁协议
    • 一级 + 读数据前先加 SLock事务结束才释放

并发调度的可串行化

  • 可串行化 Serializability 准则:多个事务并发执行的结果是正确的,当且仅当其结果与按某个次序串行地执行各事务的调度策略所得结果相同时,则这种调度策略就被称为可串行化的调度。
  • 人话策略结果与某种串行执行结果相同串行执行,即完成一个完整的事务再执行下一个事务
  • 不可串行化:与任意一种串行执行结果都不同

两段封锁协议

  • 一个事务在读、写任何数据前必须首先申请比获得对该数据的封锁,一旦释放了锁就不得再申请任何封锁
  • 人话:分为两个阶段,执行阶段先上锁再读写,不可释放锁;结束阶段开始释放锁,不可申请锁

数据库备份和恢复

故障的种类

  1. 事务内部故障
  2. 系统故障
  3. 介质故障

恢复机制的两个关键问题

  1. 搜索整个日志将耗费大量的时间
  2. 重做处理:重新执行,浪费了大量时间

各种故障的恢复策略

  1. 事务故障恢复
  2. 系统故障恢复
    • 从日志中找出最后一次检查点,把该记录中的所有正在进行的事务全部列入撤销 UNDO 队列
    • 从最后一次检查点开始,正向扫描日志文件,直到故障发生时刻(日志文件结束)为止,在此期间:
      • 遇到事务开始,列入 UNDO
      • 遇到事务 COMMIT 结束,从 UNDO 移至 REDO
      • 遇到事务 ROLLBACK ,从 UNDO 移除
    • 从最后一次检查点开始,正向扫描日志文件,将REDO事务的新值写入数据库
    • 从最后一次检查点开始,正向扫描日志文件,将UNDO事务的旧值写入数据库
  3. 介质故障恢复

贡献者

页面历史