第四章 数据库基础

1. 基本概念

1.1 数据库与数据库管理系统(DBMS)

  • 数据库系统(DBS):从广义上讲是由数据库、硬件、软件和人员组成的,其中管理的对象是数据.

  • 数据库管理系统(DBMS):数据定义,数据库操作,数据库运行管理,数据组织、存储和管理,数据库的建立和维护

1.2 DBMS 的特征与分类

  • DBMS 的特征:数据结构化且统一管理、有较高的数据独立性、数据控制功能

  • DBMS 的分类:关系数据库系统(RDBS)、面向对象的数据库系统(OOBS)、对象关系数据库系统(ORDBS)

2. 数据模型

基本数据模型。它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于DBMS的实现。

基本 的数据模型有层次模型、网状模型、关系模型和面向对象模型(OOM)

2.1 数据模型的三要素

数据模型是用来描述数据的一组概念和定义。数据模型的三要素是数据结构、数据操作、数据的约束条件

  • 数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。
  • 数据操作:是对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及操作规则。数据操作是 对系统动态特性的描述。
  • 数据的约束条件:是一组完整性规则的集合。也就是说,对于具体的应用数据必须遵循特定的语义约束条 件,以保证数据的正确、有效、相容。

2.2 E-R 模型

实体-联系模型简称E-R模型,所采用的3个主要概念是实体联系属性

  • 实体:客观存在并且可以相互区别的事物称为实体。如一个单位,一个职工

  • 属性:描述实体的特征称为属性。如学生实体用若干属性(学号、姓名、性别、出生日期、班级号)来描述。

    E-R 模型中的属性有以下分类:

    • 简单属性和复合属性

      • 简单属性是原子的、不可再分的

      • 复合属性可以细分为更小的部分(即划分为别的属性)

    • 单值属性和多值属性

      • 若定义的属性对于一个特定的实体只有一个值,这样的属性叫做单值属性

      • 若定义的属性对应一组值,则称为多值属性

    • NULL属性:当实体在某个属性上没有值或属性值未知时,使用NULL值,表示无意义或不知道

    • 派生属性:可以从其他属性得来

  • 码:唯一标识实体的属性称为码。如学号是学生实体的码。

  • 域:属性的取值范围称为该属性的域。如性别域为(男、女)

  • 联系:实体之间的对应的关系称为联系。

    • 实体内部个属性之间的联系

    • 实体之间的联系

      • 一对一联系(1:1)。如班和班长之间是一对一联系。

      • 一对多联系(1:n)。班和学生之间是一对多联系。

      • 多对多联系(m:n)。课程和学生之间是多对多联系。

E-R 方法:概念模型中最常用的方法是实体-模型方法,简称E-R方法。该方法直接从现实世界中抽象出实体 和实体间的联系,然后用非常直观的E-R图来表示数据模型。在E-R图中主要构件如下:

3. 三级模式结构

3.1 模式结构

数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构

  • 外模式(视图):也称用户模式或视图,是用户与数据库系统的接口,是用户用到的那部分数据的描述,由若干个 外部记录类型组成
  • 概念模式(基本表)。也称模式,是数据库中全体数据的逻辑结构和特征的描述,它由若干个概念记录类型组成,只涉 及行的描述,不涉及具体的值
  • 内模式(存储文件)。也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的 内部记录类型、索引和文件的组织方式以及数据控制方面的细节

3.2 两级映像

数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。
保证了数据库中的数据具有较高的逻辑独立性和物理独立性。

  • 模式/内模式映像:(物理独立性)该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。
  • 外模式/模式映像(逻辑独立性)。该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换。

4. 关系型模式的基本术语

  • 关系:一个关系就是一张二维表,每个关系有一个关系名
  • 元组:表中的一行即为一个元组,对应存储文件中的一个记录值。
  • 属性:表中的称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
  • :属性的取值范围
  • 关系模式:对关系的描述称为关系模式,由关系名和其属性集合构成,关系模式的格式为:关系名(属性名1,属性名2,…,属性名n)
  • 候选码(候选健):属性或属性组合其值能够唯一地标识一个元组。
  • 主码(主键):在一个关系中可能有多个候选码,从中选择一个作为主码。
  • 主属性:所有候选键都称为主属性,其他的属性都称为非主属性。
  • 外码(或外键):如果一个关系中的属性或属性组并非该关系(二维表)的码,但它们是另外一个关系(二维表)的码,则称其为该关系的外码。
  • 全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。
  • 超码(超键):一个包含码的属性集称为超码。例如学号是码,则(学号,姓名)就是一个超码。

5. 完整性约束

完整性规则保证用户对数据库做修改时不会破坏数据的一致性。

  • 实体完整性:关系中主码的值不能为空或部分为空。即主属性不能为空。
  • 参照完整性:如果关系R2的外码X与关系R1的主码相对应,则外码X的每个值必须在关系R1中的主码中找到,或者为空值。
  • 用户定义完整性:指用户对某一具体数据指定的约束条件进行检验。(如手机号码为11位)

6. 关系代数运算符

  • 投影:投影运算是从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作πA®

  • 选择:选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的的元组,记作σF®

  • 连接:连接运算是从两个关系R和S的笛卡儿积中选取满足条件的元组。

    • θ连接:从R与S的笛卡儿积中选取属性间满足一定条件的元组。
    • 等值连接:当 θ 为 “=” 时,称之为等值连接。
    • 自然连接:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉

    可以认为笛卡儿积是无条件连接,其他的连接操作认为是有条件连接。

  • 外连接:外连接运算是连接运算的扩展,可以处理由于连接运算而缺失的信息。

    • 左外连接(⟕):取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null充填所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果中。
    • 右外连接(⟖):取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中。
    • 全外连接(⟗)。完成左外连接和右外连接的操作。即填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,并填充右侧关系中所有与左侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中。

7 SQL语言

  • SQL不支持列的序号
  • SQL支持三级模式结构:视图对应外模式、基本表对应模式、存储文件对应内模式

7.1 SQL语言的分类

  • DDLData Definition Language数据定义语言):用来定义数据库对象:数据库,表,列等。

    关键字:CREATEDROPALTER 等。

  • DMLData Manipulation Language数据操作语言):用来对数据库中表的数据进行增删改。

    关键字:INSERTDELETEUPDATE 等。

  • DQLData Query Language数据查询语言):用来查询数据库中表的记录。

    关键字:SELECT等。

  • DCLData Control Language数据控制语言):用来定义数据库的访问权限和安全级别,及创建用户。

7.2 数据定义(DDL)

  • 创建表:

    1
    2
    3
    CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
    [,<列名><数据类型>[列级完整性约束条件]]...
    [,<表级完整性约束条件>]);

    列级完整性约束条件有NULL、UNIQUE,如NOT NULL UNIQUE表示取值唯一,不能取空值

  • 修改表

    1
    2
    3
    ALTER TABLE <表名>[ADD<新列名><数据类型>[列级完整性约束条件]]
    [DROP <完整性约束名>]
    [MODIFY <列名><数据类型>];
  • 删除表

    1
    DROP TABLE <表名>
  • 建立索引

    1
    2
    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
    • <次序>:可选升序(ASC)或降序(DSC),默认值为ASC
    • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
    • CLUSTER:表示要建立的索引是聚集索引,意为索引项的顺序与表中记录的物理顺序一致。
  • 删除索引

    1
    DROP INDEX <索引名>;
  • 创建视图

    ​ 视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基 础表而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中

    1
    2
    3
    4
    CREATE VIEW 视图名 (列表名)
    AS SELECT 查询子句
    [WITH CHECK OPTION];

    • 子查询可以是任意复杂的 SELECT 语句,但通常不允许含有 ORDER BY 子句和 DISTINCT 短语
    • WITH CHECK OPTION 表示对 UPDATE、INSERT、DELETE 操作时要保证更新、插入或删除的行满足视图定 义中的谓词条件(即子查询中的条件表达式)
    • 组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由 SELECT 子查询目标 列的主属性组成
  • 删除视图

    1
    DROP VIEW 视图名;

7.3 数据查询(DQL)

  • 基本结构

    1
    2
    3
    4
    5
    6
    SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式> ]...
    FROM<表名或视图名>[,<表名或视图名>]
    [WHERE<条件表达式>]
    [GROUP BY <列名1>[HAVING<条件表达式>]]
    [ORDER BY <列名2>[ASC|DESC]];

  • 其他查询

    • 子查询:子查询也称为嵌套查询,是指一个 SELECT-FROM-WHERE 查询可以嵌入另一个查询块之中。在SQL 中允许多重嵌套。
    • 聚集函数:聚集函数是以一个值的集合为输入,返回单个值的函数。SQL提供了5个预定义集合函数,即平 均值AVG、最小值MIN、最大值MAX、求和SUM 及 计数COUNT
    • 分组查询
      • GROUP BY 子句:在WHERE子句后面加上GROUP BY子句可以对元组进行分组,保留字GROUP BY后面跟着一 个分组属性列表。最简单的情况是,FROM子句后面只有一个关系,根据分组属性对其元组进行分组。SELECT 子句中使用的聚集操作符仅用在每个分组上。
      • HAVING 子句:假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,则在GROUP BY子句后面 跟一个HAVING子句即可。当元组含有空值时时,应注意以下两点:
        • 空值在任何聚集操作中都被忽略。它对求和、求平均值和计数都没有影响,也不能是某列的最大值或最 小值
        • NULL 值可以在分组属性中看作一个一般的值。
    • 字符串操作:对于字符串进行的最通常的操作是使用 LIKE 操作符的模式匹配。使用两个特殊的字符来描述模式,即“%” 匹配任意字符串、“-” 匹配任意一个字符

7.4 数据操作(DML)

  • 插入
1
2
3
4
5
INSERT INTO基本表名[(字段名[,字段名>]...)]
VALUE(常量[,常量]...); 查询语句
INSERT INTO 基本表名 (列表名)
SELECT 查询语句

  • 修改
1
2
3
UPDATE 基本表名
SET 列名=值表达式[,列名=值表达式...]
[WHERE条件表达式];
  • 删除
1
2
DELETE FROM 基本表名
[WHERE 条件表达式]

7.5 数据控制(DCL)

数据控制是控制用户的数据存储权利,是由DBA来决定的。DBMS 数据控制应具有以下功能:

  • 通过 GRANT 和 REVOKE 将授权通知系统,并存入数据词典

  • 当用户提出请求时,根据授权情况检查是否执行操作请求

  • SQL标准包括 DELETE、INSERT、SELECT 和 UPDATE 权限

授权语句

1
2
3
4
GRANT<权限>[,<权限>]...
[ON<对象类型><对象名>]
To<用户>[,<用户>]...
[WITH GRANT OPTION];
  • PUBLIC:接受权限的用户可以是单个或多个具体的用户,PUBLIC 参数可将权限赋予全体用户

  • WITH GRANT OPTION:若指定了此子句,获得权限的用户还可以将权限赋予其他用户

收回权限

1
2
REVOKE<权限>[ ,<权限>]...[ ON<对象类型><对象名>]...
FROM<用户>[,<用户>]...,

8. 关系数据库规范化

8.1 函数依赖

函数依赖则是一种最重要、最基本的数据依赖

  • 函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对R(U)的任何一个可能的关系r,r中 不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X→Y

  • 非平凡的函数依赖:如果X→Y,但Y\nsubseteqX,则称X→Y是非平凡的函数依赖

  • 平凡的函数依赖:如果X→Y,但Y\subseteqX,则称X→Y是平凡的函数依赖

  • 完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’不能决定Y,则称Y对X完全函 数依赖,记作Xf\xrightarrow{f}Y

  • 部分函数依赖:如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作Xp\xrightarrow{p}Y。部分函数依赖也称 局部函数依赖

  • 传递依赖:在R(U,F)中,如果X→Y,Y\nsubseteqX,Y不能函数决定X,Y→Z,则称Z对X传递依赖

  • 函数依赖的公理系统

    设关系模式R(U,F)中,U为属性集,F是U上的一组函数依赖, 那么有以下的推理规则:

8.2 范式之间的关系

8.3 1NF(第一范式)

定义:若关系模式 R 每一个分量是不可再分的数据项,则关系模式 R 属于第一范式。

1NF可能存在的问题:

  • 数据冗余:数据的冗余度大,R中可能出现多个元组在多个属性集中值相同
  • 修改异常:引起修改操作的不一致性,修改一条记录可能需要修改其他多条记录才能保持数据一致性(由数据冗余引起)
  • 插入异常:主码不能取空值或部分空值,会出现插入异常
  • 删除异常:本该删除但又客观存在的元组,会出现删除异常。即,删除掉的数据可能包含着其他本不该被删除的属性

问题的原因是1NF中可能存在部分函数依赖。

8.4 2NF(第二范式)

定义:若关系模式 R∈1NF,且每一个非主属性完全依赖于码,则关系模式 R∈2NF。

当 1NF 消除了非主属性对码的部分函数依赖,则称为 2NF。

可能存在数据冗余和更新异常等问题。

8.5 3NF(第三范式)

2NF 消除了非主属性对码的传递函数依赖,则称为 3NF。

属于 3NF 的关系模式 R 可能存在主属性对候选码的部分依赖和传递依赖。

8.6 BC范式(BCNF)

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

BC范式已经消除了插入和删除异常

一个满足BCNF的关系模式,应具有以下性质

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有非主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性

8.7 规范化步骤

9. 模式分解

  • 分解:关系模式R(U,F)的一个分解是指p={R1(U1,F1),R2(U2, F2).…,Rn(Un,Fn)}

  • 对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有3种情况:

    • 分解具有无损连接性
    • 分解要保持函数依赖
    • 分解既要无损连接性,又要保持函数依赖
  • 无损连接

  • 保持函数依赖

10. 数据库的控制功能

事务是一个操作序列,是数据库环境中不可分割的逻辑工作单位。事务的4个特性是原子性、一致性、隔离性和持久性.

  • 原子性:事务的所有操作在数据库中要么全做,要么全都不做
  • 一致性:一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而被破坏
  • 隔离性:一个事务的执行不能被其他事务干扰
  • 持久性:一个事务一旦提交,它对数据库中数据的改变必须是永久的,即便系统出现故障时也是如此

11. 并发控制

并发操作是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。并发操作带来问题的原因是事务的 并发操作破坏了事务的隔离性。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不被破坏, 避免用户得到不正确的数据

并发操作带来的问题:并发操作带来的数据不一致性有3类,即丢失修改、不可重复读 和 读“脏”数据

11.1 并发控制技术

  • 封锁:并发控制的主要技术

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

    • 共享锁(S锁):若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S 锁,直到T释放A上的S锁

  • 三级封锁协议

    一级封锁协议:事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以解决丢失更新问题

    二级封锁协议:在一级封锁协议的基础上,加上事务T在读取数据R前必须先对其加S锁,读完后即可释 放S锁。二级封锁协议可以解决读“脏”数据的问题,但是由于二级封锁协议读完数据后即可释放S锁, 以它不能保证可重复读

    三级封锁协议:在一级封锁协议的基础上,加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议可以防止丢失修改、读“脏”数据和不可重复读

12. 分布式数据库

  • 分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
  • 复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的。
  • 位置透明:指用户无须知道数据存放的物理位置
  • 逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型
  • 共享性:指数据存储在不同的结点数据共享
  • 自治性:指每结点对本地数据都能独立管理
  • 可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
  • 分布性:指数据在不同场地上的存储