首页 > 数据库 >数据库概述

数据库概述

时间:2022-09-26 23:56:32浏览次数:48  
标签:关系 事务 数据库 元组 概述 子句 磁盘

存储及缓冲区管理

数据库中的数据通常驻留在磁盘中,当系统需要对数据进行操作时,要先将其从磁盘读入内存。

存储管理器的任务是控制数据在磁盘上的放置和数据在磁盘与内存之间的交换。很多DBMS依赖底层操作系统的文件系统来管理磁盘中的数据,也有一些DBMS为了提高效率,直接控制数据在磁盘设备中的存储和访问。存储管理器登记了数据在磁盘上所处的位置,将上层模块提出的逻辑层面的页面访问请求映射为物理层面的磁盘访问命令。
缓冲区管理器将内存空间划分为与页面同等大小的帧,来缓存从磁盘读入的页面,并保证这些页面在内存和磁盘上的副本的一致性。DBMS中所有需要从磁盘获取信息的上层模块都需要与缓冲区管理器交互,通过缓冲区读写数据。这些信息包括以下类型:

  • 数据:数据库自身的内容。
  • 元数据:描述数据库的结构及其约束的数据库模式。
  • 日志记录:记录事务对数据库所做修改的信息,用于保证数据库的一致性和持久性。
  • 统计信息:DBMS收集和存储的关于表、索引等数据库对象的大小、 取值分布等信息,用于查询优化。
  • 索引:支持对数据进行高效存取的数据结构。

事务处理

事务是一组数据库操作,这组操作要么都做,要么都不做,不可分割。一个事务中包含哪些操作是由用户定义的,可以包含多个数据库操作,也可以只包含单个数据库操作。对事务的处理由事务管理器负责,它包括并发控制组件和日志及恢复组件,目的是保证事务的ACID特性,即原子性、一致性、隔离性和持久性。

事务管理器接收来自用户或应用程序的事务命令,从而得知什么时候事务开始、什么时候事务结束、以及事务的参数设置(例如事务的隔离级),然后在事务运行过程中执行下列任务:

  • 登记日志:为了保证一致性和持久性,事务对于数据库的每一个修改都在磁盘上记录日志,以保证不管在什么时候发生故障,日志及恢复组件都能根据日志将数据库恢复到某个一致的状态。日志一开始被写到缓冲区中,然后会在适当的时机从日志缓冲区写回到磁盘中。
  • 并发控制:事务的执行从表面上看必须是孤立的,但是在大多数系统中,实际上有许多事务在同时执行。因此,并发控制组件必须保证多个事务的各个动作以一种适当的顺序执行,从而使得最终的结果与这些事务串行执行的结果相同。常见的并发控制方式是封锁机制,通过加锁来防止两个事务以可能造成不良后果的方式存取同一数据。

关系模型

1.主键和外键
主键可唯一地标识关系中的一个元组,以确保没有任何两个元组是完全一样的。如果用户没有定义主键,有些DBMS会自动创建内部主键。
外键指定一个关系中的属性在取值时必须与另一个关系中的某个元组相对应,不能随意取值。
2.关系代数
常见的关系代数运算符包括
选择(selection):选择运算是从关系R中选取满足给定条件的元组构成结果关系,记作σF(R)。
投影(Projection) :投影运算是从关系R中选取若干属性列A构成结果关系,记作 ΠA(R)。
并( Union ) :两个关系R和S的并是由属于R或属于S的元组构成的集合,记为 R∪S。
交( Intersection) :两个关系R和S的交是由既属于R又属于S的元组构成的集合,记为 R ∩ S。
差(Difference ) :两个关系R和S的差是由属于R但不属于S的元组构成的集合,记为 R-S。
笛卡尔积( Cartesian Product) :两个关系R和S的笛卡尔积是由这两个关系中元组拼接而成的所有可能的元组的集合,记为R×S。
自然连接(Natural Join) :两个关系R和S的自然连接是由这两个关系中在共同属性上取值相等的元组拼接而成的所有可能的元组的集合,记为R⋈S。
3.SQL
SQL的查询通过SELECT语句来表达,它的基本语法如下:

   SELECT <列名或表达式序列>
   FROM <表名或视图名序列>
   [WHERE <行条件表达式>]
   [GROUP BY <列名序列>
   [HAVING <组条件表达式>] ]  
   [ORDER BY <排序列名>[ASC|DESC] [,...]]

以上语法成分中,只有SELECT和FROM子句是必不可少的。此外,SQL还提供了一个强大的特性,允许在WHERE、FROM或HAVING子句中嵌入子查询。子查询也是一个SELECT语句,在上述的WHERE、FROM或HAVING子句中可以使用子查询的返回结果来进行计算,这也是SQL之所以称为"结构化"查询语言的原因。

对于一条典型的查询语句,其结果可以这样计算:

1.读取FROM子句中基本表及视图的数据,并执行笛卡尔积操作;
2.选取其中满足WHERE子句中条件表达式的元组;
3.按GROUP BY子句中指定列的值分组;
4.提取满足HAVING子句中组条件表达式的那些分组;
5.按SELECT子句投影出结果关系;
6.按ORDER BY子句对结果关系进行排序。
以上计算过程可以被看作是对一系列关系代数运算的执行。实际上一个SELECT语句在DBMS中就是被解析为一个关系代数表达式,再由执行引擎来对其进行计算的。但是对于同一条SELECT语句,可能存在多个等价的关系代数表达式。例如,对于以下语句:

SELECT 姓名
FROM 学生, 选课
WHERE 学生.学号=选课.学号 AND 课号=2 ;

存在多个等价的关系代数表达式:

​ Π姓名(σ学生.学号=选课.学号 ∧ 课号=2 (学生×选课))
​ Π姓名(σ课号=2 (学生⋈选课))
​ Π姓名(学生⋈σ课号=2 (选课)
这三个表达式的计算代价差异巨大,而DBMS的一个重要任务就是通过查询优化处理找到其中代价最小的那一个。SQL采用的这种非过程化语言形式,既简化了用户的表达,又为DBMS优化查询语句的执行性能提供了巨大的灵活性。

标签:关系,事务,数据库,元组,概述,子句,磁盘
From: https://www.cnblogs.com/lygin/p/16733022.html

相关文章