第一章:

概念部分:

数据(Data): 数据库中存储的基本对象
数据库(Database): 长期储存在计算机内, 有组织的, 可共享的大量数据的集合
数据库管理系统(DBMS):

  • 位于用户和操作系统之间的一层数据管理软件
  • 是基础软件, 是一个大型的复杂的软件系统
    数据库系统(DBS):
    由数据库, 数据库管理系统(及其应用开发工具), 应用程序, 数据库管理员组成.

区别和联系:

  1. 数据库是计算机信息系统和应用系统的核心,是数据库管理系统处理的对象;
  2. 数据库管理系统是对计算机中所存放的大量数据进行组织、管理、查询并提供一定处理功能的大型系统软件,是用来处理数据库中的数据的软件;
  3. 数据库系统是数据库及其管理、维护和使用所需要的计算机硬件、软件和使用人员的总和,数据库和数据库管理系统属于数据库系统的一部分.

数据库管理系统的功能:

  1. 定义功能
  2. 操纵功能
  3. 控制功能
  4. 其他

市面上主流的数据库:

  1. Oracle
  2. Sql server
  3. Mysql
  4. DB2
  5. Access

三个世界:

  1. 现实世界
  2. 信息世界
  3. 机器世界

两种模型:

  1. 概念模型: 也称信息模型, 按照用户的观点, 对数据进行信息建模.
    • 三要素: 数据结构, 数据操作, 完整性约束
  2. 逻辑模型 or 物理模型
    • 层次模型
    • 网状模型
    • 关系模型

E-R图: (Entity - Relationship diagram) 实体-联系图

第二章

概念部分

域: 相同数据类型的集合

笛卡尔积: 所有域的所有取值的一个组合

关系: 笛卡尔积的子集 = 元组的集合

元组: 笛卡尔积中的每一个元素, 关系中的每个元素是关系中的元组

属性: 关系中不同列可以对应相同的域, 为了加以区分,必须对每列起一个名字,称为属性

键: 建立和标识表之间的关系,也用于唯一标识表中的任何记录或数据行

候选键: 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码

主键: 若一个关系有多个候选码,则选定其中一个为主码(Primary key)

外键: 外部关键字, 不是本表的键, 但是其他表的键

数据模型的三个组成部分:

  • 数据结构
  • 数据操作
  • 完整性约束

关系模型的三要素:

  1. 关系结构
  2. 关系操作
  3. 关系三类完整性约束条件
    • 实体完整性
    • 参照完整性
    • 用户自定义的完整性

参照完整性中外键什么时候可以取空值,什么时候不能取空值 ?

答: 如果外键是键的一部分就不能取空值

关系代数部分:
模板:

  • π 列名1, 列名2 σ 限制1 ∧ 限制2 (表1 ∞ 表2 ∞ 表3)

注意:

  • <> 不等于符号
  • ➗ 用于至少, 或全部

关系 = 二维表, 属性一列, 元组一行

第三章 SQL

定义语句:

create table, drop table
注意:

  • primary key
  • foreign key
  • check, not null, unique
  • 组合键: primary key (1, 2, 3)
  • 外键: foreign key (列名) references 表名(列名)
  • 约束: constraint 约束名 check(约束条件)
  • alter table 表名
    add constraint 约束名 check(约束条件)

操纵语句:

  • insert into 表名(列名1, 列名2, 列名3)
    values (‘’, ‘’, ‘’)
  • delete
    from 表名
    where 条件
  • update 表名
    set 列名1 = ‘’, 列名2 = ‘’, 列名3 = ‘’
    from (若更改其他表中的外键, 需要将这几个表联合起来)
    where
  • select *
    from 表 (inner join 表 on 条件)
    where 条件
    group by 列名
  • create view

注意:

  • order by () asc, 升序, desc 降序
  • group by 分组
  • having count(type) >= 5

视图部分:

所有的视图是否都可以更新?为什么?

  • 答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更
    新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有
    的视图都是可更新的.

哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

  • 答:基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图
    肯定是不可以更新的。

控制语句

安全性

  • grant 权限
    on 对象
    to 角色
  • revoke 权限
    on 对象
    from 角色

  • 使用SQL语句完成以下操作:将“数据库”成绩的查询权、成绩字段的修改权授予除用户Gary之外的所有用户;

  • 答:

create view v1
as
select *
from

第四章 安全性

数据库的安全性:

  • 保护数据库以防止不合法的使用所造成的数据泄露, 更改或损坏

安全性控制的常用方法和技术

  1. 用户标识和鉴别
  2. 存取控制
  3. 操作系统的安全性控制
  4. 数据加密
  5. 视图机制
  6. 审计

自主存取控制:
定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。

强制存取控制:
每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

例子:

  1. 将 student 表和 class 表的所有权限授予用户 U1,同时使得 U1 拥有将获得权限授予他人
    的权限
    grant all privileges on Student,Class
    to U1
    with grant option;
  2. 每个职工只对自己的记录有 select 权力。
    grant select on 职工
    when user() = name

理解并解释 MAC 机制中主体、客体、敏感度标记的含义。

  • 主体是系统中的活动实体,既包括 DBMS 所管理的实际用户,也包括代表用户的各进程。
    客体是系统中的被动实体,是受主体操纵的,包括文件、基表、索引、视图等。对于主体和
    客体,DBMS 为它们每个实例(值)指派一个敏感度标记(Label )。
    敏感度标记被分成若干级别,例如绝密(Top Secret )、机密(Secret )·可信( Confidential )、
    公开(PubliC )等。主体的敏感度标记称为许可证级别(ClearanCe 玫 vel ) ,客体的敏感
    度标记称为密级(Classification Level )。

什么是数据库的审计功能,为什么要提供审计功能?

  • 答:审计功能是指 DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录
    到系统的审计日志中。

第五章 完整性

定义: 什么是数据库的完整性?

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

完整性与安全性的差别:

  • 完整性措施的防范对象是不合语义的数据
  • 安全性措施的防范对象是非法用户和非法操作

什么是数据库的完整性约束

  • 完整性约束是指数据库中数据应该满足的语义约束条件

常见的关系约束

  1. 实体完整性约束
  2. 参照完整性约束
  3. 用户自定义约束

关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一
般是如何分别进行处理的?

  • 违反 实体完整性用户定义的完整性 时, 一般采用拒绝执行。
  • 对于违反参照完整性的操作, 并不都是简单的拒绝执行, 有时要根据应用语义执行一些附加的操作, 以保证数据库的正确性(可能会 级联删除( CASCADES ) ; 受限删除( RESTRICTED ) ; 置空值删除( NULLIFIES ))。

第六章

不规范的模式引发的问题:

  • 原因是函数依赖

函数依赖:

  • 依赖 = 蕴含(离散数学 “->”), True: 1->1, 0->1, 0->0; False: 1->0
  • 如果 X->Y, 但 Y 不包含于 X, 则称 X->Y 是非平凡的函数依赖
    如果 X->Y, 但 Y 不包含于 X, 则称 X->Y 是平凡的函数依赖
    如果无特别说明, 则为 非平凡的函数依赖

判定范式:

  • 1NF: 不存在复合表
  • 2NF: 所有非主属性都完全依赖于候选键(码)
  • 3NF: 所有非主属性不传递依赖于其他非主属性
  • BCNF: 所有主属性不传递依赖于其他属性

特判情况:

  1. 任何一个二目关系是属于3NF: 因为关系模式中只有两个属性, 所以无传递
  2. 任何一个二目关系是属于BCNF: 按BCNF的定义, 若X, Y且Y不是X的子集时, 每个决定因素都包含码, 对于二目关系决定因素必然包含码
  3. 所有键为单属性的关系模式至少属于2NF: 因为键为单属性, 不会存在非主属性对键的部分依赖

第七章

数据库设计的六个步骤:

  1. 需求分析: 准确了解与分析用户需求(包括数据与处理)。
  2. 概念结构设计: E-R图
  3. 逻辑结构设计: 表设计
  4. 数据库物理设计: 数据的存储和存取
  5. 数据库实施: 建立数据库, 运行调试
  6. 数据库运行和维护: 运行过程对其评价, 调整和修改

E-R图 -> 设计表 -> 判定范式

第九章 查询优化

数据查询中代数优化的基本原则是什么 ?

  • 选择运算尽可能先做, 尽量减少连接中表的大小

选择运算的查询优化方法: 五点
表连接的查询优化方法: 三点

物理优化: 建立索引

第十章

数据库恢复技术

事务: 用户定义的一个数据库操作序列, 这些操作要么全做, 要么全不做, 是一个不可分割的工作单位
四个特性(ACID特性): 原子性(Atomicity), 一致性(Consistency), 隔离性(Isolation), 持续性(Durability)

  • 原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事
    务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持续性:持续性也称永久性( Permanence),指一个事务一旦提交,它对数据库中数据的改变就
    应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

数据库的故障:

  1. 事务内部的故障
  2. 系统故障
  3. 介质故障
  4. 计算机病毒
    其中: 事务故障, 系统故障, 介质故障影响事务的正常执行, 介质故障和计算机病毒破坏数据库数据

数据库恢复的基本技术

  • 数据库恢复的基本原理就是增加数据冗余
  1. 数据转储
  2. 登记日志文件

数据转储: 当系统运行过程发生故障, 利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态

日志文件: 日志文件是用来记录事务对数据库的更新操作的文件。
登记日志文件时为什么必须先写日志文件,后写数据库?

  • 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。

事务故障恢复:
系统故障恢复:
介质故障恢复:
具有检查点的恢复技术:

第十一章 并发控制

并发操作可能会产生哪几类数据不一致 ?

  1. 丢失修改
  2. 不可重复读
  3. 读 “脏” 数据

封锁: 封锁就是事务 T 在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。
加锁后事务 T 就对该数据对象有了一定的控制,在事务 T 释放它的锁之前,其他的事务不能更新此数据
对象。

排他锁(X锁) : 排它锁又称为写锁。若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A,其他任何事务都不能再对 A 加任何类型的锁,直到 T 释放 A 上的锁。这就保证了其他事务在 T 释放 A 上的锁之前不能再读取和修改 A。

共享锁(S锁) : 共享锁又称为读锁。若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A 但不能修改 A,其他事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。这就保证了其他事务可以读 A,但在 T 释放 A 上的 S 锁之前不能对 A 做任何修改。

活锁:

  • 产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
  • 如何避免: 先来先服务

死锁:

  • 在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。(T1封锁R1, 等待R2, T2封锁R2, 等待R1, 相互等待, 无限期)
  • 如何避免:
    • 一次封锁法: 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
    • 顺序封锁法: 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

并发调度的可串行性:

可串行化调度:

  • 多个事务的并发执行时正确的, 当且仅当其结果与按某一次序串行地执行这些事务时地结果相同

什么样的并发调度是正确的调度?

  • 可串行化( Serializable)的调度是正确的调度。

两段锁协议:

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

“两段”的含义是,事务分为两个阶段:

  • 第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的
    锁,但是不能释放任何锁。
  • 第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何
    锁。