系统架构设计师 - 数据库系统(2)

数据库系统


大家好呀!我是小笙,本章我主要分享系统架构设计师 - 数据库系统(2)知识,希望内容对你有所帮助!!

数据库系统

规范化理论 ★ ★ ★ ★ ★

非规范化的关系模式,可能存在的问题:数据冗余、更新异常(修改操作一致性问题)、插入异常、删除异常

函数依赖

假设 X 决定 Y,即 Y 依赖于 X,记为 X -> Y(可以理解为 在 XY 关系中,任何一个 X 都有与之对应并且唯一的 Y)

部分函数依赖以及传递函数依赖

求候选键

  • 将关系模式的函数依赖关系用"有向图"的方式表示
  • 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
  • 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键

Armstrong公理

关系模式R<U,F>来说有以下的推理规则:

根据以上三条推理规则可以得到下面的推理规则:

  • 合并规则:由 X -> Y,X -> Z 可得 X -> YZ
  • 伪传递规则:由 X -> Y,WY -> Z 可得 XW -> Z
  • 分解规则: 由 X -> Y 以及 Z 属于 Y 可得 X -> Z

注意记忆规则以及对应的推理公式

范式判断

第一范式 1NF

在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式

第二范式 2NF

当且仅当实体E是第一范式(1NF),且每一个非主属性完全依赖主键(不存在部分依赖)时,则称实体E是第二范式

第三范式 3NF

当且仅当实体E是第二范式(2NF),且实体E中没有非主属性传递依赖于码时,则称实体E是第三范式

BC 范式 BCNF

设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码

例题

1、给定关系模式R(U,F),其中:属性集U={A1,A2,A3,A4,A5,A6},函数依赖集F={A1→A2,A1-→A3,A3→A4,A1A5→A6}。关系模式R的候选码为 A1 A5 ,由于R存在非主属性对码的部分函数依赖,所以R属于 1NF

  • A1A3 A1A4 A1 A5 A1A6
  • 1NF 2NF 3NF BCNF

模式分解

考虑依据:是否保持函数依赖 & 是否无损

保持函数依赖分解

设数据库模式p={R1,R2,...,Rk}是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,...,Fk与F是等价的(即相互逻辑蕴涵),那么称分解p保持FD

例题理解

保持函数依赖,通过 R1和R2 能得出 F = {A -> B,A -> C,B -> C} ,通过传递依赖得出 B -> C

没有保持函数依赖,通过 R1和R2 只能得出 F = {A -> B,A -> C} 无法得出 B -> C

无损分解

无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式

表格法

将一个具有函数依赖:学号→姓名,课程号→课程名,(学号,课程号)→ 分数的关系模式:成绩(学号,姓名,课程号,课程名,分数),分解为:成绩(学号,课程号,分数);学生(学号,姓名);课程(课程号,课程名)

初始表如下:

根据学号 → 姓名,对上表进行处理,将 X 改成符号 √ ;然后考虑课程号→课程名,将 X 改为 √ ,得下表:

从上图中可以看出,第1行已全部为√,因此本次R分解是无损分解

公式法

只能用于分解成两个关系,两个关系直接交集能够推导出差集则为无损连接

例题

1、给出关系R(U,F),U={A,B,C,D,E},F={A -> BC,B -> D,D -> E}。以下关于F说法正确的是 F蕴涵A→D、A→E、B→E,故F存在传递依赖 。若将关系R分解为p = {RI(U1,F1),F2(U2,F2)},其中:U1= {A,B,C},U2= {B,D,E}则分解p 无损连接并保持函数依赖

2、某商场商品数据库的商品关系模式P(商品代码、商品名称,供应商,联系方式,库存量),函数依赖集F={商品代码 -> 商品名称,(商品代码,供应商) -> 库存量,供应商 -> 联系方式}。商品关系摸式P达到 1NF ;该关系模式分解成 P1(商品代码,商品名称),P2(商品代码,供应商,库存量),P3(供应商,联系方式) 后,具有无损连接的特性,并能够保持函数依赖。


并发控制 ★

事务的 ACID 特性

  • 原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚。这些操作是一个整体,不能部分地完成
  • 一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
  • 隔离性:指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的
  • 持续性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,无论发送何种故障,都不应对其有任何影响

并发存在的问题

  • 丢失更新
  • 不可重复读
  • 读"脏"数据

并发解决方案 - 封锁协议

  • S 封锁(读):共享锁
  • X 封锁(写):独占锁
  • 一封锁协议(防止丢失更新问题):事务 T 在修改数据 R 之前必须先对其加 X 锁,直到事务结束才释放
  • 二封锁协议(防止丢失更新,还可防止读"脏"数据问题):一级封锁协议加上事务 T 在读取数据 R 之前先对其加 S 锁,读完后即可释放 S 锁
  • 三封锁协议(可防止上述的三个问题):一级封锁协议加上事务 T 在读取数据 R 之前先对其加 S 锁,直到事务结束才释放
  • 两段锁协议:可串行化的。可能发生死锁

数据库的安全性 ★

安全性的分类

措施 说明
用户标识和鉴定 最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式
存取控制 对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限
密码存储和传输 对远程终端信息用密码传输
视图的保护 对视图进行授权
审计 使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来

例题

1、数据库的安全机制中,通过提供 存储过程 第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方所获取。

  • 索引
  • 视图
  • 存储过程
  • 触发器

数据库备份与恢复技术 ★

数据备份

  • 冷备份也称为静态备份 :是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来
    • 优点:非常快速的备份方法(只需复制文件);容易归档(简单复制即可);容易恢复到某个时间点上只需将文件再复制回去);能与归档方法相结合,做数据库"最佳状态"的恢复;低度维护,高度安全
    • 缺点:单独使用时,只能提供到某一时间点上的恢复;在实施备份的全过程中,数据库必须要作备份而不能做其他工作;若磁盘空间有限只能复制到磁带等其他外部存储设备上,速度会很慢;不能按表或按用户恢复
  • 热备份也称为动态备份 :是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来
    • 优点:可在表空间或数据库文件级备份,备份的时间短;备份时数据库仍可使用;可达到秒级恢复(恢复到某一时间点上);可对几乎所有数据库实体做恢复;恢复是快速的
    • 缺点:不能出错,否则后果严重;若热备份不成功所得结果不可用于时间点的恢复;因难于维护,所以要特别小心,不允许"以失败告终"

根据备份量划分

  • 完全备份:备份所有数据
  • 差量备份:仅备份上一次完全备份之后变化的数据
  • 增量备份:备份上一次备份之后变化的数据

数据库故障与恢复

故障关系 故障原因 解决方法
事务本身的可预期故障 本身逻辑 在程序中预先设置 Rollback 语句
事务本身的不可预期故障 算术溢出、违反存储保护 由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态
系统故障 系统停止运转 通常使用检查点法(系统重启时自动完成)
介质故障 外存被破坏 一般使用日志重做业务

补充

  • 撤销事务:故障发生时未完成的事务,放入 Undo 撤销
  • 重做事务:故障发生前已提交的事务,放入 Redo 重做

例题

1、假设某证券公司的股票交易系统中有正在运行的事务,此时,若要转储该交易系统数据库中的全部数据,则应采用 动态全局转储 方式

  • 静态全局转储
  • 动态全局转储
  • 静态增量转储
  • 动态增量转储

数据库的性能优化 ★

相关推荐
梦想平凡1 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO1 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong1 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起2 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~3 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21553 小时前
Liunx下MySQL:表的约束
数据库·mysql
黄名富3 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
言、雲3 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
一个程序员_zhangzhen4 小时前
sqlserver新建用户并分配对视图的只读权限
数据库·sqlserver
zfj3214 小时前
学技术学英文:代码中的锁:悲观锁和乐观锁
数据库·乐观锁··悲观锁·竞态条件