数据库系统概论(二):关系数据库
本笔记参考书籍《数据库系统概论(第五版)》王珊 萨师煊 编著
1. 总体内容梳理
- 关系模型的基本概念(原书第2章)
- 关系数据库标准语言SQL的语句和数据库安全性(原书第3章)
- 数据库安全(原书第四章)
- 数据库完整性(原书第5章)
2.关系数据库
2.1 数据结构和形式化定义
2.1.1 关系
- 关系的数据结构就是一张二维表
- 从集合论的角度给出关系数据结构的形式化定义
- 域(domain):相同数据类型的值的集合。
- 笛卡尔积(cartesian product):域上的一种集合运算。是一组域中每个域各选取一个元素组成的域。相关概念有元组、n元组、分量。
- 关系(relation):D1×D2×D3×…×Dn的子集叫做在域D1、D2、…、Dn的关系。表示为R(D1,D2,D3,…,Dn),其中R为关系名称,n是关系的度或目
- n=1:单元关系/一元关系
- n=2:二元关系
- 候选码(candidate key):可唯一表示一个元组的属性组而其子集不能,该属性组称为候选码。
- 主码(primary key):候选码其中选择一个
- 主属性(prime attribute)与非主属性(non-prime attribute):在候选码出现的属性都成为主属性,未出现则为非主属性(非码属性)。
- 全码(all-key):关系模型的所有属性是这个关系的候选码
2.1.2 关系模式
- 关系与关系模式的区别
- 关系模式是型,关系是值。关系模式是对关系的描述。
- 关系是关系模式再某一时刻的状态或内容
- 关系模式是静态的、稳定的;关系是动态的、随时间不断变化的。
- 关系模式的定义
定义1:关系模式是关系的描述,它可以形象的表示为R(U,D,DOM,F)。其中:
R:关系名
U:属性名集合
DOM:属性向域的映射集合
F:属性间数据的依赖关系集合
依赖关系集合再数据库的规范化中会提到
2.2 关系操作
- 关系操作主要有 查询操作 和 增删改 两部分
- 查询操作(其中加粗为5大基本操作)
- 选择
- 投影
- 连接
- 除
- 并
- 差
- 交
- 笛卡尔积
- 结构化查询语言(Structured Query Language,SQL):集查询、数据定义语言、数据操纵语言和数据控制语言(Data Control Language,DCL)于一体的关系数据语言
2.3 关系的完整性
-
关系的完整性主要有三类:实体完整性(entity integrity)、参照完整性(referential integrity)和用户定义完整性(user-defined integrity)
- 实体完整性:主属性不能取空值(null value)
- 用户自定义完整性:用户所需求的约束
- 参照完整性:关系与关系之间存在着相互引用、相互约束的情况
F是基本关系R的一个或一组属性,但不是关系R的码
K是基本关系S的主码
如果F与K相对应,则称F是R的外码,
并称基本关系R为参照关系,基本关系S为被参照关系
R和S不一定是不同的关系(即可以是同一关系)
参照性约束要求:
F或者取空值,或等于S中的某个主码值
2.4 关系代数
- 关系代数的运算分类
- 传统的集合运算:并、差、交、笛卡尔积
- 专门的关系运算:选择、投影、连接、除运算等
2.4.1 传统集合运算:略
2.4.2 专门的运算符
- 选择:如其名,根据某一逻辑条件对每一元组进行筛选。
- 投影:从关系中选择若干个属性列组成新的关系。
- 连接(join):从两个关系的笛卡尔集中选出满足一定条件的元组。
- 等值连接:条件为”=“的连接运算。
- 自然连接:一种特殊的等值连接,他要求两个关系中进行比较的分量必须是同名的属性住,并且在结果种把重复的属性列去掉。
- 外连接:把悬浮元组(自然连接舍弃的元组)保留的连接称为外连接
- 左外连接:只保留左边的元组
- 右外连接:只保留右边的元组
- 除运算(division):设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中
3. SQL和数据安全
- SQL集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definiton)和数据控制(data control)功能于一体,主要特点有综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供多种使用方式、语言简洁,易学易用等。
3.1 数据定义
- 主要包括模式定义(SCHEMA)、表定义(TABLE)、视图(VIEW)和索引定义(INDEX)
- 主要操作关键字:CREATE、DROP、ALTER
3.1.1 模式
- 模式实际上定义了一个命名空间(namespace),在这一空间可以进一步定义该模式的基本表、视图、索引等数据库对象。
//创建模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>]
//例:为用户ZHANG创建一个模式TEST,并在其中定义一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL SMALLINT)
//删除模式,CASCADE 和 RESTRICT必选其中一个
//CASCADE:级联,在删除模式的同时把所有的数据库对象全部删除
//RESTRICT:限制。如果该模式下已经定义了下属的数据库对象(如表、视图等),则拒绝该删除操作的执行
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
3.1.2 基本表的定义、删除、修改
//建立一个Student表
//PS:这是一个参照自身的例子
CREATE TABLE Course
( Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno) //表级完整性约束条件,Cpno是外码,被参照表是Course,参照表是Cno
);
//修改表格:
ALTER TABLE Student ADD S_entrance DATE; //添加入学时间列
ALTER TABLE Student ALTER COLUMN Sage INT;//将数据类型由字符串改为整型
ALTER TABLE Course ADD UNIQUE(Cname); //添加课程名称必须唯一值的约束条件
//删除表格
//RESTRICT:删除由限制条件。欲删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数
//CASCADE:删除无限制条件。删除时相关依赖会一并删除
//默认为:RESTRICT
DROP TABLE Student [RESTRICT | CASCADE]
3.1.4 索引的建立和删除
//UNIQUE :表示此索引的每个索引值只对应唯一的数据记录
//CLUSTER:表示要建立的索引时聚簇索引
//DESC:降序;ASC:升序
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名[<次序>],<列名[<次序>]>,…>)
//例
CREATE UNIQUE INDEX Stusno ON SC(Sno ASC,Cno DESC)
//修改:索引重命名
ALTER INDEX SCno RENAME TO SCSno
//删除
DROP INDEX SCSno
3.2 数据查询
- 基本格式
SELECT [ALL | DISTINCT] <目标表达式> [,<目标表达式>] …
FROM <表名或视图名> [,<表名或视图名>] | (<SELECT语句>) [AS]<别名>
[WHERE <条件表达式>]
[GROUP BY<列名1> [HAVING<条件表达式>]]
[ORDER BY<列名2> [ASC | DESC]];
3.3 数据更新
- 主要操作有:插入数据(INSERT)、修改数据(ALTER)、删除数据(DELETE)
//插入数据例子
INSERT INTO Student VALUES("0001","ZHUSENLIN")
//修改数据例子
UPDATE Student SET SName="ZhuSenlin" WHERE SName="ZHUSENLIN"
//删除数据例子
DELETE FROM Student WHERE SNo="0001"
3.4 空值的处理
- 空值的产生:未赋值的属性
- 空值的判断:IS NULL 和 IS NOT NULL
- 空值的约束:NOT NULL
3.5 视图
3.5.1 定义视图、查询视图、更新视图
//创建视图的例子
CREATE VIEW Is_Student
AS
SELECT SNo,SName
FROM Student
WHERE SNo="0001"
//删除视图的例子
DROP VIEW Is_Student
//查询视图的例子
SELECT SNo,SName FROM Is_Student WHERE Sno="0001"
//更新视图的例子:和表类似
//INSERT、DELETE、UPDATE
3.5.2 视图的作用
- 视图能够简化用户的操作
- 视图使用户能够以多种角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
- 适当利用视图可以更清晰地表达查询
4. 数据库的安全性
- 数据库的安全是指保护数据库以防不合法使用所造成的数据泄露、更改和破坏。
- 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱
- 安全标准简介:TCSEC1985年美国国防部正式颁布的《DoD可信计算机系统评估准则》
4.1 数据库安全性控制
4.1.1 用户身份识鉴定
- 每个用户标识由用户名和用户标识号构成。用户标识号在整个生命周期是唯一的。
- 鉴别方法
- 静态口令鉴别:账号密码登录
- 动态口令鉴别:一次一密的方式(例如短信验证等)
- 生物特征鉴别:指纹、虹纹和掌纹
- 智能卡鉴别:不可复制的硬件,内置集成电路的芯片,具有硬件加密的功能
4.1.2 存取控制
- 存取控制机制主要包括两部分:定义用户权限(授权)和合法权限检查
4.1.3 自主存取控制方法
- 自主存取控制方法:主要通过SQL的GRANT和REVOKE语句来实现。
- 用户权限由数据库对象和操作类型组成;定义存取权限称为授权。
- 授权:授予和回收
//授予语句语法
GRANT<权限> [,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
TO <用户>[,<用户>]…
[WITH GRANT OPTION]
//授予权限例子
GRANT SELECT ON TABLE Student TO U1,U2
GRANT SELECT ON TABLE Student TO PUBLIC //授予给所有用户
//回收语句语法
REVOKE<权限> [,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]…[CASECADE|RESTRICT]
4.1.4 创建数据库模式的权限
//CONNECT :只能登录数据库
//RESOURCE:可创建基本表和视图,但不能创建模式和新用户
//DBA:超级用户
CREATE USER <username> [WITH] [DBA|RESOURCE|CONNECT]
4.1.5 数据库角色
//角色创建
CREARE ROLE <角色名>
//给角色授权
GRANT<权限> [,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
TO <角色>[,<角色>]…
//将一个角色授予其他的角色或用户
GRANT<角色1>[,<角色2>]
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
//角色权限的回收
REVOKE<权限> [,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
FROM <角色>[,<角色>]…
4.1.6 强制存取控制方法
- 数据库管理系统为每一个实例指派一个敏感度标记(label)绝密(TS)>=机密(S)>=可信(Confidential,C)>=公开(P)
- 当某一个用户(或主体)以标记label注册如系统时,系统要求他对任何客体的存取都必须遵循如下规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
4.2 视图机制
通过视图机制可以把一些保密的数据对无权存取的用户隐藏起来,从而提高一定程度的安全保护。
4.3 审计
- 审计功能把用户对数据库的所有操作字典记录下来放入审计日志中,以供审计员监控各种行为。
- 设置和取消审计功能
AUDIT ALTER,UPDATE ON SC
NOAUDIT ALTER,UPDATE ON SC
4.4 数据加密
- 数据加密包括存储加密和传输加密
4.5 其他安全性保护
推理控制、隐蔽信道和数据隐私保护等技术
5.数据库完整性
- 数据的完整性(integrity)是指数据的正确性和相容性。
- 正确性:符合现实语义、反映当时实际状况的。
- 相容性:数据库同一对象在不同关系表中的数据是符合逻辑的。
- 数据库系统实现的功能
- 提供定义完整性约束条件的机制
- 提供完整性检查的方法
- 进行违约处理
5.1 实体完整性
- 实体完整性在CREATE TABLE中用PRIMARY KEY定义,有表级约束和列级约束(仅适用于主码只有一列的情况)两种说明方法
- 在检查实体完整性时,全盘扫描太过耗时,因此,数据库管理系统都在主码建立一个索引。通过索引查找基本表中是否有已经存在新的主码值。(B+树索引)
5.2 参照完整性
- 参照完整性在CREATE TABLE中用FOREIGN KEY定义
5.3 用户定义的完整性
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 检查列值是否满足一个表达式(Check)
5.4 完整性约束命名子句
- 完整性约束命名子句
CONSTRAINT <完整性约束条件名> <完整性约束条件>
//修改完整性约束
ALTER TABLE Student
DROP CONSTRAINT C1
ALTER TABLE Student
ADD CONSTRAINT C1 <完整性约束条件名> <完整性约束条件>
5.5 断言
//创建断言
CREATE ASSERTION <断言名> <CHECK 子句>
//删除断言
DROP ASSERTION <断言名>
5.6 触发器
- 触发器又叫做事件-条件-动作(event-condition-action)规则。