数据库期末复习(三)

数据库期末复习(三)

DBMS的主要作用

DBMS是用户/应用程序与物理数据之间的"中间软件层",它负责安全、高效、统一地管理数据,并向上层屏蔽底层存储的复杂性。

具体来说,它的核心作用可以总结为以下四大职能

1. 数据定义与构建(搭架子)

  • 负责执行DDL(数据定义语言),建立我们之前讲的三级模式结构(外模式、概念模式、内模式),并定义数据的完整性约束(如主键、外键规则)。

2. 数据操纵与访问(做服务)

  • 负责执行DML(数据操作语言),为用户和应用程序提供增、删、改、查(CRUD)接口。它会把我们写的高层SQL语句,翻译成底层文件能理解的读写指令。

3. 数据的控制与管理(保安全)

  • 安全性:检查用户权限,防止非法访问(对应外模式的视图隔离)。
  • 完整性:保证数据符合规则(比如年龄不能是负数)。
  • 并发控制:处理多用户同时访问,避免数据错乱(通过事务和锁机制)。
  • 故障恢复:在系统崩溃后,利用日志将数据恢复到一致状态。

4. 实现数据独立性(核心价值)

  • 维护两级映射 (外/概念映射、概念/内映射)。这正是我们上一题的核心:
    • 当DBA改变存储方式(建索引)时,应用程序不用改(物理独立性)。
    • 当表结构微调(加字段)时,用户视图可以不变(逻辑独立性)。

关系模型

关系模型是数据库领域的基础概念。它由IBM研究员E.F.Codd在1970年提出,是逻辑数据模型的一种。目前主流的关系数据库(如MySQL、Oracle、SQL Server)都基于此模型。

下面从数据结构、数据操作和完整性约束三个方面来说明关系模型,这也对应了数据模型的三要素。


1. 数据结构:二维表

关系模型的数据结构简单统一,就是二维表格。用户看到的数据和表之间的关系,都以这种逻辑上的二维表形式呈现。

相关术语对照如下:

  • 关系(Relation) :对应一张二维表
  • 元组(Tuple) :对应表中的一行(一条记录)。
  • 属性(Attribute) :对应表中的一列(一个字段)。
  • 域(Domain):属性的取值范围,比如性别的域是{男,女}。
  • 分量(Component):元组中的一个属性值,即表格中的一个具体单元格。

关系必须满足的特性

  • 每个分量必须是不可分的数据项(满足第一范式)。
  • 表中不允许出现重复的行(元组唯一)。
  • 行与列的顺序可以任意交换,不影响逻辑含义。

2. 关系的键(码)

为了唯一标识表中的行,关系模型引入了键(Key)的概念:

  • 超键(Super Key):能唯一标识一个元组的属性或属性组合,可能包含多余属性。
  • 候选键(Candidate Key):能唯一标识元组且不含多余属性的属性组合。一个关系可能有多个候选键。
  • 主键(Primary Key):从候选键中选定一个,作为该表的唯一标识。主键值不能重复,也不能为空。
  • 外键(Foreign Key):一个表中的属性,如果它是另一个表的主键,则称为外键。外键用于建立表与表之间的联系。

3. 数据操作:关系代数与关系演算

关系模型的数据操作是日面向集合的,操作对象和结果都是关系(二维表)。用户不需要指定数据的物理存取路径,DBMS会负责优化。

  • 关系代数:以集合运算为基础,包含传统的集合运算(并、交、差、笛卡尔积)和专门的关系运算(选择、投影、连接、除)。
  • 关系演算:以谓词逻辑为基础,用户只需描述"要什么",不需要描述"怎么取"。
  • SQL语言:SQL是关系数据库的标准语言,它综合了关系代数和关系演算的特点,是用户操作关系数据库的实际工具。

4. 完整性约束

关系模型定义了三类完整性规则,由DBMS自动维护:

  • 实体完整性:主键的属性值必须唯一,且不能取空值。
  • 参照完整性:外键的值要么为空,要么必须等于被参照表的主键值。
  • 用户定义完整性:根据业务需求自定义的约束,例如年龄范围(0-150)、性别只能为男或女等。

5. 关系模型的优缺点

优点

  • 数据结构简单,用户容易理解。
  • 数据独立性高,用户无需关心物理存储细节。
  • 有坚实的数学理论基础(集合论和逻辑学),便于优化和规范化。

缺点

  • 处理复杂对象或嵌套结构时表达能力有限(例如处理树形结构或图结构时操作不够直观)。
  • 对于大规模高并发场景,严格的ACID事务约束可能会限制性能扩展,这也是NoSQL数据库出现的原因之一。

关系代数

关系代数是一种过程化查询语言 。它通过一组运算,以一个或多个关系(二维表)作为输入,并输出一个新的关系作为结果。核心特征是封闭性:运算的结果仍然是关系,因此可以嵌套组合,形成复杂查询表达式。

关系代数定义了8种基本运算,可以分成集合运算专门关系运算两类。


1. 集合运算(基于行)

这类运算来源于数学集合论,要求参与运算的两个关系必须并兼容:它们具有相同的属性个数,且对应属性的数据类型相同。

运算 符号 作用 示例(求结果)
返回属于R或属于S的所有元组(去重) 选修了数学课或英语课的学生集合
返回同时属于R和S的元组 既选修了数学课又选修了英语课的学生集合
- 返回属于R但不属于S的元组 只选修了数学课但没选修英语课的学生集合
笛卡尔积 × 将R的每一行与S的每一行进行组合,生成一个更大的关系 学生表 × 课程表 = 每个学生与每门课程的排列组合(无实际意义,常配合选择使用)

2. 专门关系运算(基于行列操作)

这类运算直接针对二维表的行和列进行操作,是查询中最核心的部分。

运算 符号(希腊字母) 作用 类比SQL
选择 σ(Sigma) 按条件筛选行。从关系中选择满足给定条件的元组。 WHERE 条件子句
投影 π(Pi) 按列筛选。从关系中选择指定的若干属性,并去除重复行。 SELECT 列名
连接 ⨝(Join) 将两个关系根据条件组合成一个新关系。这是笛卡尔积 + 选择条件的组合。 JOIN ... ON ...
÷(Division) 适合处理"查询全部/所有"的问题。例如:查询选修了所有必修课程的学生。 通常用 NOT EXISTS 实现

3. 连接运算的进一步细分

连接是关系代数中最常用也最重要的运算,按条件不同分为:

  • θ连接(Theta Join) :最通用的连接,在笛卡尔积基础上应用一个比较条件(如 R.A > S.B)。
  • 等值连接(Equi Join) :θ连接的特例,连接条件只能是相等(如 R.id = S.id)。
  • 自然连接(Natural Join) :等值连接的特例。它自动寻找两个关系中同名 的属性,自动做等值连接,并去掉重复的同名列。这是实际中最常用的连接方式。
  • 外连接(Outer Join):在自然连接基础上,保留未匹配成功的行(左外、右外、全外)。

4. 重命名运算

  • 符号:ρ(Rho)
  • 作用:给关系或属性起临时别名。常用于自连接(一个表与自身连接)或嵌套查询中。

5. 关系代数与 SQL 的关系

  • 关系代数 是SQL语言的理论基础 。SQL的 SELECT 语句本质上就是关系代数表达式的具体实现。
  • 对应关系:SELECT ... FROM ... WHERE ... GROUP BY ... 的底层解析,最终会被数据库优化器转换成关系代数操作树进行优化。
  • 过程化特征 :关系代数指明了运算的顺序 (先做什么、后做什么)。与之相对的是关系演算,它只描述"要什么"而不描述"怎么做",SQL更接近关系演算,但执行时被转换成关系代数。

6. 示例说明(方便理解)

假设有两个表:学生(学号,姓名)选课(学号,课程)

查询:查找选修了"数据库"课程的学生的姓名。

关系代数表达式

复制代码
π_姓名( σ_课程='数据库'( 学生 ⨝ 选课 ) )

运算步骤

  1. 学生 ⨝ 选课:做自然连接,得到"学号-姓名-课程"的完整信息。
  2. σ_课程='数据库':选择出课程为"数据库"的行。
  3. π_姓名:只投影出"姓名"这一列。
相关推荐
Dlrb12111 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
不会写DN1 小时前
MySQL 并发插入竞态问题:原子写入实践指南
数据库·mysql
霖霖总总2 小时前
[MongoDB小技巧24]MongoDB $lookup 聚合阶段深度解析:从入门到实战
数据库·mongodb
挨踢诗人2 小时前
京东企业购 × 企业微信 采购闭环集成解决方案
前端·数据库·企业微信
梦想的旅途22 小时前
企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案
java·开发语言·数据库·机器人·自动化·企业微信
得物技术2 小时前
得物 OceanBase 落地实践
数据库·分布式·架构
程序员cxuan2 小时前
OceanBase 为什么要做 AI 数据库?
数据库·人工智能·大模型·llm·oceanbase
Alan_752 小时前
GraphQL 深度解析:为什么它能替代传统 REST API
数据库·后端
少时登峰2 小时前
【吃透 MySQL InnoDB连载】第 6 章・索引底层原理
数据库·mysql