代码改变世界

数据库系统概论(二):关系数据库

2020-05-21 08:36  ZhuSenlin  阅读(628)  评论(0编辑  收藏  举报

本笔记参考书籍《数据库系统概论(第五版)》王珊 萨师煊 编著

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)规则。