《数据库系统概论》学习笔记——王珊 萨师煊

文章目录

第一章 绪论

一、数据库系统概述

1.数据库的4个基本概念

(1)数据

描述事物的符号记录称为数据

(2)数据库

存放数据的仓库

(3)数据库管理系统

主要功能:
(1)数据定义功能
(2)数据组织、存储和管理
(3)数据操纵功能
(4)数据库的事务管理和运行管理
(5)数据库的建立和维护

(4)数据库系统

由数据库、数据库管理系统、应用程序、数据库管理员组成的存储、管理、处理和维护数据的系统

2.数据库的发展

人工管理阶段——>文件系统阶段——>数据库系统阶段
在这里插入图片描述

3.数据库系统的特点

(1)数据(整体)结构化
这就要求在描述数据时不仅要描述数据本身,还要描述数据之间的关系
(2)数据的共享性高、冗余度低且易扩充
数据共享——>减少了数据冗余
(3)数据独立性高
物理独立性:应用程序和数据库中数据的物理存储是相互独立的
逻辑独立性:用户的应用程序与数据库的逻辑结构是相互独立的
(4)数据由数据库管理系统统一管理和控制
数据库管理系统必须提供以下几方面的数据控制功能:
数据的安全性保护
数据的完整性检查
并发控制
数据库恢复

二、数据模型

1.模型分类

(1)第一类:概念模型

概念模型是现实世界到信息世界的第一层现象

信息世界中的基本概念:
1)实体
2)属性:实体所具有的某一特性(如:性别,学号,姓名)
3)码:唯一标识实体的属性(如:学号)
4)实体型:用实体名和属性名集合来抽象和刻画同类实体,称为实体型。
如:学生(姓名,学号,性别)
5)联系:实体之间的联系通常指实体集之间的联系
有:一对一,一对多,多对多

概念模型的一种表示方法:
实体-联系方法(E-R模型)

(2)第二类:逻辑模型和物理模型

逻辑模型,包括层次模型、网状模型、关系模型、面向对象数据模型、对象关系模型、半结构化数数据模型
物理模型,描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上存储方式和存取方法

2.数据模型的组成要素

(1)数据结构
描述对象和对象之间的联系
(2)数据操作
(3)数据的完整性约束条件

3.常用的数据模型

(1)层次模型

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/77baf6a2ff2e4ec3ba65f3c12f7116f7.jpeg具体例子:
在这里插入图片描述

完整性约束:
插入时,若没有相应双亲结点就不能插入它的子女节点值
删除时,如果删除双亲结点值,则相应的子女节点值也将同时删除

(2)网状模型

在这里插入图片描述具体例子:
在这里插入图片描述

(3)关系模型

在这里插入图片描述
一些术语:
在这里插入图片描述

(4)面向对象数据模型、对象关系数据模型、半结构化数据模型

三、数据库系统的结构

1.数据库系统模式的概念

型: 对一类数据的结构和属性的说明,如(学号,姓名,性别)
值: 型的一个具体赋值,如(12345,李明,男)
模式: 数据库中全体数据的逻辑结构和特征的描述,仅涉及型的描述(相对稳定)
实例: 模式的一个具体值(相对变动)

2.数据库系统的三级结构

(1)模式(逻辑模式): 数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图。
一个数据库只有一个模式,定义模式时,不仅要定义数据的逻辑结构,还要定义数据之间的联系,定义与数据有关的安全性、完整性要求。
(2)外模式(子模式、用户模式): 是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
(3)内模式(存储模式): 是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

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

(1)外模式/模式映像
(2)模式/内模式映像

在这里插入图片描述

第二章 关系数据库

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

1.关系 —— 一张二维表

域: 一组具有相同数据类型的值的集合,类似数学中的值域
笛卡尔积: D1XD2XD3X……Dn
关系: 笛卡尔积的子集,表示为R(D1,D2,…Dn),R表示关系的名字,n是关系的目或度
候选码: 能唯一标识一个元组的属性组
主码: 选定一个候选码作为主码(类似身份证号)
全码: 所有属性都是候选码

基本关系的性质:
(1)列是同质的
每一列中的分量是同一类型的数据,来自同一个域
(2)不同的列可以出自同一个域
(3)列的顺序无所谓
(4)行的顺序无所谓
(5)任意两个元组的候选码不能相同
(6)分量必须取原子值,即每个分量都必须是不可分的数据项

2.关系模式——关系的描述

关系模式可以表示为
R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性见数据的依赖关系集合

3.关系数据库

在一个给定的应用领域中,所有关系的集合构成一个关系数据库
型: 也称为关系数据库模式,是对关系数据库的描述
值: 这些关系模式在某一时刻对应的关系的集合

二、关系操作

1.基本的关系操作

常用:查询、插入、删除、修改
其中,查询可分为选择、投影、连接、除、并、差、交、笛卡尔积
基本操作: 选择、投影、并、差、笛卡尔积

2.关系数据语言分类

(1)关系代数
用对关系的运算来表达查询要求
(2)关系演算
用谓词来表达查询要求
(3)SQL(结构化查询语言)
介于关系代数与关系演算之间,是集查询、数据定义语言、数据操纵语言、数据控制语言于一体的关系数据语言

三、关系的完整性

1.实体完整性

主属性不能取空值

2.参照完整性

外码要么取空值,要么等于被参照关系某个元组的主码值

3.用户定义完整性

针对某一具体关系数据库的 约束条件
如某个属性必须取一值,某个非主属性不能取空值,等等

四、关系代数 !

在这里插入图片描述

1.传统的集合运算

在这里插入图片描述

2.专门的关系运算

(1)选择(限制)

σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma_F(R)=\{t|t\in R \wedge F(t)='真'\} σF(R)={ttRF(t)=}

其中,F表示选择条件,取逻辑值“真”或“假”
F的基本形式为 X 1 θ Y 1 X_1 \theta Y_1 X1θY1 θ \theta θ的取值如下:
在这里插入图片描述

(2)投影

Π S n a m e ⋅ S d e p t ( S t u d e n t ) \Pi_{Sname·Sdept}(Student) ΠSnameSdept(Student)

投影是选择出若干属性列组成新的关系。

(3)连接

R ⋈ A θ B S = { t r t s ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R\underset{A\theta B}{\bowtie}{}S=\{\overset{}{t_rt_s|t_r\in R \wedge t_s\in S\wedge t_r[A]\theta t_s[B]}\} RAθBS={trtstrRtsStr[A]θts[B]}

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

等值连接( θ \theta θ为=)
自然连接
要求两个关系中进行基表的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。

悬浮元组
R中某些元组可能在S中不存在公共属性上值相等的元组,从而被丢失,S也是类似。要想不丢失悬浮元组,则需用外连接
外连接: 保留悬浮元组
左外连接: 只保留左边关系中的悬浮元组
右外连接: 只保留右边关系中的悬浮元组

具体例子如下:
连接的例子:
在这里插入图片描述
几种外连接的例子:

在这里插入图片描述

(4)除运算

R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } \div S=\{t_r[X] |t_r\in R\wedge \Pi_Y(S)\subseteq Y_x\} ÷S={tr[X]trRΠY(S)Yx}

除运算的结果为P(X)
P是R中满足满足以下条件的元组在X属性上的投影:元组在X上分量值x的象集 Y x Y_x Yx包含S在Y上投影的集合。

其实除法运算的本质就是找到R满足S中所有条件的元组

这个运算比较抽象,可以参考大佬的博客:
数据库——关系代数的除法运算最白话解析 by lmo星星呐
也可以参考我自己写的博客:
对数据库关系代数中除法运算的理解 by 云霄星乖乖的果冻

例:
在这里插入图片描述

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

一、SQL基本概念

在这里插入图片描述基本表: 一个关系就对应一个表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也可以存放在存储文件中。
存储文件: 构成关系数据库的内模式,存储文件的物理结构对最终用户是隐蔽的。
视图: 视图是从一个或几个基本表导出的表,本身不独立存储在数据库中。

二、学生-课程数据库

为了后续方便,首先定义一个数据库S-T和几个基本的表:
(1)学生表:Student(Sno,Sname,Ssex,Sage,Sdept) ,主码为Sno
(2)课程表:Course(Cno,Cname,Cpno,Ccredit) ,主码为Cno
(3)学生选课表:SC(Sno,Cno,Grade) ,主码为Sno,Cno

具体表如下图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、具体语言

1.数据定义

在这里插入图片描述

(1)模式

定义:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
若没有指定<模式名>,则隐含为<用户名>
删除:DROP SCHEMA<模式名><CASCADE|RESTRICT>;
CSACADE(级联)表示在删除模式的同时把该模式中所有数据库对象全部删除
RESTRICT(限制)表示如果该模式中已经定义了下属的数据库对象(如表,视图等),则拒绝该删除语句的执行

(2)基本表

数据类型:
在这里插入图片描述在这里插入图片描述

定义:CREATE TABLE <表名> (<列名><数据类型[列级完整性约束条件]>)[<列名><数据类型>[列级完整性约束条件]……[,<表级完整性约束条件>];
删除:DROP TABLE <表名> [CASCADE|RESTRICT];
默认为RESTRICT,删除有限制条件,要删除的表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等;
若为CASCADE,则删除无限制条件,删除表时,相关的对象也将被删除
修改:ALTER TABLE <表名>
\quad \quad \quad [ADD [COLUMN] <新列名><数据类型>[完整性约束]]
\quad \quad \quad [ADD <表级完整性约束>]
\quad \quad \quad [DROP [COLUMN] <列名>[CASCADE|RESTRICT]
\quad \quad \quad [DROP CONSTRAINT <完整性约束名[CASCADE|RESTRICT]
\quad \quad \quad [ALTER [COLUMN] <列名><数据类型>]
表所属模式:
(1)在表中明显地给出模式名 CREATE TABLE "S-T".Student(...)
(2)在创建模式语句中同时创建表
(3)设置所属模式
若用户创建表时没有指定模式,系统根据搜索路径来确定该对象所属的模式。搜索路径包含一组模式列表,关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名。若搜索路径中的模式名都不存在,系统将给出错误。
可以显示搜索路径:SHOW search_path;
也可以设置搜索路径:SET search_path TO "S-T,PUBLIC"
然后定义基本表:CREATE TABLE Student(...);

例:
建立一个学生表:

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,
	Sname CHAR(20) UNIQUE,
	Ssex CHAR(2),
	Sage SMALLINT,
	Sdept CHAR(20) 
	);

建立一个课程表:

CREATE TABLE Course
	(
	Cno CHAR(4) PRIMARY KEY,
	Cname CHAR(4) NOT NULL,
	Cpno CHAR(4),
	Ccredit SMALLINT,
	FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno
	);
(3)索引

建立:CREATE [UNIQUE][CLUSTER] INDEX <索引名>
\quad \quad ON <表名><列名>[<次序>][,<列名>[<次序>]]...
其中,<次序>可选ASC(升序)或DESC(降序)
UNIQUE表名此索引的每一个索引值只对应唯一的数据记录,CLUSTER表示要建立的索引是聚簇索引
修改:ALTER INDEX <旧索引名> RENAME TO <新索引名>;
删除:DROP INDEX <索引名>

2.数据查询

一般格式:
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]...
FROM <表名或视图名> [,<表名或视图名>]|(<SELECT 语句>)[AS]<别名>
[WHERE <条件表达式>
[GROUP BY <列名1> [HAVING <条件表达式>]
[ORDER BY <列名2> [ASC|DESC]];

上述语句的含义是,根据WHERE子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标表达式选出元组中的属性值形成结果表。若有GROUP BY子句,则按<列名1>的值进行分组,若有ORDER子句,则结果表还要按<列名2>的值的升序或降序排序。

(1)单表查询

常用查询条件

查询条件谓词
比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空值IS NULL,IS NOT NULL
多重条件(逻辑运算)AND,OR,NOT

其中,LIKE用法 如下:
[NOT] LIKE <匹配串> [ESCAPE '<换码字符>']
匹配串可以是一个完整的字符串,也可以含有通配符%(任意长度字符串)和_(任意单个字符)

常用聚集函数

函数含义
COUNT(*)统计元组个数
COUNT([DISTINCT|ALL] <列名>)统计某一列中值的个数
SUM([DISTINCT|ALL] <列名>)计算一列值的总和(必须是数值型)
AVG([DISTINCT|ALL] <列名>)计算一列的平均值(必须是数值型)
MAX([DISTINCT|ALL] <列名>)求一列中最大值
MIN([DISTINCT|ALL] <列名>)求一列中最小值
(2)连接查询

1)等值与非等值连接
[<表名1>].<列名><比较运算符>[<表名2.><列名2>]
[<表名1>].<列名>BETWEEN[<表名2.>]<列名2>AND[表名2.]<列名3>

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

2)自身连接
一般会取别名

SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno=SECOND.CNO;

3)外连接
外连接会保留悬浮元组

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON (Student.Sno-SC.Sno);

4)多表连接

SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.SNO AND SC.Cno=Course.Cno
(3)嵌套查询

查询块: 一个SELECT-FROM-WHERE 语句为一个查询块
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询为嵌套查询

上层查询块为外层查询父查询,下层查询块为内层查询子查询
不相关子查询: 子查询的查询条件不依赖于父查询
相关子查询: 子查询的查询条件依赖于父查询

1)带有in的查询

SELECT Sname
FROM Student
WHERE Sno IN
		(SELECT Sno
		FROM SC
		WHERE Cno='2');

2)带有比较运算符的查询

SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept=
		(SELECT Sdept
		FROM Student
		WHERE Sname='刘晨');

3)带有any或all的查询

(<)ANY,>(<)ALL,>=(<=)ANY,>=(<=)ALL,=ANY,=ALL(通常没有实际意义),!=ANY(ALL)

\*查询非计算机系中比计算机系任意一个学生年龄小的学生姓名和年龄*\
SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(SELECT Sage
				FROM Student
				WHERE Sdept='CS')
AND Sdept<>'CS'

4)带有EXISTS谓词的子查询
带有EXISTS的子查询不返回任何数据,只产生逻辑真值"ture"和"false"
若内层查询为空,则外层的WHERE子句返回真值,否则返回假值
有EXISTS引出的子查询,其目标列表达式通常都用*,给出列名无实际意义

例:

SELECT Sname
FROM Student
WHERE EXISTS
		(SELECT *
		FROM SC
		WHERE Sno=Student.Sno AND Cno='1');

有关含EXIST的查询具体可见博客:
数据库含EXISTS的查询

(4)集合查询

并操作(类似OR): UNIOIN(去掉重复元组)/UNION ALL(保留重复元组)
交操作(类似AND) :INTERSECT
差操作(A-B) :EXCEPT
注: 参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同

例:

SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage<19;
(5)基于派生表的查询

子查询可以出现在FROM语句中,此时子查询生成的临时派生表为主查询的查询对象,此时必须为派生表指定一个别名,但是AS可以省略。

例:

SELECT Sname
FROM Student,(SELECT Sno FROM SC WHERE Cno='1') [AS] SC1
WHERE Student.Sno=SC1.Sno;

3.数据更新

(1)插入数据

可以插入一个元组,也可以插入子查询结果

1)插入元组:
INSERT
INTO <表名> [<属性列1>[,<属性列2>...]]
VALUES(<常量1>[,<常量2>]...);

注:
(1)没有出现的属性列,新元组将取空值
(2)若没有指定任何属性名,则新插入的元组必须在每个属性列上均有值,且次序应与CREATE TABLE中的次序相同

2)插入子查询结果
INSERT
INTO <表名> [<属性列1>[,<属性列2>...]]
子查询;

例:

CREATE TABLE Dept_age
		(Sdept CHAR(15)
		Avg_age SMALLINT);

INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
(2)修改数据

UODATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];

若没有WHERE条件,则对所有的元组作修改

(3)删除数据

DELETE
FROM <表名>
[WHERE <条件>]

若省略WHERE条件,表名删除表中全部元组,但表的定义仍在字典中

4.对空值的处理

(1)空值的判断

IS NULL 或 IS NOT NULL

(2)空值的约束条件
不能取空值:
1)属性定义中有NOT NULL约束条件的
2)加了UNIQUE限制的属性
3)码属性

(3)空值的算术运算、比较运算和逻辑运算

记忆方法: U为unknow,即可能为Y,也可能为F,将其带入算式,若结果不能确定,则为U

在这里插入图片描述

四、视图

试图是从一个或几个基本表导出的表,是一个虚表,数据库中只存放视图的定义,而不存放试图对应的数据

1.定义视图

CREATE VIEW <视图名> [(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION];

WITH CHECK OPTION 表示对试图进行UPDATE,INSERT,DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件,即子查询中的条件表达式。

注:
组成视图的属性列名或者全部省略或者全部指定,若省属性名,则该视图由子查询中SELECT子句目标列中的诸字段组成

以下情况必须明确指定组成视图的所有列名:
1.某个目标列不是单纯的属性名,而是聚集函数或列表达式
2.多表连接时选出了几个同名列作为使徒的字段
3.需要在视图中为某个列启用新的更合适的名字

行列子集视图: 由单个表导出,且只是去掉了某些行和列,主码仍保留,这样的视图为行列子集视图

CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;

CREATE VIEW IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Sdept='IS' AND
		 Student.Sno=SC.Sno AND
		 SC.Cno='1';

CREATE VIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROM IS_S1
WHERE Grade>=90;

定义一个带 虚拟列(表达式) 的视图:

CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2014-Sage
FROM Student;

定义一个 分组视图 :(带有GROUP BY)

CREATE BIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

2.删除视图

DROP VIEW <视图名> [CASCADE]

3.查询视图

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

SELECT Sno,Sage
FROM IS_Student
WHERE Sage<=20;

4.更新视图

通过视图来插入、删除和修改
对视图的更新最终要转换为对基本表的更新

UPDATE IS_Student
SET Sname='A'
WHERE Sno='1';

上述语句将被转化为:

UPDATE Student
SET Sname='A'
WHERE Sno='1' AND Sdept='IS' /*建立视图时的条件为Sdet='IS'*/

各个系统对视图的更新的规定不尽相同。
DB2规定视图不允许更新的情况:
(1)视图是由两个以上基本表导出的
(2)视图的字段来自字段表达式或常数,则不允许执行INSERT和UPDATE,但可以执行DELETE操作
(3)视图的字段来自聚集函数
(4)视图定义中·含GROUP BY子句
(5)视图定义中含DISTINCT短语
(6)视图定义中有嵌套查询,且内层查询的FROM子句涉及的表也是导出该图的基本表
(7)一个不允许更新的视图上定义的视图也不允许更新

5.视图的作用

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

第四章 数据库安全性

一、用户身份识别

1.静态口令鉴别
——密码
2.动态口令鉴别
如短信密码,动态令牌
3.生物特征鉴别
如指纹,虹膜,掌纹
4.智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。
智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份认证。
实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。

二、存取控制

存取控制主要包括定义用户权限合法权限检查

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

1.自主存取控制方法

主要由GRANT和REVOKE语句来实现

下表为关系数据库系统中的存取权限:
在这里插入图片描述
(1)授权——GRANT
GRANT <权限> [,<权限>]...
ON <对象类型> <对象名> [,<对象类型> <对象名>]
TO <用户>[,<用户>...]
[WITH GRANT OPTION];

注: 允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户,但不允许循环授权

(2)收回——REVOKE
REVOKE <权限> [,<权限>]
ON <对象类型> <对象名>[,<对象类型> <对象名>]...
FROM <用户>[,<用户>]...[CASCADE|RESTRICT];

注: 若用CASCADE,则收回A权限的同时,也将收回A赋予其他用户的该权限

(3)创建数据库模式的权限
对创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT]
注: 默认为CONNECT

1)CONNECT
只能登陆数据库,不能创建新用户,不能创建模式,也不能创建基本表
由数据库管理员或其他用户授予权限
2)RESOURCE
能创建基本表和视图,成为所创建对象的属主(可以授权其他用户),但不能创建模式,不能创建新的用户
3)DBA
超级用户,可以创建新用户,创建模式,创建基本表和视图等
拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户
在这里插入图片描述
(4)数据库角色

角色是权限的集合
如老板就有所有权限,员工有部分权限,用户权限则更少

1)创建角色
CREATE ROLE <角色名>

2)给角色授权
GRANT <权限> [,<权限>]
ON <对象类型> 对象名
TO <角色> [,<角色>]...

3)将一个角色授予其他的角色或用户
GRANT <角色1> [,<角色2>]...
TO <角色3> [,<用户1>]...
WITH ADMIN OPTION

一个角色拥有的权限就是授予它的角色所包含的权限的总和

4)角色权限的收回
REVOKE <权限> [,<权限>]...
ON <对象类型> <对象名>
FROM <角色> [,<角色>]...

2.强制存取控制方法

主体: 系统中的活动实体,包括数据库管理系统所管理的实际用户,也包括代表用户的各进程
客体: 系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等
敏感度标记: 绝密(TS)>= 机密(S)>= 可信(C)>= 公开(P)
主体的敏感度标记称为许可证级别
客体的敏感度标记称为密级

规则:
1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能地区相应的客体
2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应客体

三、视图机制

可以用视图把要保密的数据对无权存取的用户隐藏起来,而自动对数据提供一定程度的安全保护

四、审计audit

审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等

1.审计事件

1)服务器事件
包含数据库服务器的启动、停止、数据库服务器配置文件的重新加载
2)系统权限
对系统拥有的结构模式或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的。
3)语句事件
DDL,DML,DQL,DCL
4)模式对象事件
对特定模式对象上进行的SELECT或DML操作的审计。
模式对象包括表、视图、存储过程、函数等。
模式对象不包括依附于表的索引、约束、触发器、分区表等。

2.审计功能

1)基本功能
基本的,可选的,有限的,等等
2)提供多套审计规则
审计规则一般在数据库初始化设定,以方便审计员管理
3)提供审计分析和报表功能
4)审计日志管理功能
包括为防止审计员误删审计记录,审计日志必须先转储后删除;
对转储的审计记录文件提供完整性和保密性保护
只允许审计员查阅和转储审计记录
不允许任何用户新增和修改审计记录
……

3.AUDIT和NOAUDIT

AUDIT:设置审计功能
NOAUDIT:取消审计功能

五、数据加密

(1)存储加密
1) 透明存储加密(数据在写到磁盘时对数据及数据进行加密,授权用户读取数据时再对其进行解密)
2)非透明存储加密
(2)传输加密
1)链路加密
再链路层加密
对报文和报头均加密
2)端到端加密
在发送端加密,接收端解密,中间节点不需密码设备
只加密报文,不加密报头

在这里插入图片描述

六、其它安全性保护

1.推理控制
避免用户利用其能访问的数据推知更高密级的数据
2.隐蔽密道
3.数据隐私保护

第五章 数据库完整性

一、实体完整性——PRIMARY KEY

1.定义

(1)列级约束条件

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,
	...
	);

** (2)表级约束条件**

CREATE TABLE Student
	(Sno CHAR(9),
	...
	PRIMARY KEY(Sno)
	);

2.检查与违约处理

检查:
(1)主码是否唯一,若不唯一则拒绝插入或修改
(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

二、参照完整性——FOREIGN KEY

1.定义

CREATE TABLE SC
	(Sno CHAR(9) NOT NULL,
	Cno CHAR(9) NOT NULL,
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY(Sno) REFERENCES Student(Sno),
	FOREIGN KEY(Cno) REFERENCES Student(Cno)
	);

2.检查和违约处理

在这里插入图片描述
例:

CREATE TABLE SC
	(Sno CHAR(9),
	Cno CHAR(4),
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY(Sno) REFERENCES Student(Sno)
		ON DELETE CASCADE
		/*删除Student表中的元组时,级联删除SC表中相应的元组*/
		ON UPDATE CASCADE,
	FOREIGN KEY(Cno) REFERENCES Student(Cno)
		ON DELETE NO ACTION
		ON UPDATE CASCADE
	);

三、用户定义完整性

1.属性上的约束条件

(1)定义

列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个条件表达式(CHECK短语)

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,
	Sname CHAR(8) NOT NULL,
	Ssex CHAR(2) CHECK(Ssex IN('男','女')),
	Sage SMALLINT,
	Sdept CHAR(20)
	);

(2)违约处理
不满足则拒绝执行

2、元组上的约束条件

元组级的限制可以设置不同属性之间取值的相互约束条件

(1)定义

CREATE TABLE Student
	(Sno CHAR(9),
	Sname CHAR(9) NOT NULL,
	Ssec CHAR(2)PRIMARY KEY(Sno),
	CHECK(Ssex='女' OR Sname NOT LIKE 'Ms.%')
	/*性别为男时,名字不能以Ms.开头*/
	);

(2)检查与违约处理
不满足则拒绝执行

四、完整性约束命名子句

1.定义
CONSTRAINT <完整性约束名> <完整性约束条件>
2.修改

ALter TABLE Student
	DROP CONSTRAINT C1;
Alter TABLE Student
	ADD CONSTRAINT C1 CHECK(Sno BETWEEN 900000 AND 999999);

五、断言

可以定义涉及多个表或聚集操作的比较复杂的完整性约束。

断言创建后,任何对断言中所涉及关系的操作都会除法关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行

(1)创建
CREATE ASSERTION <断言名> <check子句>
(2)删除
DROP ASSERTION <断言名>

六、触发器(事件-条件-动作)

1.定义

CREATE TRIGGER <触发器名>
{BEFORE|AFTER} 触发事件 ON <表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH{ROW|STATEMENT}
[WHEN <触发条件>] <触发动作体>

注:
(1)只有表的拥有者才可以在表上创建触发器,且触发器数量有限

(2)触发器名可以包含模式名,也可以不包含模式名。同一模式下,触发器名必须是唯一的,且触发器名和表名必须在同一模式下

(3)触发器只能定义在基本表上,不能定义在视图上。该表也称为触发器的目标表

(4)触发事件
触发事件可以是INSERT,DELETE,UPDATE,也可以是它们的组合,如INSERT OR DELETE。
还可以是UPDATE OF<触发列,……>

(5)触发器类型
行级触发器:FOR EACH ROW
根据修改的行数,可能执行多次
语句级触发器:FOR EACH STATMENT
只执行一次

(6)触发动作体
触发动作提既可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用。
如果是行级触发器,用户可以在过程体中使用NEW和OLD引用UPDATE/INSERT事件之后的新值和之前的旧值。
如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用

例:

/*对表SC的Grade属性进行修改时,若分数增加了10%,则将此次操作记录到另一个表SC_U中*/
CREATE TRIGGER SC_T
AFTER UPDATE OF Grade ON SC
REFERENCING
	OLD ROW AS OldTuple
	NEW ROW AS NewTuple
FOR EACH ROW
WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)
	INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade)
	VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade) 

/*将每次对表Student的插入操作所增加的学生个数记录到表Student-InsertLog中*/
CREATE TRIGGER Student_Count
AFTER INSERT ON Student
REFERENCING
	NEW TABLE AS DELTA
FOR EACH STATEMENT
	INSERT INTO StudentInsertLog(Numbers)
	SELECT COUNT(*) FROM DELTA

/*教授的工资不得低于4000元,如果低于4000元,自动改为4000元*/
CREATE TRIGGER Insert_Or_Update_Sal
BEFORE INSERT OR UPDATE ON Teacher
REFERENCING NEW row AS newtuple
FOR EACH ROW
BEGIN
	IF(newtuple.Job='教授')AND(newtuple.Sal<4000)
		THEN newtuple.Sal=4000;
	END IF;
END;

2.激活触发器

一个数据表上可能定义了多个触发器
同一个表上的多个触发器激活时,遵循如下执行顺序:
(1)执行该表上的BEFORE触发器
(2)激活触发器的SQL语句
(3)执行该表上的AFTER触发器

3.删除触发器

DROP TRIGGER <触发器名> ON <表名>

第六章 关系数据理论

规范化

1.基本概念

(1)函数依赖

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

非平凡的函数依赖: X → Y X\rightarrow Y XY,但 Y ⫋ X Y\subsetneqq X YX
平凡的函数依赖: X → Y X\rightarrow Y XY,但 Y ⊆ X Y\subseteq X YX
(对于任一关系模式,平凡依赖都是必然成立的)

决定因素: X → Y X\rightarrow Y XY
X ↔ Y X\leftrightarrow Y XY X → Y 且 Y → X X\rightarrow Y 且 Y\rightarrow X XYYX
X ↛ Y X\nrightarrow Y XY Y不函数依赖于X

完全函数依赖 X → F Y X\xrightarrow{F}Y XF Y 在R(U)中,如果 X → Y X\rightarrow Y XY ,并且对于X的任何一个真子集 X ′ X^{'} X,都有 X ′ ↛ Y X^{'}\nrightarrow Y XY ,则称Y对X完全函数依赖
部分函数依赖 X → P Y X\xrightarrow{P}Y XP Y 不是完全函数依赖
传递函数依赖 X → 传递 Z X\xrightarrow{传递}Z X传递 Z
在R(U)中, X → Y ( Y ⫋ X ) , Y ↛ X , Y → Z , Z ⫋ Y X\rightarrow Y(Y\subsetneqq X),Y\nrightarrow X,Y\rightarrow Z,Z\subsetneqq Y XY(YX),YX,YZ,ZY

(2)码

候选码: K为R<U,F>中的属性或属性组合,若 K → F U K\xrightarrow{F}U KF U,则K为R的候选码
超码: K → P U K\xrightarrow{P}U KP U
(候选码是最小的超码)
主码: 选定候选码中的一个作为主码
全码: 整个属性组是码
外码: 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码。则称X为R的外部码,也称外码

主属性: 包含在任何一个候选码中的属性为主属性
非主属性: 不包含在任何候选码中的属性为非主属性,或非码属性

(3)范式

关系数据库中的关系应满足一定要求,满足不同程度要求的为不同范式。

各范式之间的关系有:
5 N F ⊂ 4 N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF\subset 4NF\subset 3NF\subset 2NF\subset 1NF 5NF4NF3NF2NF1NF

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

2.函数依赖

(1)1NF

每个分量必须是不可分的数据项

(2)2NF——无部份依赖

R ∈ 1 N F R\in 1NF R1NF,且每一个非主属性完全函数依赖于任何一个候选码,则 R ∈ 2 N F R\in 2NF R2NF

(3)3NF——无传递依赖

设关系模式 R < U , F > ∈ 1 N F R<U,F>\in 1NF R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性 Z ( Z ⫌ Y ) Z(Z\supsetneqq Y) Z(ZY) 使得 X → Y , Y → Z X\rightarrow Y,Y\rightarrow Z XY,YZ成立, Y ↛ X Y\nrightarrow X YX,则称 R < U , F > ∈ 3 N F R<U,F>\in 3NF R<U,F>∈3NF

(4)BCNF

关系模式 R < U , F > ∈ 1 N F R<U,F>\in 1NF R<U,F>∈1NF,若 X → Y 且 Y ⫋ X X\rightarrow Y且Y\subsetneqq X XYYX时,X必含有码,则 R < U , F > ∈ B C N F R<U,F>\in BCNF R<U,F>∈BCNF

即每个决定因素都包含码

3.多值依赖MVD

设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。
关系模式R(U)中多值依赖 X → → Y X\rightarrow \rightarrow Y X→→Y成立,当且仅当对R(U)的任意关系r,给定的一堆(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关

例:
在这里插入图片描述
上述例子中,教师T仅仅取决于科目C,而与参考书无关。
所以T多值依赖于C,即 C → → T C\rightarrow \rightarrow T C→→T

平凡的多值依赖:
X → → Y X\rightarrow \rightarrow Y X→→Y,而Z= ∅ \varnothing ,即Z为空,则称 X → → Y X\rightarrow \rightarrow Y X→→Y为平凡的多值依赖

多值依赖的性质:
(1)对称性
X → → Y X \rightarrow \rightarrow Y X→→Y,则 X → → Z X\rightarrow \rightarrow Z X→→Z,其中Z=U-X-Y
(2)传递性
X → → Y , Y → → Z X\rightarrow \rightarrow Y,Y\rightarrow \rightarrow Z X→→Y,Y→→Z,则 X → → Z − Y X\rightarrow \rightarrow Z-Y X→→ZY
(3)函数依赖可以看作是多值依赖的特殊情况,即若 X → Y X\rightarrow Y XY,则 X → → Y X\rightarrow \rightarrow Y X→→Y
(4)若 X → → Y , X → → Z X \rightarrow \rightarrow Y, X\rightarrow \rightarrow Z X→→YX→→Z,则 X → → Y Z X\rightarrow \rightarrow YZ X→→YZ
(5)若 X → → Y , X → → Z X \rightarrow \rightarrow Y, X\rightarrow \rightarrow Z X→→YX→→Z,则 X → → Y ∩ Z X\rightarrow \rightarrow Y\cap Z X→→YZ
(6)若 X → → Y , X → → Z X \rightarrow \rightarrow Y, X\rightarrow \rightarrow Z X→→YX→→Z,则 X → → Y − Z , X → → Z − Y X\rightarrow \rightarrow Y-Z,X\rightarrow \rightarrow Z-Y X→→YZX→→ZY

多值依赖与函数依赖的区别:
(1)多值依赖的有效性与属性集的范围有关
(2)若函数依赖 X → Y X\rightarrow Y XY在R(U)上成立,则对于任何 Y ′ ⊂ Y Y^{'}\subset Y YY 均有 X → Y ′ X\rightarrow Y^{'} XY成立。
而多值依赖 X → → Y X\rightarrow \rightarrow Y X→→Y若在R(U)上成立,却不能断言对于任何 Y ⊂ Y ′ Y\subset Y^{'} YY X → → Y ′ X\rightarrow \rightarrow Y^{'} X→→Y成立

4. 4NF——消除非平凡且非函数依赖的多值依赖

关系模式 R < U , F > ∈ 1 N F R<U,F>\in 1NF R<U,F>∈1NF,如果对于R的每个非平凡多值依赖 X → → Y ( Y ⫋ X ) X\rightarrow \rightarrow Y(Y\subsetneqq X) X→→Y(YX),X都含有码,则称 R < U , F > ∈ 4 N F R<U,F>\in 4NF R<U,F>∈4NF

第七章 数据库设计

一、数据库设计概述

1.数据库设计的特点

基本规律:“三分技术,七分管理,十二分基础数据”

管理:
(1)数据库本身的管理
(2)企业的业务管理
基础数据:
数据的收集、整理、组织和不断更新是数据库建设中的重要环节

结构设计和行为设计相结合

2.数据库设计方法

基于E-R模型的设计方法
3NF的设计方法
面向对象的设计方法
统一建模语言(UML)方法

3.数据库设计的基本步骤

在这里插入图片描述

4.数据库设计过程中的各级模式

在这里插入图片描述

二、需求分析

调查要处理的对象,了解原系统,明确用户需求。
调查的重点是”数据“和”处理“,获得用户对数据库的如下需求:
(1)信息要求——数据库中要存储哪些数据
(2)处理要求
(3)完整性和安全性要求

结构化分析方法(SA方法):
从上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统

数据字典: 数据收集和分析获得的主要成果

在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善
数据字典的内容:
(1)数据项
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
(2)数据结构
{数据结构名,含义说明,组成:{数据项或数据结构}}
(3)数据流——数据结构在系统中传输的路径
{数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
平均流量是在单位时间(每天,每周,每月等)里的传输次数
(4)数据存储
是数据结构停留或保存的地方,也是数据流的来源和去向之一。
{数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
存取频度:单位时间里存取次数和每次存取的数据量等信息
存取方式:批处理/联机处理,检索/更新,顺序检索/随机检索
(5)处理过程
一般用判定表和判定树来描述
{处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
简要说明:该处理过程的功能及处理要求。功能是指该处理过程用来做什么,处理要求指处理频度要求。

三、概念结构设计

1.E-R模型

E-R图提供了表示实体型、属性和联系的方法
(1)实体型:用矩形表示
(2)属性:椭圆
(3)联系:菱形

2.实体与属性的划分原则

能作为属性对待的尽量作为属性
可以作为属性:
(1)属性不能再有需要描述的性质,即是不可分的数据项
(2)属性不能与其他实体具有联系

3.E-R图的集成

各子系统的E-R图之间的冲突:
属性冲突,命名冲突,结构冲突
(1)属性冲突
1)属性域冲突,即属性值的类型、取值范围或取值集合不同,如整数与字符型
2)属性取值单位冲突,如公斤和斤
(2)命名冲突
同名异义、异名同义
(3)结构冲突

消除不必要的冗余:
冗余的数据:指可由基本数据导出的数据
冗余的联系:可由其他联系导出的联系

!注: 不是所有的冗余数据和冗余联系都必须消除

四、逻辑结构设计

1.E-R 图转换为关系模型

实体的属性 → \rightarrow 关系的属性
实体的码 → \rightarrow 关系的码
实体间联系:
(1)1:1联系,转换为一个独立的关系模式,或与任意一端对应的关系模式合并
(2)1:n联系,转换为一个独立的关系模式,或与n端对应的关系模式合并
(3)m:n联系,转换为一个关系模式
(4)三个或三个以上实体间的一个多元联系可以转换为一个关系模式
(5)具有相同码的关系模式可合并

2.数据模型的优化

参考资料

1.《数据库系统概论》王珊 萨师煊
2. 数据库——关系代数的除法运算最白话解析 by lmo星星呐

  • 41
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄星乖乖的果冻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值