数据库复习
概念
数据结构、数据操作和数据完整性约束条件构成数据模型的三要素
实体型之间的联系包括一对一联系、一对多联系和多对多联系三种类型。
数据库是长期存储在计算机中、有(组织)的、可(共享)的数据集合。
DBMS表示,它是位于(用户)和(操作系统)之间的一层数据管理软件。
根据数据模型的应用目的不同,数据模型分为(概念模型)、(逻辑模型)和(物理模型)等。
数据库领域中常用的逻辑数据模型有层次模型、网状模型、关系模型、面向对象模型等。
数据库系统由数据库、数据库管理系统、应用系统和数据库管理员等组成
事物的四个特性:AIDC 原子性 独立性 持久性 一致性
通过 加锁 日志 提交来保持
三级模式 两级存储映像
实体(行)完整性
实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标识,一般用主键,唯一索引 unique关键字,及identity属性比如说我们的身份证号码,可以唯一标识一个人.
参照完整性
参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。参考完整性维护表间数据的有效性,完整性,通常通过建立外部键联系另一表的主键实现,还可以用触发器来维护参考完整性
无损连接
无损连接分解的快捷判别方法
首先要申明,这种快捷方法是有前提的,前提就是分解后的关系模式只有两个。其内容为:
设ρ={R1,R2}是R的一个分解,F是R上的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1–R2)或(R1∩R2)→(R2–R1)。这个“或”字很重要,这里表示(R1∩R2)→(R1–R2)、(R1∩R2)→(R2–R1)中只要有一个成立就行。这里的求交和相减运算的对象是关系模式的属性。
如果要保持无损连接,那么总可以达到第四范式。
函数依赖
可以将R1, R2, R3 ……分别求函数依赖闭包,看是否丢失函数依赖
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。
这句话的意思是:将R<U,F>分解后,存在很多分解后的关系,例如分解为R1,R2,R3等。在R<U,F>中,F存在很多的函数依赖,如果F中的每一个函数依赖,都可以在分解后的R1,R2,R3上找到它的属性的话,那么这个分解是保持依赖的。如果找不到的话,还需要进一步去判断。
如果上面的充分条件不能用的话,按照下面的算法来进行补充,对于F上的每个α→β使用以下算法。
算法,核心算法只有最后两行:
result=γ; //首先定义一个属性,这个属性如何找后文说
while(result发生变化)do //第一次直接执行,之后对result判断与上一次是否发生变化
for each 分解后的Ri //将每个分解后的结构Ri逐个带入
t=(result∩Ri)+ ∩ Ri //这里的意思是取result与Ri的交集的闭包值,之后再与Ri取交集
result=result∪t
如果最后的result中包含了β的所有属性,那么称分解是保持函数依赖的。否则没有保持函数依赖。
如果要保持函数依赖,那么总可以达到第三范式
求候选键
-
L型:只在左边的出现的节点一定存在于中候选键。(也就是候选键的一个一部分或者全部)
-
R型:只在右边出现的节点一定不是候选键。(啥都不是,它只能被候选键推导出来 。是个铁废物)
-
N型: 两边都没有出现的节点,一点存在于候选键中。
-
LR型:在左边和右边都出现的节点有待观察。依次求闭包
求最小函数依赖集
如果函数依赖集F满足以下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。(以上步骤中,求出关系依赖集F,此时,再F的基础上,求出X或者Y的闭包,是否包含A)
范式
第一范式:强调数据表的原子性。
第二范式: 消除部分函数依赖,部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
第三范式:消除传递函数依赖,在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,(X∪Y)∩Z=空集合,则称Z传递函数依赖于X。
BC范式:主属性不依赖于主属性。若关系模式R属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式。即左边都是候选键。
SQL
- having放在group by 的后面
- group by 后面只能放非聚合函数的列
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
聚合函数只能在以下位置作为表达式使用:
- select 语句的选择列表(子查询或外部查询);
- compute 或 compute by 子句;
- having 子句;
=ANY 运算符与 IN 等效,< >ANY 运算符则不同于 NOT IN:< >ANY 表示不等于 a,或者不等于 b,或者不等于 c。NOT IN 表示不等于 a、不等于 b 并且不等于 c。<>ALL 与 NOT IN 表示的意思相同。
执行顺序
–第一步:执行FROM(有join on执行join on)
–第二步:WHERE条件过滤
–第三步:GROUP BY分组(开始使用select中的别名,后面的语句中都可以使用)
–第四步:HAVING条件过滤
–第五步:执行SELECT投影列
–第六步:执行DISTINCT
–第六步:执行ORDER BY 排序
数据库设计
- 需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 机器实现/数据实施
- 数据库运行和维护
三级封锁协议
排它锁 X锁
共享锁 S锁
一级封锁协议:防止丢失修改
事物T在修改数据之前必须先对其加X锁,直到事物结束释放
二级封锁协议:防止读脏数据
事物T在读数据之前加上S锁,读完后即可释放
三级封锁协议:保证数据可重复读
事物T在读取数据之前必须对其加上S锁,直到事物结束才释放
破坏死锁产生
-
一次封锁法
-
顺序封锁法
实现可串行性
-
两段锁协议
是充分条件而不是必要条件 可能死锁
赋予权限和取回权限
GRANT CREATE SESSION TO SCOTT;
GRANT CREATE TABLE TO Student_role;
REVOKE CREATE TABLE FROM SCOTT;
习题
1.数据库(DB),数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是(A)。
A. DBS包括DB和DBMS
B. DBMS包括DB和DBS
C. DB包括DBS和DBMS
D. DBS就是DB,也就是DBMS
2.下面列出的数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是(D)。
I.人工管理阶段
II.文件系统阶段
III.数据库阶段
A. I 和II
B. 只有II
C. II 和III
D. 只有I
3.下列四项中,不属于数据库系统特点的是(C)。
A. 数据共享
B. 数据完整性
C. 数据冗余度高
D. 数据独立性高
4.数据库系统的数据独立性体现在(B)。
A.不会因为数据的变化而影响到应用程序
B.不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序
C.不会因为存储策略的变化而影响存储结构
D.不会因为某些存储结构的变化而影响其他的存储结构
5.要保证数据库的数据独立性,需要修改的是(C)。
A. 模式与外模式
B. 模式与内模式
C. 三层之间的两种映射
D. 三层模式
6.要保证数据库的逻辑数据独立性,需要修改的是(A)。
A. 模式与外模式的映射
B. 模式与内模式之间的映射
C. 模式
D. 三层模式
描述数据库全体数据的全局逻辑结构和特性的是_____模式_。