欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

数据库系统原理概述

最编程 2024-07-09 09:41:12
...

文章目录

  • 数据库系统原理
    • 一.绪论
      • 1.数据库的四个基本概念
      • 2.数据库管理三个阶段
      • 3.数据模型
      • 4.数据库系统的结构
    • 二.关系数据库
      • 1.关系数据结构及形式化法定义
      • 2.关系代数
    • 二.数据库安全性
      • 1.数据库不安全因素
      • 2.数据库安全性控制
    • 三.数据库完整性
      • 1.实体完整性
      • 2.参照完整性
      • 3.用户定义完整性
    • 四.数据库设计
    • 五.关系查询处理和查询优化
      • 1.查询处理
      • 2.常见的启发式原则
    • 六.数据库恢复技术
      • 1.事务
      • 2.事务的ACID特性
      • 3.故障的种类
      • 4.恢复的实现技术
      • 5.登记日志文件
      • 6.恢复策略
    • 七.并发控制
      • 1.并发一致性问题
      • 2.*
      • 3.隔离级别

数据库系统原理

一.绪论

1.数据库的四个基本概念

  1. 数据(date)

    描述事物的符号记录称为数据。

  2. 数据库(DataBase,DB)

    指长期储存在计算机内,有组织,可共享的大量数据的集合。

  3. 数据库管理系统(DataBase Management,DBMS)

    数据库管理系统是位于用户与操作系统之间的一层数据库管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。它主要的功能:

    1. 数据定义功能
    2. 数据组织,储存和管理
    3. 数据操纵功能
    4. 数据库的事务管理和运行管理
    5. 数据库的建立和维护功能
    6. 其它功能
  4. 数据库系统(DataBase System,DBS)

    数据库系统是由数据库,数据库管理系统(及其应用开发工具),应用程序和数据库管理员(DataBase Administrator,DBA)组成的存储,管理,处理和维护数据的系统。

    数据库系统的特点

    • 数据结构化:数据库系统实现整体数据的结构化,是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。
    • 数据共享性高,冗余度低且易扩充:数据共享可以大大减少冗余,节约存储空间。数据共享还能避免数据之间的不相容性与不一致性。有结构的数据也使得数据库系统弹性大,易于扩充。
    • 数据独立性高:独立性包括物理独立性和逻辑独立性,通过数据库管理系统的两极映像功能保证。物理独立性是指用户的应用程序与数据库中数据的物理存储是独立的,逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。
    • 数据由数据管理系统统一管理和控制:包括数据的安全性保护,数据的完整性保护,并发控制,数据库恢复四个方面。

数据的含义称为数据的语义,数据与其语义是不可分的。

数据库中的数据按一定的数据模型组织,描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。

概括的讲,数据库具有永久储存,有组织和可共享三个基本特点。

2.数据库管理三个阶段

人工管理系统 文件系统阶段 数据库系统阶段
应用背景 科学计算 科学计算,数据管理 大规模数据管理
硬件背景 无直接存取存储设备 磁盘,磁鼓 大容量磁盘,磁盘阵列
软件背景 没有操作系统 有文件系统 有数据库管理系统
处理方式 批处理 联机实时处理,批处理 联机实时处理,分布处理,批处理
数据的管理者 用户(程序员) 文件系统 数据库管理系统
数据面向的对象 某一应用程序 某一应用 现实世界(一个部门,企业,跨国组织等)
数据的共享程度 无共享,冗余度极大 共享性差,冗余度大 共享性高,冗余度小
数据的独立性 不独立,完全依赖于程序 独立性差 具有高度的物理独立性和一定逻辑独立性
数据的结构化 无结构 记录内有结构,整体无结构 整体结构化,用数据模型描述
数据控制能力 应用程序自己控制 应用程序自己控制 由数据库管理系统提供数据安全性,完整性,并发控制和恢复能力

3.数据模型

数据模型是对现实世界数据特征的抽象。数据模型是数据库系统的核心和基础。

数据模型分为两类:

  • 概念模型
  • 逻辑模型和物理模型
  1. 概念模型

    • 实体(entity):客观存在并且相互区别的事物称为实体。

    • 属性(attribute):实体所具有的某一特性称为属性。

    • 码(key):唯一标识实体的属性称为码。

    • 实体型(entity type):用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。

    • 实体集(entity set):同一类型实体的集合称为实体集。

    • 联系(relationship):实体之间的联系通常是指不同实体集之间的联系。实体之间的联系有一对一,一对多,多对多等多种类型。

  2. 数据模型的三个组成要素

    • 数据结构(静态特征):数据结构描述数据库的组成对象以及对象之间的联系。
    • 数据操作(动态特征):数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
    • 数据的完整性约束条件:数据的完整性约束条件是一组完整性规则。

概念模型常用实体联系方法{E-R模型}来表示,逻辑数据模型主要有层次模型,网状模型,关系模型。

4.数据库系统的结构

  1. 三级模式

    • 外模式

      外模式也称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

      外模式通常是模式的子集,一个数据库可以有多个外模式。

    • 模式

      模式也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。只有一个。

    • 内模式

      内模式也称为存储模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。只有一个。

  2. 二级映像

    • 外模式/模式映像

      当模式改变时,由数据库管理员对各个外模式/模式的映像做相应改变,可以使用外模式保存不变。应用程序是依据数据的外模式编写的,从而程序不必修改**,保证了数据与程序的逻辑独立性**,简称数据的逻辑独立性

    • 模式/内模式映像

      当数据库的存储结构改变时,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性

二.关系数据库

1.关系数据结构及形式化法定义

  • :域是一组具有相同数据类型的值的集合。

  • 笛卡尔积:笛卡尔积是域上的一种集合运算。

  • 基数:一个域的不同取值个数称为这个域的基数。

  • 关系

    • 候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
    • 主码:若一个关系有多个候选码,则选定其中一个为主码。
    • 主属性:候选码的诸属性称为主属性。
    • 非主属性:不包含在任何候选码中的属性称为非主属性或非码属性。
    • 全码:在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。

    关系可以有是三种基本类型:

    • 基本关系
    • 查询表
    • 视图表

    基本关系的性质:

    • 列是同质的。
    • 不同的列可出自一个域。
    • 列,行的顺序无关。
    • 任何两个元组的候选码不能取相同的值。
    • 分量必须去原子值。

    这些规范条件最基本的一条:关系的每一个分量必须是一个不可分的数据项。

2.关系代数

关系代数的运算按运算符的不同可分为传统的集合运算专门的关系运算

  • 集合运算:传统的集合运算是二目运算,包括并,差,交,笛卡尔积四种运算。

  • 关系运算:专门的关系运算包括选择,投影,连接,除运算等。

  • 5种基本操作:选择,投影,并,差,笛卡尔积。

二.数据库安全性

1.数据库不安全因素

  1. 非授权用户对数据库的恶意存取和破坏
  2. 数据库中重要或敏感的数据被泄露
  3. 安全环境的脆弱性

2.数据库安全性控制

  1. 用户身份识别

    常用的用户身份鉴别方法有一下几种:

    1. 静态口令鉴别
    2. 动态口令鉴别
    3. 生物特征鉴别
    4. 智能卡鉴别
  2. 存取控制

    数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统存取控制机制实现。

    存取控制机制主要包括定义用户权限合法权限检查两部分。

    定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。

    C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC)。

    • 自主存取控制

      用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。

    • 强制存取控制

      每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有合法许可证的用户才可以存取。强制存取控制因此相对严格。

  3. 视图机制

    可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。

  4. 审计

    审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。

    1. 审计事件
      • 服务器事件
      • 系统权限
      • 语句事件
      • 模式对象事件
  5. 数据加密

    加密的思想是根据一定的算法将原始数据----明文变换为不可以直接识别的格式----密文,从而使得不知道解密算法的人无法知道数据的内容。

    数据加密主要包括存储加密传输加密

三.数据库完整性

数据库的完整性是指数据的正确性相容性

为维护数据库的完整性,数据库管理系统必须能够实现如下功能:

  1. 提供定义完整性约束条件的机制
  2. 提供完整性检查的方法
  3. 进行违约处理

1.实体完整性

  1. 定义实体完整性

    关系模型的实体完整性在create table中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义表级约束条件。

  2. 实体完整性检查和违约处理

    1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改。
    2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。

2.参照完整性

  1. 定义参照完整性

    关系模型的参照完整性在create table中用foreign key短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码。

  2. 参照完整性检查和违约处理

    被参照表 参照表 违约处理
    可能破坏参照完整性 插入元组 拒绝
    可能破坏参照完整性 修改外码值 拒绝
    删除元组 可能破坏参照完整性 拒绝/级联删除/设置为空值
    修改外码值 可能破坏参照完整性 拒绝/级联删除/设置为空值

    当可能破坏参照完整性,系统可能采用以下策略加以处理:

    1. 拒绝执行

      不允许该操作执行。该策略一般设置为默认策略。

    2. 级联操作

      当删除或修改被参照表的一个元组导致与参照表的不一致时,删除或修改参照表中的所有导致不一致的元组。

    3. 设置为空值

      当删除或修改被参照表的一个元组时造成不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

3.用户定义完整性

  1. 属性上的约束条件

    1. 属性上约束条件定义

      create table中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制。包括:

      • 列值非空(not null)
      • 列值唯一(unique)
      • 检查列值是否满足一个条件表达式(check语句)
    2. 属性上约束条件的检查和违约处理

      当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。

  2. 元组上的约束条件

    1. 元组上约束条件的定义
    2. 元组上约束条件的检查和违约处理

四.数据库设计

  • 数据库设计的基本步骤

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

    是关于数据库中数据描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改,充实,完善的。

    组成部分:

    • 数据项:数据项是不可在分的数据单位。
    • 数据结构:数据结构反映数据之间的组合关系。
    • 数据流:数据流是数据结构在系统内传输的路径。
    • 数据存储:数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
    • 处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。
  • E-R图像关系模型的转换原则

    1. 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
    2. 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
    3. 一个m:n联系转换为一个关系模式。
    4. 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
    5. 具有相同码的关系模式可合并。
  • 嵌入式sql语句与主语言之间的通信

    1. 向主语言传递SQL语句的执行状态信息,使主语言能够根据此信息控制程序流程,主要用SQL通信区(SQLCA)实现。
    2. 主语言向SQL语句提供参数,主要用主变量实现。
    3. 将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。
    4. 建立和关闭数据库连接。
  • 使用游标的SQL语句

    1. 说明游标
    2. 打开游标
    3. 推进游标指针并取当前记录
    4. 关闭游标

五.关系查询处理和查询优化

1.查询处理

查询处理的步骤:

  1. 查询分析

    首先对查询语句进行扫描,词法分析和语法分析。进行语法检查和语法分析,即判断查询语句是否符合SQL语法规则,如果没有语法错误就转入下步处理,否则便报告语句中出现的语法错误。

  2. 查询检查

    对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象,如关系名,属性名是否存在和有效。如果是对视图的操作,则要用视图消解方法把视图的操作转换成对基本表的操作。还要根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查。如果该用户没有相应的访问权限或违反了完整性约束,就拒绝执行该查询。

  3. 查询优化

    查询优化是选择一个高效执行的查询处理策略。查询优化有多种方法。按优化的层次一般可将查询优化分为“代数优化”和“物理优化”。

    • 代数优化(逻辑优化):是指关系代数表达式的优化,即按照一定的规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询执行更高效。
    • 物理优化(非代数优化):是指存取路径和底层操作算法的选择。选择的依据可以是基于规则的,也可以的基于代价的,还可以是基于语义的。
  4. 查询执行

    依据优化器得到的执行策略生成查询执行计划,有代码锁存器生成执行整个查询计划的代码,然后加以执行,回送查询结果。

2.常见的启发式原则

  • 查询数的启发式优化

    1. 选择运算应尽可能先做。
    2. 把投影运算和选择运算同时进行。
    3. 把投影同其前或后的双目运算结合起来。
    4. 把某些选择同在他前面要执行的笛卡尔积结合起来成为一个连接运算。
    5. 找出公共子表达式。

六.数据库恢复技术

1.事务

事务:事务是用户定义的一个数据库操作序列,这些操作要么全不做,要么全做,是一个不可分割的工作单位。通常以begin transaction开始,以commitrollback结束。

commit:表示提交,即提交事务的所有操作。具体来说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。

rollback:表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。这里的操作指对数据库的更新操作。

2.事务的ACID特性

  1. 原子性(Atomicity)

    事务被视为不可分割的最小单位,事务所有的操作要么全部提交成功,要么全部失败回滚。

  2. 一致性(Consistency)

    数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。

  3. 隔离性(Isolation)

一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的。接下来的其它操作或故障不应该对其执行结果有任何影响。

  1. 持久性(Durability)

    一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

3.故障的种类

  • 事务内部故障
  • 系统故障
  • 介质故障
  • 计算机病毒

4.恢复的实现技术

  • 动态海量存储
  • 动态增量存储
  • 静态海量存储
  • 静态增量存储

静态转储:是在系统中无运行事务时进行的转储操作。

动态转储:是指转储期间允许对数据库进行存取或修改。

海量存储:是指每次转储全部数据库。

增量存储:是指每次只转储上一次转储后更新过的数据。

5.登记日志文件

  • 日志文件中需要登记的内容包括
    • 各个事务的开始标记。
    • 各个事务的结束标记。
    • 各个事务的所有更新操作。
  • 每个日志记录的内容主要包括
    • 事务标识
    • 操作的类型
    • 操作对象
    • 更新前数据的旧值
    • 更新后数据的新值
  • 登记日志文件时必须遵循两条原则
    • 登记的次序严格按并发事务执行的时间次序。
    • 必须先写日志文件,后写数据库。

6.恢复策略

  1. 检查点记录

    检查点记录的内容包括:

    • 建立检查点时刻所有正在执行的事务清单。
    • 这些事务最近一个事务记录的地址。

    动态维护日志文件的方法是,周期性地执行建立检查点,保存数据库状态的操作。

    使用检查点方法可以改善恢复效率。

  2. 数据库镜像

七.并发控制

1.并发一致性问题

  1. 丢失修改

    两个事务T1和T2读入同一数据并修改。T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。

  2. 读脏数据

    读脏数据是指事务T1修改某一数数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改的数据恢复原值,T2读到的数据就与数据库中的数据不一致。

  3. 不可重复读

    指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体分三种情况:

    • 事务T1读取某一数据后,事务T2对其进行了修改,当事务T1再次读该数据时,得到与前一次不同的值。
    • 事务T1按一定条件从数据库中读取某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘消失了。
    • 事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。

    后面两种不可重复读有时也称为幻影现象。

产生并发不一致性问题的主要原因是并发操作破坏了事务的隔离性。并发控制机制就是要用正确的方式调度并发操作,使一个用户书屋的执行不受其他事务的干扰,从而避免造成数据的不一致性。

并发控制的主要技术:

*时间戳乐观控制法多版本并发控制等。

2.*

  1. *粒度

    *粒度:*对象的大小。*粒度与系统的并发度和并发控制的开销密切相关。直观来看,*的粒度越大,数据库所能*的数据单元就越少,并发度就越小,系统开销也越小,反之,*的粒度越小,并发度较高,但系统开销也就越大。

  2. *类型

    1. 读写锁

      • 排他锁(写锁):简称为X锁

        若事务T对数据对象A加了X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。

      • 共享锁(读锁):简称为S锁

        若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。

    2. 意向锁

      • IS锁(意向共享锁)

        如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。

      • IX锁(意向排他锁)

        如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。

      • SIX锁(共享意向排他锁)

        如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。

  3. *协议

    1. 三级*协议

      1. 一级*协议

        事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(commit)和非正常结束(rollback)。

      2. 二级*协议

        在一级*协议基础上增加事务T在读取数据R之前必须对其加S锁,读完后即可释放S锁。

      3. 三级*协议

        在一级*协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

    2. 两段锁协议

      所谓两段锁协议是指所有事务必须分为两个阶段对数据项加锁和解锁。

      • 在对任何数据进行读,写操作之前,首先要申请并获得对该数据的*。
      • 在释放一个*之后,事务不再申请和获得任何其他*。

      可串行化调度是指,通过并发控制,使得并发执行的事务结果与某个串执行的事务结果相同。串行执行的事务互不干扰,不会出现并发一致性问题。

      事务遵循两段锁协议是保证可串行化调度的充分条件。

      但不是必要条件。

3.隔离级别

  1. 未提交读

    事务中的修改,即使没有提交,对其他事务也是可见的。

  2. 提交读

    一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所能修改在提交之前对其它事务是不可见的。

  3. 可重复读

    保证在同一个事务中多次读取同一数据的结果是相同的。

  4. 可串行化

    强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。该隔离级别需要加锁实现,因为要使用加锁机制保证同一时间只有一个事务执行,也就是保证事务串行执行。

在这里插入图片描述

最后喜欢的小伙伴,记得三连哦!????????????