前言
RDBMS
指关系型数据库管理系统,全称 Relational Database Management System
。RDBMS
是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Serve
r、IBM DB2
、Oracle
、MySQL
以及 Microsoft Access
。
RDBMS 中的数据存储在被称为表的数据库对象中,表是相关的数据项的集合,它由列和行组成。
I 预备知识
1.1 三级模式结构
数据库的三级模式是指数据库系统由外模式
、模式
和内模式
构成。
数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像
和模式/内模式映像
。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
- 一个数据库可以有多个外模式,同一个模式可被某一用户的多个应用系统使用,但一个应用程序只能使用一个外模式。
- 模式实际上是数据库数据在逻辑上的视图,一个数据库只有一个模式。dbms提供模式描述语言(模式ddl)来严格地定义模式。
当模式改变时,有数据库管理员对外模式/模式映像做相应的改变,达到外模式不用改变的目的。应用程序是依据数据的外模式编写的,从而应用程序不必修改,这样保证了数据与程序的逻辑独立性。除非应用需求本身发生变化,否则应用程序一般不需要修改。模式反应的是数据的结构及其联系,而应用实例反应的是数据库某一时刻的状态。
- 删除模式
drop schema <模式名> <cascade|restrict> --cascade级联和restrict两者必选其一。
- grant和revoke:
grate
和revoke
语句向用户授予或回收对数据的操作权限。
对数据库模式的授权则由dba在创建用户时实现。
数据库角色
:是被命名的一组与数据库操作相关的权限,角色是权限的集合,使用角色来管理数据库权限可以简化授权的过程。
1.2 函数依赖
- 函数依赖
Y=f(X)
: 设R(U)
是属性集U上的关系模式,X
和Y
是U
的子集。如果对于R(U)
的任意一个可能的关系R,R中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或者是Y函数依赖于X。记作X→Y。其中X称为决定因素,即左边的属性(组)为决定因素。
【例】Student关系中,每个学生有唯一的学号,每个学生只属于一个系别。
则Sname=f(Sno)
,Sno函数决定Sname,记为Sno→SnameSdept=f(Sno) ,Sno函数决定Sdept,记为Sno→Sdept
- 平凡函数依赖和非平凡的函数依赖
平凡函数依赖即自己可以确定自己的子集,没有什么意义。
- 完全函数依赖:在
R(U)
中,如果y函数依赖于y,并且对于x的任何一个真子集x',都有y函数不依赖于x'.则称y对x完全函数依赖。
任何真子集不能函数确定的为完全的,即少一个都不能确定。部分的函数依赖,顾名思义,就是部分的属性就可以确定。
- 传递函数依赖
1.3 多值依赖
每个X值对应一组Y值,这组值与Z值无关。
X+Y+Z=U
当Z为空的时候,为
平凡的多值依赖
。Z不为空,为
非平凡多值依赖
。
课程
C→→T
,对于每个C值,都有对应的一组T值,而且这组T值与B值无关。
1.4 码
- 候选码 —— 可以唯一确定一个元组
- 超码 —— 某个真子集为候选码;候选码为最小的超码
- 主码 —— 认为选定的一个候选码
- 全码 —— 整个属性组是码 All-key
- 外码 —— 关系R中不是码的属性,是另一关系的码
- 主属性与非主属性 —— 所有候选码的属性为主属性,其他为非主属性
1.5 进程
进程的概念一分为二,task
是申请资源的最小单位,而thread
是调度和运行的最小单位。一个task可以有多个thread,这些thread共享task的所有资源,共同完成一个任务。
线程机制与进程机制的比较
- 线程比进程占用更少的资源。
- 线程调度比较灵活
- 线程切换开销较小:线程共享同一地址空间,而进程的地址空间是私有的。
- 线程通信简便
1.6 游标
系统为用户开设的一个数据缓冲池,存放sql语句的执行结果,每一个游标区都有一个名字。
- 游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。
- 游标可以对结果集的当前行做修改。
- 当需要逐条处理数据的时候,游标显得十分重要。
II 关系数据库
2.1 关系模式
关系模式是型,关系模式是对关系的描述,是静态的、稳定的。
关系是值,是关系模式在某一时刻的状态或内容,是动态的、随时间不断变化的。
关系的描述称为关系模式
,可以形式化的表示为R(U,D,DOM,F)。
其中R
为关系名,U
为组成该关系的属性集合;D
为属性组U中的属性所来自的域;DOM
为属性向域的映像集合;F为属性间数据的依赖关系集合。
2.2 关系
关系是笛卡尔积的有限子集, 三元组表示关系R<U,F>
,关系
作为一张二维表,对他有一个最起码的要求,即每一个分量(元组)必须是不可分的数据项
。满足这一条件的关系模式就属于第一范式。
三种类型
- 基本表:实际存在的表,它是实际存储数据的逻辑表示。
- 查询表:查询结果对应的表
- 视图表:由基本表或其他的视图表导出的表,是虚表,它不对应实际存储的数据。
定义视图:rdbms执行 create view
语句只是把视图的定义存入数据字典,并不执行其中的select语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。对于非行列子集视图的查询,就不一定能转换。因为where子句中是不能用聚集函数作为条件表达式。
2.3 规范化
- 范式(NF):符合某一级别的关系模式的集合
- 规范化:一个低一级的范式,通过模式分解可以转换为若干个高一级范式的关系模式的集合的过程。
1NF→2NF→3NF→BCNF→4NF,范式随这个顺序,逐渐更加规范化。
- 关系作为一张二维表,对他有一个最起码的要求,即
每一个分量必须是不可分的数据项
。满足这一条件的关系模式就属于第一范式
。 - 如果关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,即消除部分函数依赖,来达到
第二范式
。
步骤:①找函数依赖关系→②找候选码→③找非主属性→④看是否完全依赖
- 关系模式
R<U,F>
中如果不存在这样的码X,属性组Y及非数主属性Z(Z不属于Y),使得y函数依赖于X,且Z函数依赖于Y成立,X不依赖于Y.。则称关系模式属于第三范式
。如果是第三范式,它的任何非键属性都并不传递依赖
于任何候选键。
通俗地理解三个范式:
- 第一范式,是对属性的原子性约束,要求属性具有原子性,不可再分解(数据项不可分);
- 第二范式,是对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性(每一个属性完全依赖于码,码可确定所有非主属性即消除部分函数依赖);
- 第三范式,是对字段冗余性的约束,即任何字段不能有其他字段派生出来。(消除传递依赖,即它的任何非键属性都不传递依赖于任何候选键)
- BCNF
决定因素必含有码步骤:(首先保证没有部分函数依赖和传递函数依赖关系)①找函数依赖关系→②找候选码→③决定因素是否包含码
- 4NF
2.4 关系的完整性
关系的完整性约束条件包括三大类:实体完整性
、参照完整性
和用户自定义完整性
。
实体完整性和关系完整性是关系模型必须满足的完整性约束条件。
- 实体完整性规则:如果属性A是基本关系R的主属性(候选码),则A不能取空值。
- 参照完整性规则:如果属性F是关系基本关系R的外码,它与基本关系S的主码K相对应,则对于R中的每一个元组在F上的值必须为:
或者取值为空,或者等于S中某个元组的主码值
,其中的R和S可以是同一个关系,比如班长是外码。
完整性约束的三方面表现
- 域的完整性使用check来实现约束,通过它定义字段的值域。
- 参照完整性使用主键约束、外键约束和表级别触发器来实现
- 用户定义完整性,它是一些业务规则,用存储过程和触发器来实现。
2.5 关系操作
- 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
选择、投影、并、差、笛卡尔基是5种基本操作
数据更新:插入、删除、修改
2.6 关系代数
传统的集合运算是二目运算,即并、差、交和笛卡尔积
四种,将关系看成元组的集合,其运算是从关系的水平方向即行的角度来进行,而专门的关系运算包括选择、投影、连接和除运算
,不仅涉及行而且涉及列。比较运算符>,<,=,<>和逻辑运算符
是用来辅助专门的关系运算的。
- 等值连接:它是从关系RYuS的广义笛卡尔积中选取A和B属性值相等的那些元组。
- 自然连接是一种特殊的等值连接,他要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以自然连接是从行和列的角度进行的运算。
悬浮元组(Dangling tuple)
:两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。
https://blog.csdn.net/z929118967/article/details/128377646?spm=1001.2014.3001.5501
- 外连接:如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接。
如果把左边关系R中要舍弃的元组保留就叫左连接
;如果把右边关系的元组保留就叫右外连接
。
- 除运算
给定关系R(x,y)
和S(y,z)
,其中x,y,z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(x)
,P是R中满足以下关系的元组在x属性列上的投影:
元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:R÷S={tr[X]|trR∧πY(S)Yx}
Yx:x在R中的象集,x = tr[X]
- 选择
- 投影
选择例子
- 查询选修了全部课程的学生姓名。
select sname from student where not exists (select * from course where no exists(select * from sc where sno=student.sno and cno=course.cno));--sql中没有全称量词,但是,我们总可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。
- 查询至少选修了学生10094030011选修的全部课程的学号,可以使用蕴含逻辑运算。
select distinct sno from sc scx where not exists(select * from sc scy where scy.sno='100940311' and not exists(select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno));
III 安全性措施
好的安全性措施应该使得那些试图破坏安全的人所花费的代价远远超过他们所获得的利益。
3.1 强制存取控制(MAC)
仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
注:
- 主体是系统中的活动实体,即包括DBMS所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操作的,包括文件、基本表、索引和视图。
- mac是对数据库本身进行密级标志,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操作数据。
- 较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现mac时要首先实现dac,系统首先进行dac检查,对通过dac检查的允许存取的数据库对象再由系统自动进行mac检查,只有通过mac检查的数据库对象方可存取。
3.2 审计(audit )
audit
语句用来设置审计功能,noaudit
语句取消审计功能。
audit alter,update on 表名;
审计设置以及审计内容一般都存放在数据字典中,必须把审计开关打开。即把系统参数audit_rai
l设置为true,才可以在系统表sys_audittrail
中查看审计信息。
see also
更多内容请关注#公众号:iOS逆向
。