概括地讲,数据库数据具有永久存储、有组织和可共享的三个基本特点。
数据库系统特点:数据结构化,共享性高、冗余度低且易扩充,数据独立性高
数据独⽴性⾼:
数据模型是由①数据结构 ②数据操作 ③完整性约束三部分组成的。
目前数据库领域中最常用的逻辑数据模型有 层次模型、网状模型、关系模型 等。
外模式:亦称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻 辑表示。
模式:亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。
内模式:亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。
数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。
外模式/模式映像:
模式/内模式映像:
这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
关系可以有三种类型:基本关系、查询表、视图表
可以形象地表示为
R(U, D, DOM, F)
R:关系名
U:所有属性名
D:属性来自嘟些域
DOM:属性和域的映射
F:属性间的依赖关系
关系代数语言(重点重点)、关系演算语言(不重要)、SQL语言(后面重点讲)
或者取空值(F 的每个属性值均为空值)
或者等于 S 中某个元组的主码值
插入、查询、删除、修改
其中查询操作分为:选择、投影、连接、除法、并、差、交、笛卡尔积
查询操作的基本操作:选择、投影、并、差、笛卡尔积
自然连接是一种特殊的等值连接,不等同等值连接。
⽤户身份鉴别
存取控制
⾃主存取控制⽅法(重点)
主要通过grant
revoke
来进⾏控制
Reference
权限代表是否允许创建外键
⾃主存取控制⽅法 :
grant <权限> on table <表名> to <⽤户>
revoke <权限> on table <表名> from <⽤户>
授权 Grant
Grant <权限> on <数据对象> <对象名> to ⽤户 With grant option
# With grant option⼦句,则普通⽤户获权后,可把⾃⼰的权限授予其他⽤户。
# 例:
GRANT ALL PRIVILEGES # 全部操作权限
ON TABLE Student
TO User1;
回收权限 revoke
REVOKE <权限> ON <数据对象> <对象名> FROM <⽤户名> <CASCADE| RESTRICT>
# CASCADE是(级联) 删除模式的同时也把该模式的所有数据库对象删除.
# RESTRICT(限制) 如果该模式下有下属对象,⽐如表视图 就拒绝这个删除语句的执⾏
# 例:
REVOKE SELECT
ON TABLE Student
FROM User1 CASCADE;
# 例:
create role R1; # 创建一个角色
grant select,update,insert
on table Student
to R1; # 授权给角色R1
grant R1
R2,R3; # 将角色授予R2,R3
revoke R1
from R2; # 通过R1收回R2的所有权限
create role <⻆⾊名>
grant <权限> on <对象类型> <对象名> to <⻆⾊1>,<⻆⾊2>
grant <R⻆⾊> to ⻆⾊或者⽤户名字 [with admin option]
# 如果加上with admin option ,意味着, 这个⽤户还可以吧这权限授予给其他⻆⾊或者⽤户
revoke <权限> on <对象类型><对象名> from ⻆⾊名字
为不同的⽤户定义不同的视图,把不需要的数据给隐藏起来,这样⽤户就不会进⾏误操作
把对数据库的所有操作都记录到审计⽇志中,然后就可以通过⽇志审查这个⾥⾯是否有⼀些⾮法的⾏为。审计系统提供了一种事后的安全机制
# 对修改SC数据的操作进⾏审计
audit update
on SC
# 取消对SC表的⼀切审计
noaudit update
on SC;
通过⼀些加密算法,把明⽂变成密⽂,这样别⼈就⽆法查看
符合现实世界的描述
同⼀对象在不同表⾥⾯是符合逻辑的属性都应⼀致
primary key
)唯⼀,且⾮空foreign key
)的要么没有,要么对应另⼀表的主码(references
指明主码)not null
)unique
)check
短语)CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno),check(Grade>=0 and Grade<=100),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
任何使断言不为真值的操作都会被拒绝执行
create assertion <断⾔名> <check⼦句>
# 其中check字句 与where⼦句的表达式类似
# 删除断⾔名称:
drop assertion 断⾔名字;
触发器也叫做 事件->条件->动作 规则.
当对⼀个表增 删 改时候, 对触发器⾥⾯的条件进⾏检查。如果成⽴,就执⾏触发器⾥⾯的动作.否则不执⾏⾥⾯的动作.
CREATE TRIGGER<触发器名> # 每当触发事件发生时,该触发器被激活
(BEFORE| AFTER)<触发事件>ON<表名 # 产指明触发器激活的时间是在执行触发事件前或后
REFERENCING NEW |OLD ROW AS<变量># REFERENCING指出引用的变量
FOR EACH (ROW | STATEMENT) #产定义触发器的类型,指明动作体执行的频率
[WHEN<触发条件>]<触发动作体> # 仅当触发条件为真时才执行触发动作体
# 删除触发器:
drop trigger <触发器名> on <表名>
1数据冗余 2更新异常 3插⼊异常 4删除异常
⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)。
定义:设 R(U)是一个属性集 U 上的关系模式,X 和 Y 是 U 的子集。若对于 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 是非平凡的函数依赖
完全函数依赖:在 R(U)中,如果 X→Y,并且对于 X 的任何一个真子集 X’,都有 X’ 推不出(\→)Y, 则 称 Y 对 X 完全函数依赖。记作
传递函数依赖:在 R(U)中,如果 X→Y,(Y不属于X) ,Y 推不出X, Y→Z,Z 不属于 Y, 则称 Z 对 X传递函数依赖。
推理得:
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)F中任一函数依赖右部仅含有一个属性。
(2)F中不存在这样的函数依赖 X→A,使得F与F-{X→A} 等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}⋃{Z→A} 与F等价。
如何求最⼩依赖集?
((1)拆右边为多个元素的 ⽐如A->BC 拆为 A->B 和A->C
(2)出去当前元素,求它的闭包(看是否能推出e),把集合⾥⾯所有元素都弄完
(3)左边最⼩化(通过遮住元素来看能不能退出其他元素)
⽐如BCD,遮住B看能退出CD吗 , 遮住C能退出BD吗 遮住D看能退出BC吗 )
把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。
关系模式的分解必须遵守以下两个准则。
(1)无损连接性:信息不失真(不增减信息)。
(2)函数依赖保持性:不破坏属性间存在的依赖关系。
实体是⻓⽅形体现, ⽽属性则是椭圆形, 关系为菱形
游标:系统开设的缓冲区,存放执行结果.
查询分析 、查询检查、 查询优化 (查询优化包括: 代数优化,物理优化.)、 查询执⾏
代数优化——优化树:
事务的开始和结束是由用户显示控制的。在SQL中,定义事务有3条语句:
BEGIN TRANSACTION # 开始
COMMIT # 提交 结束
ROLLBACK # 回滚 结束
事务的四⼤特性:
封锁就是事务 T 在对某个数据对象操作之前,先向系统发出请求,对其加锁
封锁会带来的问题
系统不断批准下一个事务的请求,导致前面的一个事务可能会永远等待
避免活锁的简单方法是采用先来先服务的策略
互相抱着对方的锁不放,互相在等待
预防死锁的发生:一次封锁法、顺序封锁法
死锁的诊断与解除(普遍采用的方法)是使用超时法或事务等待图法
多个事务的并发执行是正确的,当且仅当其结果与按某一次串行执行这些事务的结果相同,称这种调度策略为可串行化调度。
可串行化的调度是正确的