第01章 绪论
- DBS包括DB和DBMS:
DBS(DataBase System):数据库系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
DB(DataBase):数据库,数据按照一定格式存放在计算机存储设备上。
DBMS(DataBase Management System):数据库管理系统,一个科学组织和存储数据,高效地管理和维护数据的系统软件。 - 数据库数据特点:永久存储、有组织、可共享
- 两类数据模型:①概念模型 ②逻辑模型和物理模型
概念模型:也称信息模型,按照用户的观点来对数据和信息建模,用于数据库设计。
逻辑模型:按计算机系统的观点对数据建模,用于DBMS的实现。主要包括:层次模型、网状模型、关系模型、面向对象模型、对象关系模型等。
物理模型:对数据低层的抽象,描述数据在系统内部的表示方式和存取方法,物理模型的具体实现是DBMS的任务。
- 数据的完整性约束条件:
一组完整性规则的集合。
完整性规则是给定数据模型中数据及其联系所具有的制约和依存规则。
限定数据库状态以及状态的变化,保证数据的正确、有效、相容。
- 信息世界中的基本概念:
实体(Entity):客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。
属性(Attribute):实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
码(Key):唯一标识实体的属性集称为码
域(Domain):属性的取值范围称为该属性的域。
实体型(Entity Type):用实体名及其属性名集合来抽象和刻画同类实体称为实体型
实体集(Entity Set):同一类型实体的集合称为实体集
联系(Relationship):
①现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
②实体内部的联系通常是指组成实体的各属性之间的联系
③实体之间的联系通常是指不同实体集之间的联系
- 非关系模型:层次模型(Hierarchical Model)、网状模型(Network Model)
关系模型(Relational Model) - 层次模型,满足下面两个条件的基本层次联系的集合为层次模型(就是树结构):
①有且只有一个结点没有双亲结点,这个结点称为根结点
②根以外的其它结点有且只有一个双亲结点 - 网状模型,满足下面两个条件的基本层次联系的集合(一对多关系,结构上像有向图):
①允许一个以上的结点无双亲;
②一个结点可以有多于一个的双亲。
- 关系模型是目前最重要的一种数据模型。
- 关系数据库系统是支持关系模型的数据库系统。
- 一些术语:
关系(Relation):一个关系对应通常说的一张表。
元组(Tuple):表中的一行即为一个元组。
属性(Attribute):表中的一列即为一个属性,给每一个属性起一个属性名。
码(Key):也称码键。表中某个属性组,可以唯一确定一个元组。例如学号可以确定唯一一个学生。
域(Domain):属性的取值范围。
分量:元组中的一个属性值。
关系模式:对关系的描述。关系名(属性1,属性2,…,属性n)。例如:
学生(学号,姓名,年龄,性别,系,年级) - 关系必须是规范化的,满足一定的规范条件。
最基本的规范条件:关系的每一个分量必须是一个不可分的数据项,不允许表中还有表
- 型(Type):对某一类数据的结构和属性的说明
值(Value):是型的一个具体赋值 - 模式(Schema):
数据库逻辑结构和特征的描述
是型的描述
反映的是数据的结构及其联系
模式是相对稳定的 - 实例(Instance):
模式的一个具体值
反映数据库某一时刻的状态
同一个模式可以有很多实例
实例随数据库中的数据的更新而变动
- 数据库系统的三级模式结构:模式(Schema)、外模式(External Schema)、内模式(Internal Schema)
- 模式(也称逻辑模式):
①数据库中全体数据的逻辑结构和特征的描述
②所有用户的公共数据视图,综合了所有用户的需求 - 一个数据库只有一个模式
- 模式的地位:是数据库系统模式结构的中间层
①与数据的物理存储细节和硬件环境无关
②与具体的应用程序、开发工具及高级程序设计语言无关
- 外模式(也称子模式或用户模式):
①数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
②数据库用户的数据视图,是与某一应用有关的数据的逻辑表示 - 外模式的用途:①保证数据库安全性的一个有力措施 ②每个用户只能看见和访问所对应的外模式中的数据
- 内模式(也称存储模式):
①是数据物理结构和存储方式的描述
②是数据在数据库内部的表示方式:
a. 记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储)
b. 索引的组织方式
c. 数据是否压缩存储
d. 数据是否加密
e. 数据存储记录结构的规定 - 一个数据库只有一个内模式
第02章 关系数据库
- 域是一组具有相同数据类型的值的集合。
例:整数、实数、介于某个取值范围的整数、长度指定长度的字符串集合、{‘男’,‘女’}
- 笛卡尔积:
- 元组(Tuple):
- 分量(Component):
- 基数(Cardinal number):笛卡尔积可能的元组个数。
- 关系:
- n目关系必有n个属性。
- 三类关系
①基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示
②查询表:查询结果对应的表
③视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
- 关系模式(Relation Schema)是型,关系是值
- 关系模式:是对关系的描述,是静态的、稳定的。
- 关系:关系模式在某一时刻的状态或内容,动态的、随时间不断变化的。
- 一个关系模式应当是一个五元组:
R(U,D,DOM,F)
R:关系名,它是符号化的元组语义
U:一组属性
D:属性组中所来自的域
DOM:属性到域的映射
F:属性组U上的一组数据依赖
其中D和DOM对模式设计关系不大,所以可以当做三元组:R<U,F>
- 常用的关系操作
①查询:选择、投影、连接、除、并、交、差
②数据更新:插入、删除、修改
③查询的表达能力是其中最主要的部分
④选择、投影、并、差、笛卡尔积是5种基本操作 - 关系操作的特点是集合操作方式:操作的对象和结果都是集合,一次一集合的方式
- 实体完整性和参照完整性:关系模型必须满足的完整性约束条件,由系统自动支持
- 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束
- 实体完整性规则(Entity Integrity): 若属性A是基本关系R的主属性,则属性A不能取空值。
- 关系间的引用:在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。
- 外码:设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。
- 基本关系R称为参照关系(Referencing Relation)
- 基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
- 上图选修关系,参照课程关系和学生关系。学号、课程号是选修关系的外码。同时,学号为选修关系的主码。
- 主码,也称主键。外码,也称外键。
- 参照完整性规则:
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:①或者取空值(F的每个属性值均为空值) ②或者等于S中某个元组的主码值
(通俗点说,就是要不就取空值,要不就要取一个存在的值)
- 关系代数运算符:
- 专门的关系运算:选择(行)、投影(列)、连接、除。
第03章 关系数据库标准语言SQL
- 视图是从一个或几个基本表(或视图)导出的表。
- 与基本表不同,视图是一个虚表。数据库中只存放视图的定义,不存放视图对应的数据,数据仍然存放在原来的基本表中。
- 可通过更新视图操作,来对实际的基本表进行插入、删除和修改。
- 基本表
本身独立存在的表
SQL中一个关系就对应一个基本表
一个(或多个)基本表对应一个存储文件
一个表可以带若干索引 - 存储文件
逻辑结构组成了关系数据库的内模式
物理结构是任意的,对用户透明 - 视图
从一个或几个基本表导出的表
数据库中只存放视图的定义而不存放视图对应的数据
视图是一个虚表
用户可以在视图上再定义视图
- SQL的数据定义功能: 模式定义、表定义、视图和索引的定义。
- 定义模式实际上定义了一个命名空间。在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
- 在使用MS SQL的时候,一般创建数据库我们都习惯于使用CREATE DATABASE 来完成,而使用CREATE SCHEMA来创建架构。
- 在MySQL的语法操作中(MySQL5.0.2之后),可以使用CREATE DATABASE和CREATE SCHEMA来创建数据库,两者在功能上是一致的。
- 建立基本表:
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。 - 修改基本表:
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ]; - 删除基本表:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。欲删除的基本表不能被其他表的约束所引用;如果存在依赖该表的对象,则此表不能被删除。
CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除 - 数据查询:
SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
- 常用查询条件:
- ORDER BY子句:可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示 - 聚集函数:
①计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
②计算总和
SUM([DISTINCT|ALL] <列名>)
③计算平均值
AVG([DISTINCT|ALL] <列名>)
④最大最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
- 连接查询:同时涉及多个表的查询
- 自身连接:一个表与其自己进行连接,需要给表起别名以示区别。由于所有属性名都是同名属性,因此必须使用别名前缀。
- 不相关子查询:子查询的查询条件不依赖于父查询,一般可以处理为连接。
- 相关子查询:子查询的查询条件依赖于父查询。
- 建立视图:
CREATE VIEW
<视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
第04章 数据库安全性
- 三类计算机系统安全性问题:技术安全类、管理安全类、政策法律类。
- 安全标准:TCSEC标准、CC标准。
- 计算机系统中,安全措施是一级一级层层设置:
- 数据库安全性控制的常用方法:用户标识和鉴定(帐号密码)、存取控制(用户访问权限)、视图、审计、密码存储。
- 存取控制机制组成:定义用户权限、合法权限检查
- 常用存取控制方法:
①自主存取控制(Discretionary Access Control ,简称DAC)
C2级
灵活
②强制存取控制(Mandatory Access Control,简称MAC)
B1级
严格 - 自主存取控制方法:通过SQL 的GRANT 语句和 REVOKE 语句实现
- GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION]; - WITH GRANT OPTION子句:
指定:可以再授予(就授权给这个用户,它可以再去授权给别的用户)
没有指定:不能传播 - 例:
①把查询Student表权限授给用户U1:
GRANT SELECT
ON TABLE Student
TO U1;
②把对Student表和Course表的全部权限授予用户U2和U3:
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3; - REVOKE:授予的权限可以由DBA或其他授权者用REVOKE语句收回
- REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
- 数据库角色:被命名的一组与数据库操作相关的权限。角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,简化授权的过程。
- 创建角色:CREATE ROLE <角色名>
- 例子:
①首先创建一个角色R1
CREATE ROLE R1;
②然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
③角色给具体用户
GRANT R1
TO 王平,张明,赵玲;
- 强制存取控制(MAC):保证更高程度的安全性、用户能不能直接感知或进行控制、适用于对数据有严格而固定密级分类的部门
- 主体是系统中的活动实体:DBMS所管理的实际用户,代表用户的各进程
客体是系统中的被动实体,是受主体操纵的:文件、基表、索引、视图 - 主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level) - 强制存取控制规则:
①仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
②仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体 - DAC + MAC安全检查示意图:
- 什么是审计?
审计日志(Audit Log):将用户对数据库的所有操作记录在上面
DBA利用审计日志:找出非法存取数据的人、时间和内容
C2以上安全级别的DBMS必须具有 - 审计分为:用户级审计、系统级审计
①用户级审计
针对自己创建的数据库表或视图进行审计
记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作
②系统级审计
DBA设置
监测成功或失败的登录要求
监测GRANT和REVOKE操作以及其他数据库级权限下的操作
- 统计数据库:①允许用户查询聚集类型的信息(如合计、平均值等)②不允许查询单个记录信息
- 统计数据库查询规则:
规则1:任何查询至少要涉及N(N足够大)个以上的记录
规则2:任意两个查询的相交数据项不能超过M个
规则3:任一用户的查询次数不能超过1+(N-2)/M
第05章 数据库完整性
- 数据库的完整性:数据的正确性和相容性
- 实体完整性定义:CREATE TABLE中用PRIMARY KEY定义
- 插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:
①检查主码值是否唯一,如果不唯一则拒绝插入或修改
②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改 - 系统会自动为主码建立一个主索引,方便检索,索引一般是B+树。
- 参照完整性定义:在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
- 可能破坏参照完整性的情况及违约处理:
- 参照完整性违约处理:
①拒绝(NO ACTION)执行:默认策略
②级联(CASCADE)操作:删除一个元组,其他相关的会级联删除
③设置为空值(SET-NULL):对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值
- 用户定义完整性,在属性上的定义:CREATE TABLE时定义
①列值非空(NOT NULL):
Sno CHAR(9) NOT NULL
②列值唯一(UNIQUE):
Dname CHAR(9) UNIQUE
③检查列值是否满足一个布尔表达式(CHECK):
Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’) ) - 在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制。
- 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。
- 例如:
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
/*定义了元组中Sname和Ssex两个属性值之间的约束条件*/
);
性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;
当性别是男性时,要通过检查则名字一定不能以Ms.打头
- 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程:
由服务器自动激活
可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力 - 定义触发器:
CREATE TRIGGER <触发器名>
{BEFORE | AFTER} <触发事件> ON <表名>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件>]
<触发动作体> - 定义触发器的语法说明:
①创建者:表的拥有者
②触发器名
③表名:触发器的目标表
④触发事件:INSERT、DELETE、UPDATE
⑤触发器类型:行级触发器(FOR EACH ROW)、语句级触发器(FOR EACH STATEMENT)
⑥触发条件:触发条件为真 or 省略WHEN触发条件
⑦触发动作体:触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用 - 可以在一张表上定义触发器(可以多个),对这张表或其他表进行操作。但对其他表的操作可能会造成其他的触发器被触发,注意别造成死循环,一般也别定义得太复杂。
第06章 关系数据理论
- 完整性约束的表现形式
限定属性取值范围:例如学生成绩必须在0-100之间
定义属性值间的相互关连(主要体现于值的相等与否),这就是数据依赖,它是数据库模式设计的关键 - 数据依赖的类型:函数依赖(Functional Dependency,简记为FD)、多值依赖(Multivalued Dependency,简记为MVD)、其他
- 函数依赖:若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y(通俗点说,就是X这个属性,决定了唯一一个Y,但反过来不一定)。所有关系实例均要满足,是一种自然属性。
- 若X→Y,Y→X,则记作X←→Y。
- 如果X→Y,但Y 不是 X的子集,则称X→Y是非平凡的函数依赖(一般情况下讨论的都是这种)
若X→Y,但Y ⊆ X, 则称X→Y是平凡的函数依赖 - 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ →Y, 则称Y对X完全函数依赖。
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。 - 传递函数依赖:
- 例如:
在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname
Mname传递函数依赖于Sno
- 范式的种类:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
第四范式(4NF)
第五范式(5NF) - 各种范式之间存在联系(从小到大的包含关系):
- 1NF的定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
- 2NF:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
- 3NF:若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
- BCNF:若R∈BCNF:
所有非主属性对每一个码都是完全函数依赖
所有的主属性对每一个不包含它的码,也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性
- 把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的。只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。
- 三种模式分解等价的定义:
⒈ 分解具有无损连接性
⒉ 分解要保持函数依赖
⒊ 分解既要保持函数依赖,又要具有无损连接性
第07章 数据库设计
- 结构(数据)设计和行为(处理)设计相结合
- 结构和行为分离的设计
- 数据库设计分6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
①需求分析:准确了解与分析用户需求(包括数据与处理);这是最困难、最耗费时间的一步。
②概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。这是整个数据库设计的关键。
③逻辑结构设计:将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化
④物理结构设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
⑤数据库实施:运用DBMS提供的数据库语言(如SQL)及宿主语言,根据逻辑设计和物理设计的结果:a. 建立数据库;b. 编制与调试应用程序;c. 组织数据入库;d. 进行试运行
⑥数据库运行和维护阶段:数据库应用系统经过试运行后即可投入正式运行;在数据库系统运行过程中必须不断地对其进行评价、调整与修改。 - 需求分析和概念设计独立于任何数据库管理系统
- 逻辑设计和物理设计与选用的DBMS密切相关
- 结构化分析方法(Structured Analysis,简称SA方法):从最上层的系统组织机构入手;自顶向下、逐层分解分析系统。
- 首先把任何一个系统都抽象为:
- 分解处理功能和数据
②分解处理功能:将处理功能的具体内容分解为若干子功能
②分解数据:处理功能逐步分解同时,逐级分解所用数据,形成若干层次的数据流图
③表达方法
处理逻辑:用判定表或判定树来描述
数据:用数据字典来描述 - 将分析结果再次提交给用户,征得用户的认可
第8章 数据库编程
- SQL语言提供了两种不同的使用方式:交互式、嵌入式(不是我们电子那个嵌入式,意思是嵌入到其他高级语言)
- 为什么要引入嵌入式SQL:SQL语言是非过程性语言、事务处理应用需要高级语言
- 嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C、C++、Java,称为宿主语言,简称主语言。
- 游标:解决集合性操作语言与过程性操作语言的不匹配
第9章 关系查询处理和查询优化
- 查询处理的四个阶段:查询分析、查询检查、查询优化、查询执行
- 查询优化
代数优化:指关系代数表达式的优化
物理优化:指存取路径和底层操作算法的选择 - 集中式数据库的执行开销:
①磁盘存取块数(I/O代价,最主要的)
②处理机时间(CPU代价)
③查询的内存开销 - 分布式数据库:
总代价=I/O代价+CPU代价+内存代价+通信代价
- 选择运算尽可能先做(优化策略中最重要、最基本的一条)。
- 把投影运算和选择运算同时进行。
- 把投影同其前或其后的双目运算结合起来。
第10章 数据库恢复技术
- 事务定义:
①一个数据库操作序列
②一个不可分割的工作单位
③恢复和并发控制的基本单位 - 事务和程序:
①在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。
②一个程序通常包含多个事务。 - 当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务
- 事务的四个特性:原子性、一致性、隔离性、持续性
- 各类故障,对数据库的影响有两种可能性:
①是数据库本身被破坏
②是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。 - 恢复机制:数据转储(backup)、登陆日志文件(logging)
第11章 并发控制
- 事务并发执行带来的问题:
①会产生多个事务同时存取同一数据的情况
②可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性 - 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 - 基本封锁类型
排它锁(Exclusive Locks,简记为X锁)(可读可写)
共享锁(Share Locks,简记为S锁)(读)