无损连接分解的快捷判别方法
首先要申明,这种快捷方法是有前提的,前提就是分解后的关系模式只有两个。其内容为:
设ρ={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范式。即左边都是候选键。
聚合函数只能在以下位置作为表达式使用:
执行顺序
–第一步:执行FROM(有join on执行join on)
–第二步:WHERE条件过滤
–第三步:GROUP BY分组(开始使用select中的别名,后面的语句中都可以使用)
–第四步:HAVING条件过滤
–第五步:执行SELECT投影列
–第六步:执行DISTINCT
–第六步:执行ORDER BY 排序
排它锁 X锁
共享锁 S锁
一级封锁协议:防止丢失修改
? 事物T在修改数据之前必须先对其加X锁,直到事物结束释放
二级封锁协议:防止读脏数据
? 事物T在读数据之前加上S锁,读完后即可释放
三级封锁协议:保证数据可重复读
? 事物T在读取数据之前必须对其加上S锁,直到事物结束才释放
原文:https://www.cnblogs.com/tomyyyyy/p/11099655.html