数据库复习
题型
选择 10 × 2,
填空 10 × 1,
判断 5 × 2,
问答 2 × 5(简单写,意思到了就行),
编程 2 × 5(PL/SQL),
操作 4 × 5(上机,作业),
设计 10 × 2(教材第六、七章)
数据库基础知识
数据库系统概述
- ? 4 个基本概念
- 数据: 数据库中存储的基本对象
- 数据库: 长期存储在计算机中, 有组织, 可共享的大量数据的集合
- 永久存储, 数据模型, 并发控制等
- 数据库管理系统: 用户与操作系统之间的一组数据管理软件, 对用户的数据访问进行统一的管理和控制
- 数据库系统: 引入数据库技术后的计算机系统, 是一个整体, 包括了数据库, 数据库管理系统, 应用程序, 用户
- ? 与文件系统相比的特点:
- 数据的整体结构化
- 数据共享性高, 冗余度低且易扩充
- 数据独立性高
- 数据由 DBMS 统一管理和控制
数据模型
- 模型: 对现实事物的抽象
- 三种模型:
- 概念模型 <- 信息世界: E-R 模型
- 逻辑模型 <- 数据库的逻辑结构: 关系模型
- 物理模型 <- 数据在磁盘上的存储方法和存取方法
- ! 转换的任务由谁完成?
- 概念模型 -> 逻辑模型: 数据库设计人员
- 逻辑模型 -> 物理模型: DBMS
数据库系统结构
- ? 数据库系统的三级模式结构:
- 外模式: 数据库系统的最高层描述, 提供了数据库的一部分视图或子集
- 模式: 中间层描述, 提供了对整个数据库的全局视图, 独立于具体的应用程序和用户, 关注数据的逻辑结构和整体视图
- 内模式: 数据库系统的底层描述, 描述数据在物理存储设备上的存储方式
数据库系统组成
- ? 什么是数据的独立性: 应用程序对数据库数据结构的依赖程度
- ? 数据库系统的组成: 硬件平台及数据库, 软件, 人员
关系模型
- 关系模型的数据结构及形式化定义
关系模型的数据结构及形式化定义
码
- 超码: 可以唯一标识一个元组的属性集合 (其任意超集都可以表示一个元组)
- 候选码: 最小超码 (其任意子集都不可以唯一标识一个元组)
- 对于一个关系来说, 可能并不唯一
- 主码: 被选中用于区分元组的候选码
- 位于其他属性前面, 使用下划线标注
- 主码应该从不变化或极少变化
- 外码约束
- 引用完整性约束: 引用关系中的任意元组在指定属性上出现的取指也必然出现在被引用关系中至少一个元组的指定属性上
关系模式
$$ R(U, D, DOM, F) $$ - \(R\): 关系名 - \(U\): 属性名集合 - \(D\): \(U\) 中属性的域 - \(DOM\): 属性向域的影响集合 - \(F\): 属性间的数据依赖集合关系
关系模型的数据操作
- 关系操作的特点: 集合操作(运算)
- ! 五种基本的关系代数运算: 选择, 投影, 并, 差, 笛卡尔积
关系模型的完整性约束
- ? 关系的三类完整性
- 实体完整性: 主属性唯一且不为空
- 参照完整性: 外码
- 用户定义的完整性
关系代数语言
- 传统的集合运算: 交并差积
- 查询结果也是集合: 不重复
- 专门的关系运算: 选择, 投影, 连接, 除
- 选择 (select): 选出满足条件的元组
- 投影 : 选择部分属性
- 连接: 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- 除: 对于另一个关系中的每一个元组,都存在一个对应的组合在第一个关系中
- 应用于查找 A 包含所有 B
SQL 语言
数据定义
- 一个基本表最多只能建立一个聚集索引
视图
- ? 视图的作用:
- 简化用户的操作
- 使用户能够从多种角度看待同一数据
- 对重构数据库提供了一定程度的逻辑独立性
- 能够对机密数据提供安全保护
- 可以更清晰的表达查询
数据库的安全性
数据库安全性概述
- ? 数据库安全性的三个层次:
- 网络系统的安全
- 操作系统的安全
- 数据库管理系统的安全
数据库安全性控制
- ? 安全控制的常用方法:
- 用户标识和鉴定
- 访问控制
- 视图
- 审计
- 数据加密
-
? 基于角色的存取控制方法 -> 自主访问控制方法
- 通过定义角色和权限的层级关系来简化权限管理
- 过程: 定义角色 -> 分配权限 -> 角色分配给用户 -> 权限继承 -> 职责分离 -> 权限审查和更新
-
强制存取控制 MAC
- 主体: 用户 -> 许可证级别
- 客体: 文件, 表, 索引, 视图 -> 密级
视图机制
- 视图的作用: 把保密的数据对无权存取这些数据的用户隐藏起来
- 创建视图 -> 授予用户权限
安全审计
数据加密
数据库的完整性
实体完整性
参照完整性
用户定义的完整性
完整性约束命名字句
触发器
关系数据理论
问题的提出
- [[数据库/数据库复习#关系模式|关系模式]]的简化: 三元组
R<U, F>
R
: 符号化的元组语义U
: 属性F
: 数据依赖
- ? 数据依赖: 属性值之间的互相关联, 定义属性与属性之间的约束关系
- ! 类型: 函数依赖, 多值依赖, 连接依赖, 包含依赖
- 函数依赖: 唯一映射 (数学函数)
- 多值依赖:
规范化
- ? 几种函数依赖如何理解
- Y 依赖于 X 记为:
X -> Y
, 可唯一确定一个结果 (X 可以推出 Y) - 平凡的函数依赖:
X->Y
而 X 是 Y 的子集(Sno, Cno) -> Sno
- 非平凡函数依赖:
X->Y
同时 X 不是 Y 的子集(Sno, Cno) -> Grade
- 完全函数依赖: 属性集 Y 完全依赖于另一个属性集 X, 而不依赖于 X 的任何真子集
(Sno, Cno) ---> Grade, Sno -\-> Grade, Cno -\-> Grade
- 部分函数依赖: 属性集 Y 依赖于另一个属性集 X 的某个真子集,
Cno ---> Cname, (Sno, Cno) -\-> Cname
- 传递函数依赖: 一个属性集 Y 传递依赖于另一个属性集 X
Cno ---> Tid, Cid ---> Tname, Cno ---> Tname
- Y 依赖于 X 记为:
- 规范化: 将低级范式通过分解, 使其满足高级范式
- ? 范式: 符合某一种级别的关系模式的集合
- 种类:
- 第一范式: 所有属性都是不可分的基本数据项 -> 合并单元格
- 第二范式: 每一个非主属性完全函数依赖于码
- 强调非主属性和完全函数依赖
- 第三范式: 每一个非主属性既不部分依赖于码, 也不传递依赖于码
- 在第二范式的基础上, 消除传递依赖
- 强调非主属性和传递依赖
- BC 范式: 消除主属性对码部分和传递依赖
- 强调主属性与码之间的部分和传递依赖
- 第四范式
- 规范化的基本步骤: 1NF -> 2NF -> 3NF -> BCNF -> 4NF
- 消除部分函数依赖 -> 消除传递函数依赖 -> 消除部分和传递函数依赖 -> 消除非平凡且非函数依赖的多值依赖
[!todo] 暂时忽略多值依赖和第四范式
- 消除部分函数依赖 -> 消除传递函数依赖 -> 消除部分和传递函数依赖 -> 消除非平凡且非函数依赖的多值依赖
- 种类:
数据依赖的公理系统
关系模式的分解
- 分解为第 2 范式, 第 3 范式
- 保留公共属性, 对原关系模式进行分解
- 相关属性合一, 解决数据冗余问题
- 分解为 BC 范式
数据库设计概述
- ! 数据库设计的六个阶段:
- 需求分析: 获取用户需求
- 概念结构设计: 归纳与抽象需求分析阶段的分析结果
- 逻辑结构设计: 将概念结构设计转换为具体的数据模型
- 物理结构设计: 为逻辑模型选取合适的物理结构
- 数据库实施: 创建数据库, 编写相应的应用程序和 SQL 程序
- 数据库运行和维护
需求分析
- 数据流和数据字典
概念结构设计
- E-R 模型
逻辑结构设计
物理结构设计
数据的实施和维护
数据库编程
过程化 SQL
- 基本结构:
DECLARE
: 变量, 敞亮, 游标, 用户定义异常的声明BEGIN
: SQL 语句和 PL/SQL 语句构成的执行程序EXCEPTION
: 程序出现异常时候, 捕捉异常并处理异常END
: 结束
- 赋值语句:
变量名称 := 表达式
- 条件语句: ```PL/SQL IF (new.Job = '讲师') AND (new.Sal < 3000) THEN new.Sal := 3000; END IF;
存储过程和函数
- ? 存储过程的优点:
- 运行效率高
- 降低了客户机和服务器之前的通信量
- 方便实施企业规则
- 使用 PL/SQL 创建存储过程 ```PL/SQL create [or replace] procedure 过程名 [(arg1 [in|out|in out] type1, arg2 [in|out|in out] type2, ...)] {IS | AS} <类型, 变量的说明> BEGIN <执行部分代码> EXCEPTION <可选的异常处理部分>
END
- 使用 PL/SQL 创建函数
```PL/SQL
create or replace function 函数名 [(arg1 [in|out|in out] type1, ....)]
{IS | AS}
<类型, 变量说明>
BEGIN
<函数体, 执行部分>
EXCEPTION
<可选的异常处理部分>
END;
PL/SQL
create trigger <触发器名>
{BEFORE|AFTER} 事件 ON 表名
FOR EACH {ROW | STATEMENT}
AS
<类型, 变量说明>
BEGIN
<函数体, 执行部分>
END
查询处理与优化
关系数据库系统的查询处理
- ? 查询处理的四个阶段:
- 查询分析
- 词法分析, 语法分析, 语义分析
- 查询检查
- 安全性检查, 完整性检查
- 查询优化
- 代数优化, 物理优化
- 查询执行
- 查询分析
- ? 查询优化的分类:
- 代数优化: 指关系代数表达式的优化
- 物理优化: 指存取路径和底层操作算法的选择