数据库概论总结

目录

第一章 绪论 3

1.1 数据库系统概述 3

1.1.1 基本概念 3

1.1.2 数据管理技术的产生和发展 4

1.2 数据模型 4

1.2.1 两类数据模型 5

1.2.2 概念模型 5

1.2.3 数据模型的组成要素 5

1.2.4 常用的数据模型 5

1.2.5 层次模型 6

1.2.6 网状模型 7

1.2.7 关系模型 7

1.3 数据库系统的结构 8

1.3.1 数据库系统模式的概念 8

1.3.2 数据库系统的三级模式结构 9

1.3.3 数据库的二级映像功能与数据独立性 9

1.4 数据库系统的组成 10

第二章 关系数据库 10

2.1 关系数据结构及形式化定义 10

2.1.1 关系 10

2.1.2 关系模式 11

2.1.3 关系数据库 11

2.2 关系操作 11

2.2.1 基本的关系操作 11

2.2.2 关系数据语言的分类 12

2.3 关系的完整性 12

2.3.1 实体完整性 12

2.3.2 参照完整性 12

2.4 关系代数 13

2.4.1 传统的集合运算 13

2.4.2 专门的关系运算 13

*2.5 关系演算 15

第三章 关系数据库标准语言SQL 16

3.1 SQL概述 16

3.1.1 SQL的产生与发展 16

3.1.2 SQL的特点 16

3.1.3 SQL的基本概念 16

3.2 学生-课程数据库 17

3.3 数据定义 18

3.3.1 模式的定义与删除 18

3.3.2 基本表的定义、删除与修改 19

3.3.3 索引的建立与删除 22

3.4 数据查询 22

字符匹配 23

Order by子句 23

聚集函数 23

Group by子句 24

3.4.2 连接查询 24

3.4.3 嵌套查询 25

带有Exists谓词 25

3.4.4 集合查询 25

3.4.5 基于派生表的查询 25

3.5 数据更新 26

3.5.1 插入数据 26

3.5.2 修改数据 26

3.5.3 删除数据 26

3.6 空值的处理 26

3.7 视图 27

3.7.1 定义视图 27

3.7.2 查询视图 27

3.7.3 更新视图 27

3.7.4 视图的作用 28

第四章 数据库安全性 28

4.1 数据库安全性概述 28

4.1.1 数据库的不安全因素 28

4.1.2 安全标准间接 28

4.2 数据库安全性控制 29

4.2.1 用户身份鉴别 29

4.2.2 存取控制 29

4.2.3 自主存取控制方法 29

4.2.4 授权:授予与收回 30

4.2.5 数据库角色 31

4.2.6 强制存取控制方法 32

4.3 视图机制 32

4.4 审计 32

4.5 数据加密 33

4.6 其他安全性保护 33

第五章 数据库完整性 33

5.1 实体完整性 33

5.1.1 定义实体完整性 33

5.1.2 实体完整性检查和违约处理 33

5.2 参照完整性 34

5.2.1 定义参照完整性 34

5.2.2 参照完整性检查和违约处理 34

5.3 用户定义的完整性 34

5.3.1 属性上的约束条件 34

5.3.2 元组上的约束条件 35

5.4 完整性约束命名子句 35

*5.5 域中的完整性限制 35

5.6 断言 35

5.7 触发器 36

5.7.1 定义触发器 36

5.7.2 激活触发器 36

5.7.3 删除触发器 37

第六章 关系数据库理论 37

6.1 问题的提出 37

6.2 规范化 38

6.2.1 函数依赖 38

6.2.2 码 39

6.2.3 范式 39

6.2.4 2NF 39

6.2.5 3NF 40

6.2.6 BCNF 40

6.2.7 多值依赖 40

第七章 数据库设计 40

 

1.1 数据库系统概述

1.1.1 基本概念

数据(Data):描述事物的符号记录称为数据。

数据库(DB,DataBase):数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。

数据库管理系统(DBMS,DataBase Management System):

    主要功能:

  • 数据定义功能
  • 数据组织、存储和管理
  • 数据操纵功能
  • 数据库的事务管理和运行管理
  • 数据库的建立和维护功能
  • 其他功能(包括数据库管理系统与网络中其他软件系统的通信功能,一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能,异构数据库之间的互访和互操作功能等)

数据库系统(DBS,DataBase System):是由数据库、数据库管理系统、应用程序和数据库管理员(DBA,DataBase Administrator)组成的存储、管理、处理和维护数据的系统。

数据库系统简称为数据库

1.1.2 数据管理技术的产生和发展

1.人工管理阶段

  1. 数据不保存
  2. 应用程序管理数据
  3. 数据不共享
  4. 数据不具有独立性

2.文件系统阶段

特点:

  1. 数据可以长期保存
  2. 由文件系统管理数据

缺点:

  1. 数据共享性差,冗余度大
  2. 数据独立性差

3.数据库系统阶段

特点:

  1. 数据结构化
  1. 说明:数据库系统实现整体数据的结构化,是数据库系统与文件系统的本质区别
  1. 数据的共享性高、冗余度低且易扩充
  2. 数据独立性高
  1. 说明:数据独立性是借助数据库管理数据的一个显著优点,包括数据的物理独立性逻辑独立性
  2. 物理独立性:是指用户的应用程序与数据库中数据的物理存储是相互独立的
  3. 逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的。
  1. 数据由数据库管理系统统一管理和控制

数据库的共享是并发的(concurrency)共享,即多个用户可以同时存取数据库中的数据。

数据库管理系统还必须提供以下几个方面的数据控制功能

  • 数据的安全性保护(保护数据以防止不合法使用造成的数据泄密和破坏)
  • 数据的完整性检查(指数据的正确性、有效性和相容性)
  • 并发控制(对多用户的并发操作加以控制和协调)
  • 数据库恢复(将数据库从错误状态恢复到某一已知的正确状态)

1.2 数据模型

数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。

数据模型是数据库系统的核心和基础

1.2.1 两类数据模型

第一类是概念模型,第二类是逻辑模型和物理模型

概念模型(也称信息模型):主要用于数据库设计

逻辑模型:包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型等。主要用于数据库管理系统的实现

物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的

1.2.2 概念模型

1.信息世界中的基本概念

  1. 实体

客观存在并可相互区别的事物称为实体

  1. 属性

实体所具有的某一特性称为属性

唯一标识实体的属性集称为码

  1. 实体型

用实体名及其属性名集合来抽象和刻画同类实体,称为实体型

  1. 实体集

同一类型实体的集合称为实体集

  1. 联系

实体之间的联系通常是指不同实体集之间的联系

实体之间的联系有一对一、一对多和多对多等多种类型。

2.概念模型的一种表示方法:实体-联系方法

该方法用E-R图来描述现实世界的概念模型,E-R方法也称为E-R型

1.2.3 数据模型的组成要素

数据模型通常由数据结构数据操作数据的完整性约束条件三部分组成

1.数据结构

    数据结构描述数据库的组成对象以及对象之间的联系

2.数据操作

    数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。主要有查询和更新(插入、删除、修改)

3.数据的完整性约束条件

数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。

1.2.4 常用的数据模型

数据库领域中主要的逻辑数据模型有:

  1. 层次模型
  2. 网状模型
  3. 关系模型
  4. 面向对象数据模型
  5. 对象关系数据模型
  6. 半结构化数据模型

层次模型和网状模型统称为格式化模型

XML为半结构化数据模型

基本层次联系是指两个记录以及他们之间的一对多(包括一对一)的联系

图中Ri位于联系Lij的始点,称为双亲结点,Rj位于联系Lij的终点,称为子女结点

1.2.5 层次模型

层次模型用树形结构来表示各类实体以及实体间的联系。

1.层次模型的数据结构

定义:

  1. 有且只有一个结点没有双亲结点,这个结点称为根结点
  2. 根以外的其他结点有且只有一个双亲结点

图中R1为根结点,R2和R3为兄弟结点,是R1的子女结点;R4和R5为兄弟结点,是R2的子女结点;R3、R4和R5为叶结点。

 

 

 

 

 

 

 

 

 

层次模型像一颗倒立的树,结点的双亲是唯一的

2.层次模型的数据操纵与完整性约束

进行插入、删除、更新操作时(注:没有查询)要满足层次模型的完整性约束

进行插入操作时,如果没有相应的双亲结点值就不能插入它的子女结点值。

进行删除操作时,如果删除双亲结点值,则相应的子女结点值也将被同时删除

3.层次模式的优缺点

优点:

  • 层次模型的数据结构比较简单清晰
  • 层次数据库的查询效率高。当要存取某个结点的记录值,DBMS就沿 着这一条路径很快找到该记录值,所以层次数据库的性能优于关系数据 库,不低于网状数据库。
  • 层次数据模型提供了良好的完整性支持

缺点:

  • 现实世界中很多联系是非层次性的,如结点之间具有多对多联系,不适合用层次模型表示。
  • 如果一个结点具有多个双亲结点等,用层次模型表示这类联系就很笨拙,只能通过引入冗余数据(易产生不一致性)或创建非自然的数据结构(引入虚拟节点)来解决。对插入和删除操作的限制比较多,因此应用程序的编写比较复杂
  • 查询子女结点必须通过双亲结点
  • 由于结构严密,层次命令趋于程序化

1.2.6 网状模型

1.网状模型的数据结构

定义:

  1. 允许一个以上的结点无双亲
  2. 一个结点可以有多于一个的双亲

层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一

2.网状模型的数据操纵与完整性约束

网状模型一般来说没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束。

  1. 支持记录码的概念,码即唯一标识记录的数据项的集合。
  2. 保证一个联系中双亲记录和子女记录之间是一对多的联系
  3. 可以支持双亲记录和子女记录之间的某些约束条件

3.网状模型的优缺点

优点:

  1. 能够更为直接地描述现实世界,如一个结点可以有多个双亲,结点之间可以有多种联系
  2. 具有良好的性能,存取效率较高

缺点:

  1. 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握
  2. 网状模型的DDL、DML复杂,并且要嵌入某一种高级语言(如COBOL、C)中。用户不容易掌握,不容易使用
  3. 由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写应用程序的负担

1.2.7 关系模型

关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。是最重要的一种数据模型

1.关系模型的数据结构

术语:

  1. 关系:一个关系对应通常说的一张表
  2. 元组:表中的一行即为一个元组
  3. 属性:表中的一列即为一个属性,给每个属性起一个名称即属性名
  4. 码:也称码键,表中的某个属性组,可以唯一确定一个元组,如学号可以唯一确定一个学生,所以学号是学生的码
  5. 域:域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。如性别的域是(男,女)
  6. 分量:元组中的一个属性值
  7. 关系模式:对关系的描述,一般表示为 关系名(属性1,属性2,…,属性n),如 学生(学号,姓名,年龄,性别,系名,年级)

关系术语

一般表格的术语

关系名

表头

关系模式

表头(表格的描述)

关系

(一张)二维表

元组

记录或行

属性

属性名

列名

属性值

列值

分量

一条记录中的一个列值

非规范关系

表中有表(大表中嵌有小表)

2.关系模型的数据操纵与完整性约束

关系模式的增、删、改、操作必须满足关系的完整性约束条件。关系的完整性约束

3.关系模型的优缺点

优点:

  1. 关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的
  2. 关系模式的概念单一
  3. 关系模式的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作

缺点:

  1. 由于存取路径对用户隐蔽,查询效率往往不如格式化数据模型

1.3 数据库系统的结构

1.3.1 数据库系统模式的概念

在数据模型中有“型”和“值”的概念。型是指对某一类数据的结构和属性的说明,值是型的一个具体赋值

模式是数据库中全体数据的逻辑结构和特征的描述,仅仅涉及型的描述,不涉及具体的值。

模式是相对稳定的,而实例是相对变动的。

1.3.2 数据库系统的三级模式结构

数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成

1.模式

模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式是数据库数据在逻辑级上的视图(例如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等)。一个数据库只有一个模式

2.外模式

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

3.内模式

内模式也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式(例如记录的存储方式是堆存储)

1.3.3 数据库的二级映像功能与数据独立性

为了能够在系统内部实现这三个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像

1.外模式/模式映像

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

2.模式/内模式映像

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

1.4 数据库系统的组成

1.硬件平台及数据库

2.软件

数据库系统的软件主要包括:

  1. 数据库管理系统
  2. 支持数据库管理系统运行的操作系统
  3. 具有与数据库接口的高级语言及其编译系统,便与开发应用程序
  4. 以数据库管理系统为核心的应用开发工具
  5. 为特定应用环境开发的数据库应用系统

3.人员

人员分别包括如下职责

  1. 数据库管理员(DataBase Administrator,DBA)

职责包括

  • 决定数据库中的信息内容和结构
  • 决定数据库的存储结构和存取策略
  • 定义数据的安全性要求和完整性约束条件
  • 监控数据库的使用和运行
  • 数据库的改进和重组、重构
  1. 系统分析员和数据库设计人员
  2. 应用程序员
  3. 用户

分类:

    • 偶然用户(一般是企业或组织机构的高中级管理人员)
    • 简单用户(主要工作是查询和更新数据库,如银行职员)
    • 复杂用户(比较熟悉数据库管理系统的各种功能,能够直接使用数据库语言访问数据库的具有较高科学技术背景的人员)
  • 关系数据库

2.1 关系数据结构及形式化定义

关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

2.1.1 关系

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

  1. 笛卡儿积

笛卡儿积为其中,每一个元素叫作一个n元组,或简称元组,元组中的每一个值叫作一个分量

一个域允许的不同取值个数称为这个域的基数

  1. 关系

的子集叫做在域上的关系,表示为,这里R表示关系的名字,n是关系的

当n=1时,称该关系为单元关系,或一元关系

当n=2时,称该关系为二元关系

若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码

候选码的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性非码属性

关系模式的所有属性是这个关系模式的候选码,称为全码

关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。

基本关系的六条性质:

  1. 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
  2. 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
  3. 列的顺序无所谓,即列的次序可以任意交换
  4. 任意两个元组的候选码不能取相同的值
  5. 行的顺序无所谓,即行的次序可以任意交换
  6. 分量必须取原子值,即每一个分量都必须是不可分的数据项(最基本的)

2.1.2 关系模式

关系的描述称为关系模式,它可以形式化的表示为,其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合

2.1.3 关系数据库

关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库

2.2 关系操作

2.2.1 基本的关系操作

关系模型中常用的关系操作包括查询和插入、删除、修改两大部分

关系的查询表达能力很强,是关系操作中最主要的部分。其中选择、投影、并、差、笛卡儿积是5种基本操作,其他操作可以用基本操作来定义和导出,就像乘法可以用加法来定义和导出一样

关系操作的对象和结果都是集合

2.2.2 关系数据语言的分类

结构化查询语言(SQL)是集查询、数据定义语言、数据操纵语言和数据控制语言于一体的关系数据语言,SQL语言是一种高度非过程化的语言

2.3 关系的完整性

关系模型有三类完整性约束:实体完整性、参照完整性和用户定义的完整性,其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性

2.3.1 实体完整性

实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。空值指的是“不知道”或“不存在”或“无意义”的值

对实体完整性规则说明:

  1. 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合
  2. 现实世界中的实体是可区分的,即它们具有某种唯一性标识。例如每个学生都是独立的个体,是不一样的
  3. 相应地,关系模型中以主码为唯一性标识
  4. 主码中的属性及主属性不能取空值

2.3.2 参照完整性

设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系

参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:

  1. 或者取空值(F的每个属性值均为空值)
  2. 或者等于S中某个元组的主码值,学生关系中每个元组的“专业号”属性只能取下面两类值
    1. 空值,表示尚未给该学生分配专业
    2. 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中

2.4 关系代数

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

2.4.1 传统的集合运算

传统的集合运算时二目运算,包括并、差、交、笛卡儿积4种运算

并、差、交运算的结果关系仍为n目关系

笛卡儿积:

    两个分别为n目和m目的关系R和S的笛卡儿积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组

2.4.2 专门的关系运算

专门的关系运算包括选择、投影、连接、除运算等

  1. 设有一个学生-课程数数据库,包括学生关系Student、课程关系Course和选修关系SC
  2. Student

学号

Sno

姓名

Sname

性别

Ssex

年龄

Sage

所在系

Sdept

201215121

李勇

20

CS

201215122

刘晨

19

CS

201215123

王敏

18

MA

201215125

张立

19

IS

  1. Course

课程号

Cno

课程名

Cname

先行课

Cpno

学分

Ccredit

1

数据库

5

4

2

数学

 

2

3

信息系统

1

4

4

操作系统

6

3

5

数据结构

7

4

6

数据处理

 

2

7

PASCAL语言

6

4

  1. SC

学号

Sno

课程号

Cno

成绩

Grade

201215121

1

92

201215121

2

85

201215121

3

88

201215122

2

90

201215122

3

80

 

1.选择

选择又称为限制。它是在关系R中选择满足给定条件的诸元组,记作

    

其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”

  1. 条件表达式中的运算符

运算符

含义

比较运算符

大于

大于等于

小于

小于等于

等于

<>

不等于

逻辑运算符

 

例:

(1)查询信息系(IS系)全体学生

    

    相当于select * from Student where Sdept='IS'

Sno

Sname

Ssex

Sage

Sdept

201215125

张立

19

IS

 

(2)查询年龄小于20岁的学生

    

    相当于select * from Student where Sage<20

Sno

Sname

Ssex

Sage

Sdept

201215122

刘晨

19

CS

201215123

王敏

18

MA

201215125

张立

19

IS

 

2.投影

关系R上的投影是从R中选择出若干属性列组成新的关系。记作

    

其中A为R中的属性列

例:

  1. 查询学生姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影

    

相当于select Sname,Sdept from Studnet

Sname

Sdept

李勇

CS

刘晨

CS

王敏

MA

张立

IS

 

  1. 查询学生关系Student中都有哪些系,即查询关系上Student上所在系属性上的投影

相当于select Sdept from Studnet

Sdept

CS

MA

IS

 

3.连接

连接也称为连接。它是从两个关系的笛卡儿积中选择属性间满足一定条件的元组,记作

    

其中,A和B分别为R和S上列数相等且可比的属性组,是比较运算符。连接运算从R和S的笛卡儿积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系的元组

为“=”的连接运算称为等值连接

自然连接是一种特殊的等值连接

4.除运算

设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中

R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集包含S在Y上投影的集合。记作

    

其中为x在R中的象集,

关系代数中,这些元素经有限次复合后形成的表达式称为关系代数表达式

*2.5 关系演算

 

第三章 关系数据库标准语言SQL

结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言

3.1 SQL概述

3.1.1 SQL的产生与发展

目前,没有一个数据库系统能够支持SQL标准的所有概念和特性

3.1.2 SQL的特点

  1. 综合统一

非关系模型(层次模型、网状模型)的数据语言一般都分为

  1. 模式数据定义语言
  2. 外模式数据定义语言
  3. 数据存储有关的描述语言
  4. 数据操纵语言
  1. 高度非过程化
  2. 面向集合的操作方式
  3. 以同一种语法结构提供多种使用方式
  4. 语言简洁,易学易用

SQL的动词

SQL功能

动词

数据查询

select

数据定义

create,drop,alter

数据操纵

insert,update,delete

数据控制

grant,revoke

 

3.1.3 SQL的基本概念

数据库的三级模式结构

3.2 学生-课程数据库

首先要定义一个学生-课程模式S-T。学生-课程数据库中包括以下三个表

  1. 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
  2. 课程表:Course(Cno,Cname,Cpno,Ccredit)
  3. 学生选课表:SC(Sno,Cno,Grade)
  1. Student

学号

Sno

姓名

Sname

性别

Ssex

年龄

Sage

所在系

Sdept

201215121

李勇

20

CS

201215122

刘晨

19

CS

201215123

王敏

18

MA

201215125

张立

19

IS

  1. Course

课程号

Cno

课程名

Cname

先行课

Cpno

学分

Ccredit

1

数据库

5

4

2

数学

 

2

3

信息系统

1

4

4

操作系统

6

3

5

数据结构

7

4

6

数据处理

 

2

7

PASCAL语言

6

4

  1. SC

学号

Sno

课程号

Cno

成绩

Grade

201215121

1

92

201215121

2

85

201215121

3

88

201215122

2

90

201215122

3

80

 

3.3 数据定义

SQL的数据定义语句

操作对象

操作方式

创建(create)

删除(drop)

修改

模式

create schema

drop schema

 

create table

drop table

alter table

视图

create view

drop view

 

索引

create index

drop index

alter index

一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象

3.3.1 模式的定义与删除

  1. 定义模式

    在SQL中,模式定义语句如下:

        create schema <模式名> authorization <用户名>

    如果没有指定<模式名>,那么<模式名>隐含为<用户名>

要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的create schema 的权限

例:

  1. 为用户wang定义一个学生-课程模式S-T

    create schema "S-T" authorization wang

  1. create schema authorization wang

    该语句没有指定<模式名>,所以<模式名>隐含为用户名wang

目前,在create schema中可以接受create table,create view和grant子句。也就是说用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权。

create schema <模式名> authorization <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]

例:

    为用户zhang创建一个模式test,并且在其中定义一个表tab1

    create schema test authorization zhang

    create table tab1(col1 smallint,

                    col2 int,

                    col3 char(20),

col4 numeric(10,3),

col5 decimal(5,2)

)

  1. 删除模式

在SQL中,模式定义语句如下:

        drop schema <模式名> <cascade|restrict>

    例:

        drop schema zhang cascade

        该语句删除了模式zhang,同时,该模式中已经定义的表tab1也被删除了

3.3.2 基本表的定义、删除与修改

  1. 定义基本表

create table <表名> ( <列名> <数据类型> [列级完整性约束条件],

                   <列名> <数据类型> [列级完整性约束条件],

                   <列名> <数据类型> [列级完整性约束条件],

                   [,<表级完整性约束条件>]

                  )

    例:

        1.建立一个“学生”表Student

        create table Student

( Sno char(9) primary key,

/*列级完整性约束条件,Sno为主码*/

 Sname char(20) unique, /*Sname取唯一值

 Ssex char(2),

 Sage smallint,

 Sdept char(20)

)

2.建立一个“课程”表Course

create table course

 ( Cno char(4) primary key,

/*列级完整性约束条件,Cno是主码*/

  Cname char(40) not null,

/*列级完整性约束条件,Cname不能取空值*/

  Cpno char(4), /*Cpno的含义是先修课*/

  Ccredit smallint,

  foreign key(Cpno) references Course(Cno)

/*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/

)

  1. 数据类型

每个属性来自一个域,它的取值必须是域中的值

 

数据类型

含义

char(n),

character(n)

长度为n的定长字符串

varchar(n),

charactervarying(n)

最大长度为n的变长字符串

clob

字符串大对象

blob

二进制大对象

int,integer

长整数(4字节)

smallint

短整数(2字节)

bigint

大整数(8字节)

numeric(p,d)

定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字

decimal(p,d),

dec(p,d)

同numeric

real

取决于机器精度的单精度浮点数

double precision

取决于机器精度的双精度浮点数

float(n)

可选精度的浮点数,精度至少为n为数字

boolean

逻辑布尔量

date

日期,包含年、月、日,格式为YYYY-MM-DD

time

时间,包含一日的时、分、秒,格式为HH:MM:SS

timestamp

时间戳类型

interval

时间间隔类型

 

  1. 模式与表

每一个基本表都属于某一个模式,一个模式包含多个基本表

  1. 修改基本表

alter table <表名>

[add [column] <新列名> <数据类型> [完整性约束]]

[add <表级完整性约束>]

[drop [column] <列名> [cascade|restrict]]

[drop constraint <完整性约束名> [restrict|cascade]]

[alter column <列名> <数据类型>];

其中<表名>是要修改的基本表,add子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。drop column 子句用于删除表中的列,如果指定了cascade短语,则自动删除引用了该列的其他对象,比如视图;如果指定了restrict短语,则如果该列被其他对象引用,rdbms将拒绝删除该列。drop constraint子句用于删除指定的完整性约束条件。alter column子句用于删除原有的列定义,包括修改列名和数据类型

例:

  1. 向Student添加“入学时间”列,其数据类型为日期型

alter table Student add S_entrance date;

  1. 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数

alter table Student alter column Sage int

  1. 增加课程名必须取唯一值的约束条件

alter table Course add unique(Cname)

  1. 删除基本表

drop table <表名> [restrict|cascade];

若选择restrict,则表的删除是有限制条件的。与删除的基本表不能被其他表的约束所引用(如check,foreign key等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。

若选择cascade,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除

默认情况是restrict

例:

  1. 删除Student表

     drop table Student cascade

  1. 若表上建有视图,选择restrict时表不能删除;选择cascade时可以删除表,视图也自动被删除

create view IS_Student /*Student表上建立视图*/

as

select Sno,Sname,Sage

from Student

where Sdept='IS'

 

drop table Student restrict /*删除Student表*/

--ERROR:cannot drop table Student because other objects depend on it

/*系统返回错误信息,存在依赖该标的对象,此表不能被删除*/

 

drop table Student cascade /*删除Student表*/

--NOTICE:drop cascades to view IS_Student

/*系统返回提示,此表上的视图也被删除*/

 

select * from IS_Student

--ERROR:relation "IS_Student" does not exist

序号

 

 

依赖基本表的对象

标准及主流数据库的处理方式

SQL2011

Kingbase ES

Oracle 12c

MS SQL Server 2012

R

C

R

C

R

C

 

1

索引

无规定

2

视图

×

×

保留

保留

保留

3

default,primary key,check(只含该表的列) not null 等约束

4

外码foreign key

×

×

×

×

5

触发器trigger

×

×

6

函数或存储过程

×

保留

保留

保留

保留

保留

×:表示不能删除基本表

√:表示能删除基本表

保留:表示删除基本表后,还保留依赖对象

 

3.3.3 索引的建立与删除

数据库索引能快速定位到需要查询的内容

数据库索引类型,常见的包括:顺序文件上的索引、B+树索引、散列(hash)索引、位图索引等。

索引虽然能加速数据库查询,但是需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护。

用户不必也不能显式地选择索引

  1. 建立索引

     create [unique] [cluster] index <索引名>

     on <表名>(<列名> [<次序>] [,<列名> [<次序>]]…)

    例:

  1. 为学生-课程数据库中的Student、Course和SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序唯一索引。

create unique index Stusno on Studnet(Sno)

create unique index Coucno on Course(Cno)

create unique index SCno on SC(Sno ASC,Cno DESC)

  1. 修改索引

alter index <旧索引名> rename to <新索引名>

例:

将SC表的SCno索引名改为SCno

alter index SCno rename to SCSno

  1. 删除索引

drop index <索引名>

例:

删除Student表的Stusname索引

drop index Stusname

3.4 数据查询

select [all|distinct] <目标列表达式> [,<目标列表达式>]…

from <表名或视图名> [,<表名或视图名>…] | (<select 语句>) [as] <别名>

[where <条件表达式>]

[group by <列名1> [having <条件表达式>]]

[order by <列名2> [asc|desc]]

  1. 如果有group by子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果group by子句带having短语,则只有满足指定条件的组才予以输出

如果有order by子句,则结果表还要按<列名2>的值的升序或降序排序。

select子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式

例,查询全体学生的姓名及出生年份(设今年为2017年)

select Sname,2017-Sage from Student    /*2017-Sage是一个表达式*/

  1. <目标列表达式>不仅可以是算术表达式,还可以是字符串常量、函数等

select Sname,'Year of Birth:',2017-Sage,LOWER(Sdept) from Student

/*'Year of Birth'列每一行的值都为Year of Birth,LOWER(Sdept)列的每一个值为原Sdept列的小写

 

  1. 消除取值重复的行,用distinct,默认为all(全部显示)
  1. 查询满足条件的元组

常用的查询条件

查询条件

谓词

比较

=,>,<,>=,<=,!=,<>,!>,!<; not+上述比较运算符

确定范围

between … and …,not between … and …

确定集合

in,not in

字符匹配

like,not like

空值

is null,is not null

多重条件(逻辑运算)

and,or,not

字符匹配

[not] like '<匹配串>' [escape '<换码字符>']

匹配串可以是一个完整的字符串,也可以含有通配符%和_

  1. %(百分号)代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串,如acb、addgb、ab
  2. _(下划线)代表任意单个字符(一个汉字需要两个_)。例如a_b表示以a开头,以b结尾的长度为3的任意字符串,如acb、afb

Order by子句

用户可以用order by子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序(ASC)

对于空值,排序时显示的次序由具体系统实现来决定。按升序排,含空值的元组最后显示;按降序排,含空值的元组最先显示

聚集函数

函数用法

函数作用

count(*)

统计元组个数

count( [distinct|all] <列名> )

统计一列中值的个数

sum( [distinct|all] <列名> )

计算一列值的总和(此列必须是数值型)

avg( [distinct|all] <列名> )

计算一列值的平均值(此列必须是数值型)

max( [distinct|all] <列名> )

求一列值中的最大值

min( [distinct|all] <列名> )

求一列值中的最小值

  1. 如果指定distinct短语,则表示在计算时要取消列中的重复值,默认为all(不取消重复值)

Group by子句

group by子句将查询结果按某一列或多列的值分组,值相等的为一组

分组后聚集函数将作用于每一个组,即每一组都有一个函数值

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用having短语指定筛选条件

例:

查询选修了三门以上课程的学生学号

select Sno from SC group by Sno having count(*)>3

where子句与having短语的区别在于作用对象不同。where子句作用于基本表或视图,从中选择满足条件的元组。having短语作用于组,从中选择满足条件的组

  1. where子句中不能使用聚集函数作为条件表达式

3.4.2 连接查询

连接查询包括:等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询等

  1. 等值于非等值连接查询

    连接查询的where子句中用来连接两个表的条件称为连接条件连接谓词,其一般格式为

[<表名1>.] <列名1> <比较运算符> [<表名2>.] <列名2>

此外连接谓词还可以使用下面形式:

[<表名1>.] <列名1> between [<表名2>.] <列名2> and [<表名2>.]<列名3>

当连接运算符为=时称为等值连接,使用其他运算符称为非等值连接

连接谓词中的列名称为连接字段

例:select Student.*,SC.* from Student,SC where Student.Sno=SC.Sno

  1. 嵌套循环连接算法的基本思想:

首先在表Student中找到第一个元组,然后从头开始扫描SC表,逐一查找与Student第一个元组的Sno相等的SC元组,找到后就将Student中的第一个元组与该元组拼接起来,形成结果表中一个元组。SC全部查找完后,再找Student中第二个元组,然后再从头开始扫描SC,逐一查找满足连接条件的元组,找到后就将Student中的第二个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到Student中的全部元组都处理完毕为止。

若在等值连接中把目标列中重复的属性列去掉则为自然连接

  1. 自身连接

一个表与其自己进行连接,称为表的自身连接

例:查询每一门课的间接先修课

select first.Con,second.Cpno from Course first,Course second where first.Cpno=second.Cno

  1. 外连接

    左外连接列出左边关系中所有元组,右外连接列出右边关系中所有的元组

3.4.3 嵌套查询

一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询

上层查询块称为外层查询或父查询,下层查询块称为内层查询或子查询

  1. 子查询的select不能使用order by子句

子查询的查询条件不依赖于父查询,称为不相关子查询,如果子查询的查询条件依赖于父查询,称为相关子查询,整个查询语句称为相关嵌套查询语句

带有Exists谓词

带有Exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”

例:查询所有选修了1号课程的学生姓名

select Sname from Student where exists

(select * from SC where Sno=Student.Sno and Cno='1')

使用存在量词Exists后,若内层查询结果非空,则外层的where子句返回真值,否则返回假值

not exists的规则与之相反

3.4.4 集合查询

集合操作主要包括并操作union、交操作intersect和差操作except,参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同

例:

1.查询计算机科学系的学生及年龄不大于19岁的学生

select * from Student where Sdept='CS' union select * from Student where Sage<=19

2.查询计算机科学系的学生与年龄不大于19岁的学生的交集

select * from Student where Sdept='CS' intersect select * from Student where Sage<=19

  1. 查询既选修了课程1又选修了课程2的学生。就是查询选修课程1的学生集合与选修课程2的学生集合的交集

select Sno from SC where Cno='1' intersect select Sno from SC where Cno='2'

也可以用嵌套查询的方式代替

3.4.5 基于派生表的查询

子查询不仅可以出现在where子句中,还可以出现在from子句中,这时子查询生成的临时派生表成为主查询的查询对象

3.5 数据更新

3.5.1 插入数据

insert into <表名> [(<属性列1> [,<属性列2>]…)] values (<常量1> [,<常量2>]…)

如insert into Student(Sno,Sname,Ssex,Sdept,Sage) values('201215128','陈冬','男','IS',18)

字符串常量要用单引号(英文)括起来

  1. 插入子查询结果

insert into <表名> [(<属性列1> [,<属性列2>…])] 子查询

如:insert into Dept_age(Sdept,Avg_age) select Sdept,AVG(Sage) from Student group by Sdept

3.5.2 修改数据

update <表名> set <列名>=<表达式> [,<列名>=<表达式>]… [where <条件>]

如:update Student set Sage=22 where Sno='201215121'

3.5.3 删除数据

delete from <表名> [where <条件>]

delete语句删除的是表中的数据,而不是关于表的定义

3.6 空值的处理

空值是一个很特殊的值,含有不确定性

空值的判断用is null 或 is not null

加了unique限制的属性不能取空值,码属性不能取空值

空值与另一个值(包括另一个空值)的运算结果为unknown。有了unknown后,传统的逻辑运算中二值(True,False)逻辑就扩展成了三值逻辑

逻辑运算符真值表

x

y

x and y

x or y

not x

T

T

T

T

F

T

U

U

T

F

T

F

F

T

F

U

T

U

T

U

U

U

U

U

U

U

F

F

U

U

F

T

F

T

T

F

U

F

U

T

F

F

F

F

T

3.7 视图

3.7.1 定义视图

视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化

1.建立视图

create view <视图名> [(<列名> [,<列名>] …)]

as <子查询>

[with check option]

 

子查询可以使任意的select语句,是否可以含有order by子句和distinct短语,则取决于具体系统的实现

例:建立信息系学生的视图

create view IS_Student as select Sno,Sname,Sage

from Student

where Sdept='IS'

例:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。

create view IS_Student as select Sno,Sname,Sage

from Student

where Sdept='IS'

with check option

因为在定义IS_Student视图时加上了with check option,以后对该视图进行插入、修改和删除操作时,关系数据库管理系统会自动加上Sdept='IS'的条件

视图可以建立在另一个视图上

create view IS_S2 as select Sno,Sname,Grade

from IS_S1(此处的IS_S1就是一个视图)

where Grade>=90

2.删除视图

drop view <视图名> [cascade]

使用cascade级联删除语句把该视图和由它导出的所有视图一起删除

drop view IS_S1 /*拒绝执行,必须使用cascade*/

drop view IS_S1 /*视图IS_S1和IS_S2都被删除了*/

3.7.2 查询视图

与和基本表的操作相同

视图消解:从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询

3.7.3 更新视图

由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新

在定义视图时加上with check option子句则在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行

3.7.4 视图的作用

  1. 视图能够简化用户的操作
  2. 视图使用户能以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 视图能够对机密数据提供安全保护
  5. 适当利用视图可以更清晰地表达查询

第四章 数据库安全性

4.1 数据库安全性概述

4.1.1 数据库的不安全因素

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

4.1.2 安全标准间接

TCSEC/TDI将系统划分为4组7个等级,依次是D、C(C1,C2)、B(B1,B2,B3)、A(A1),按系统可靠或可信程度逐渐增高

TCSEC/TDI安全级别划分

安全级别

定义

A1

验证设计

B3

安全域

B2

结构化保护

B1

标记安全保护

C2

受控的存取保护

C1

自主安全保护

D

最小保护

 

CC提出了目前国际上公认的表述信息技术安全性的结构,即把对信息产品的安全要求分为安全功能要求和安全保证要求。CC的文本由三部分组成,三个部分互相依存,缺一不可

第一部分:简介和一般模型,介绍CC中的有关术语、基本概念和一般模型以及与评估有关的一些框架

第二部分:安全功能要求,列出了一系列类、子类和组件。由11大类、66个子类和135个组件构成

第三部分:安全保证要求,列出了一系列保证类、子类和组件,包括7大类、26个子类和74个组件

CC评估保证级的划分

评估保证级

定义

TCSEC安全级别

(近似相当)

EAL1

功能测试

 

EAL2

结构测试

C1

EAL3

系统地测试和检查

C2

EAL4

系统地设计、测试和复查

B1

EAL5

半形式化设计和测试

B2

EAL6

半形式化验证的设计和测试

B3

EAL7

形式化验证的设计和测试

A1

 

4.2 数据库安全性控制

4.2.1 用户身份鉴别

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

4.2.2 存取控制

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

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

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

自主存取控制:用户对于不用的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授

4.2.3 自主存取控制方法

用户权限是由两个要素组成的:数据库对象和操作类型

定义权限称为授权

关系数据库系统中的存取权限

对象类型

对象

操作类型

数据库模式

模式

create schema

基本表

create table,alter table

视图

create view

索引

create index

数据

基本表和视图

select,insert,update,delete,references,all privileges

属性列

select,insert,update,references,all privileges

4.2.4 授权:授予与收回

grant语句用于向用户授予权限,revoke语句收回已经授予用户的权限

1.Grant

grant <权限> [,<权限>]…

on <对象类型> <对象名> [,<对象类型> <对象名>]…

to <用户> [,<用户>]…

[with grant option]

如果指定了with grant option子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定with grant option子句,则获得某种权限的用户只能使用该权限,不能传播该权限

不能循环授权,即被授权者不能把权限再授回给授权者或其祖先

例:

1.把查询Student表的权限授给用户U1

grant select

on table Student

to U1

 

2.把对Student表和Course表的全部操作权授予用户U2和U3

grant all privileges

on table Studnet,Course

to U2,U3

 

3.把对表SC的查询权限授予所有用户

grant select

on table SC

to public

 

4.把查询Studnet表和修改学生学号的权限授给用户U4

grant update(Sno),select

on table Student

to U4

 

2.Revoke

revoke <权限> [,<权限>]…

on <对象类型> <对象名> [,<对象类型> <对象名>]…

from <用户> [,<用户>]…[cascade|restrict]

如果用户1 赋予了用户2的权限带着(赋予选项) WITH GRANT OPTION ,然后用户2 给了用户3,则用户1可以使用 CASCADE 关键字废除用户2和3的权限

如果用户1给予用户2权限带着(赋予选项)WITH GRANT OPTION,然后用户2又把它给予了用户3,则如果用户1 试图带着 RESTRICT 关键字废除这个权限就会失败

例:

1.收回所有用户对表SC的查询权限

revoke select

on table SC

from public

 

2.把用户U5及其转授的对SC表的insert权限收回

revoke insert

on table SC

from U5 cascade

 

3.创建数据库模式的权限

对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现

create user <username> [with] [DBA|Resource|Connect]

权限与可执行的操作对照表

拥有的权限

可否执行的操作

create user

create schema

create table

登录数据库,执行数据库查询和操纵

DBA

可以

可以

可以

可以

Resource

不可以

不可以

可以

可以

Connect

不可以

不可以

不可以

可以,但必须拥有相应权限

 

create user语句不是SQL标准,因此不同的关系数据库管理系统的语法和内容相差甚远

4.2.5 数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合

  1. 角色的创建

create role <角色名>

  1. 给角色授权

grant <权限> [,<权限>]…

on <对象类型> 对象名

to <角色> [,<角色>]…

  1. 将一个角色授权其他的角色或用户

grant <角色1> [,<角色2>]

to <角色3> [,<用户1>]…

[with admin option]

  1. 角色权限收回

revoke <权限> [,<权限>]…

on <对象类型> <对象名>

from <角色> [,<角色>]

4.2.6 强制存取控制方法

自主存取控制能够通过授权机制有效地控制对敏感数据的存取

主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等

密级的次序是TS(绝密)>=S(机密)>=C(可信)>=P(公开)

当某一用户(或某一主体)以标记label注册入系统时,系统要求他对于任何客体的存取必须遵循如下规则

  1. 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
  2. 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体

如果违反了规则(2),就有可能把数据的密级从高流向低,造成数据的泄漏

4.3 视图机制

可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内

例:建立计算机系学生的视图,把该视图的select权限授予王平,把该视图上的所有操作权限授予系主任张明

/*建立视图*/

create view CS_Student

as select *

from Student

where Sdept='CS'

 

/*王平老师只能检索计算机系学生的信息*/

grant select

on CS_Student

to 王平

 

/*系主任张明具有对计算机系学生的所有权限*/

grant all privileges

on CS_Student

to 张明

4.4 审计

审计功能把用户对数据库的所有操作自动记录下来放入审计日志中

  1. 审计事件
  1. 服务器时间
  2. 系统权限
  3. 语句事件
  4. 模式对象事件
  1. 审计功能
  1. 基本功能
  2. 提供多套审计规则
  3. 提供审计分析和报表功能
  4. 审计日志管理功能
  5. 系统提供查询审计设置及审计记录信息的专门视图
  1. audit语句和noaudit语句

audit语句用来设计审计功能,noaudit语句则取消审计功能

4.5 数据加密

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

  1. 存储加密
  2. 传输加密
  1. 确认通信双方端点的可靠性
  2. 协商加密算法和密钥
  3. 可信数据传输

4.6 其他安全性保护

推理控制:避免用户利用其能够访问的数据推知更高密级的数据

隐蔽信道:强制存取控制未解决的问题

数据隐私:控制不愿被他人知道或他人不便知道的个人数据的能力

第五章 数据库完整性

数据库的完整性是指数据的正确性和相容性,数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的

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

5.1 实体完整性

5.1.1 定义实体完整性

关系模型的实体完整性在create table中用primary key定义。

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

关系数据库管理系统一般都在主码上自动建立一个索引,以避免对基本表进行全表扫描,节省时间

5.2 参照完整性

5.2.1 定义参照完整性

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

例:

关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno、Cno分别参照引用Student表的主码和Course表的主码。定义SC中的参照完整性

create table SC

(

Sno char(9) not null,

Cno char(4) not null,

Grade smallint,

primary key (Sno,Cno), /*在表级定义实体完整性*/

foreign key (Sno) references Student(Sno),

/*在表级定义参照完整性*/

foreign key (Cno) references Course(Cno),

/*在表级定义参照完整性*/

 

)

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

当上述的不一致发生时,系统可以采用以下策略加以处理

  1. 拒绝(No action)执行

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

  1. 级联(Cascade)操作

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

  1. 设置为空值

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

5.3 用户定义的完整性

5.3.1 属性上的约束条件

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

5.3.2 元组上的约束条件

  1. 元组上约束条件的定义

在create table语句中可以用check短语定义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件

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

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

5.4 完整性约束命名子句

1.完整性约束命名子句

constraint <完整性约束条件名> <完整性约束条件>

<完整性约束条件>包括not null、unique、primary key、foreign key、check短语等

例:建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”

create table Student

(

Sno numeric(6)

constraint C1 check (Sno between 90000 and 99999),

Sname char(20)

constraint C2 not null,

Sage numeric(3)

constraint C3 check (Sage<30),

Ssex char(2)

constraint C4 check (Ssex in ('男','女')),

constraint StudentKey primary key,

)

在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4这4个列级约束

2.修改表中的完整性限制

可以使用alter table语句修改表中的完整性限制

例:去掉上面例子中Student表中对性别的限制

alter table Student drop constraint C4

*5.5 域中的完整性限制

 

5.6 断言

在SQL中可以使用数据定义语言中的create assertion语句,通过声明性断言来指定更具一般性的约束

  1. 创建断言的语句格式

create assertion <断言名> <check子句>

例:限制数据库课程最多60名学生选修

create assertion ASSE_SC_DB_NUM

check (60>=(select count(*) from Course,SC

where SC.CNO=COURSE.CNO

and COURSE.CNAME='数据库'))

  1. 删除断言的语句格式

drop assertion <断言名>

5.7 触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中

5.7.1 定义触发器

触发器又叫做事件-条件-动作规则

create trigger <触发器名> /*每当触发事件发生时,该触发器被激活*/

{before|after} <触发器名> on <表名>

/*指明触发器激活的时间是在执行触发事件前或后*/

referencing new|old row as <变量>

/*referencing指出引用的变量*/

for each{row|statement} /*定义触发器的类型,指明动作体执行的频率*/

[when <触发条件>] <触发动作体>

/*仅当触发条件为真时才执行触发动作体*/

定义触发器的各部分语法说明

  1. 只有表的拥有者,即创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器。
  2. 触发器名可以包含模式名,也可以不包含模式名。同一模式下,触发器名必须是唯一的,并且触发器名和表名必须在同一模式下
  3. 表名:触发器只能定义在基本表上,不能定义在视图上
  4. 触发事件:触发事件可以是insert、delete或update,也可以是这几个事件的组合
  5. 触发器类型:触发器按照所触发动作的间隔尺寸可以分为行级触发器和语句级触发器
  6. 触发条件:触发器被激活时,只有当触发条件为真时触发动作体才执行,否则不执行
  7. 触发动作体:触发动作体既可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用

5.7.2 激活触发器

同一个表上的多个触发器激活时遵循的执行顺序

  1. 执行该表上的before触发器(多个时谁先创建谁先执行
  2. 激活触发器上的SQL语句
  3. 执行该表上的after触发器

5.7.3 删除触发器

drop trigger <触发器名> on <表名>

第六章 关系数据库理论

6.1 问题的提出

一个关系模式应当是一个五元组

这里:

  1. 关系名R是符号化的元组语义
  2. U为一组属性
  3. D为属性组U中的属性所来自的域
  4. DOM为属性到域的映射
  5. F为属性组U上的一组数据依赖

由于D、DOM与模式设计关系不大,因此在本章中把关系模式看作一个三元组:

当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系

  1. 作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式1NF

函数依赖:比如描述一个学生的关系,可以有学号(Sno)、姓名(Sname)、系名(Sdept)等几个属性,由于一个学号只对应一个学生,一个学生只在一个系学习。因而当“学号”值确定后,学生的姓名及所在系的值也就被唯一地确定了。属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一的确定了。类似的有Sname=f(Sno),Sdept=f(Sno),即Sno函数决定Sname,Sno函数决定Sdept,或者说Sname和Sdept函数依赖于Sno,记作Sno→Sname,Sno→Sdept

例:建立一个描述学校教务的数据库,该数据库涉及的对象包括学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)和成绩(Grade)。假设用一个单一的关系模式Student来表示,则该关系模式的属性集合为

U={Sno,Sdept,Mname,Cno,Grade}

现实世界的已知事实(语义)告诉我们:

  • 一个系有若干学生,但一个学生只属于一个系
  • 一个系只有一名(正职)负责人
  • 一个学生可以选修多门课程,每门课程有若干学生选修
  • 每个学生学习每一门课程有一个成绩

于是得到属性组U上的一组函数依赖F

F={Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade}

如果只考虑函数依赖这一种数据依赖,可以得到一个描述学生的关系模式

    Student<U,F>

但是这个关系模式存在以下问题:

  1. 数据冗余

比如一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同

  1. 更新异常

由于数据冗余,当更新数据库中的数据时,系统需要付出很大的代价来维护数据库的完整性

  1. 插入异常

如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库

  1. 删除异常

如果一个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了

因此需要改造此模式,分成三个关系模式:

S(Sno,Sdept,Sno→Sdept)

SC(Sno,Cno,Grade,(Sno,Cno)→Grade)

DEPT(Sdept,Mname,Sdept→Mname)

这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制

6.2 规范化

6.2.1 函数依赖

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

术语与记号:

  1. X→Y,但,则称X→Y是非平凡的函数依赖
  2. X→Y,但,则称X→Y是平凡的函数依赖
  3. 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素
  4. 若X→Y,Y→X,则记作X←→Y
  5. 若Y不函数依赖于X,则记作XY

在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X'Y,则称Y对X完全函数依赖,记作

若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作

例如(Sno,Cno)Grand是完全函数依赖,(Sno,Cno)Sdept是部分函数依赖,因为Sno→Sdept成立

定义:在R(U)中,如果X→Y(),YX,Y→Z,则称Z对X传递函数依赖。记为

例如Sno→Sdept,Sdept→Mname成立,所以SnoMname

6.2.2 码

定义:设K为R<U,F>中的属性或属性组合,若,则K为R的候选码

如果U部分函数依赖于K,即,则K称为超码。候选码是最小的超码,即K的任意一个真子集都不是候选码。

若候选码多于一个,则选定其中的一个为主码

包含在任意一个候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性非码属性。最简单的情况,单个属性是码;整个属性组是码,称为全码

例:

  1. 关系模式S(Sno,Sdept,Sage)中单个属性Sno是码,用下划线显示出来。

SC(Sno,Cno,Grade)中属性组合(Sno,Cno)是码

定义:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码

6.2.3 范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的叫第一范式,简称1NF;在第一范式中满足进一步要求的为第二范式,其余以此类推。

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

6.2.4 2NF

定义:若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF

例:有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade),其中Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno)。则函数依赖有

(Sno,Cno)Grand

Sno→Sdept

(Sno,Cno)Sdept

Sno→Sloc

(Sno,Cno)Sloc

Sdept→Sloc(每个系的学生只住一个地方)

此关系模式不属于2NF

不属于2NF会产生以下问题

  1. 插入异常
  2. 删除异常
  3. 修改复杂

6.2.5 3NF

定义:设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z()使得X→Y,Y→Z成立,YX,则称R<U,F>∈3NF

若R∈3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码

6.2.6 BCNF

关系模式R<U,F>∈1NF,若X→Y且时X必含有码,则R<U,F>∈BCNF

关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF

时间关系,剩余章节还未总结

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值