数据库的知识点总结

【关系型数据库】
【database design and e-r model】

    entitiy set;实体集
    relationship set;联系集
    attribute;属性
    mapping cardinality;映射基数(一对一,一对多,多对一,多对多)
    constraint;
    participation constraint;参与约束(完全参与,不完全参与)
    key;码(一对多,多的一方是主码,关系表的键)
    cardinality limits;

extended E_R model(应该有概念)
E-R模型转换为 关系表;
拓展E-R图和IS-A;

关系数据库设计

什么是规范化
一个低级范式的关系模式转换为多个高级范式的集合,叫做规范化

第一范式
强调的是列的原子性,即列不能够再分成其他几列。

第二范式
首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分

第三范式
首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

超码
可以唯一确定一组元组的属性集。

函数依赖
所谓函数依赖,和函数非常想像。A属性可以确定B属性的值,则称其为有函数依赖。

平凡函数
如果一个函数在任何关系上都成立,则称之为平凡函数。
例如AB——>A 或者类似于A——>A

Function dependency holds on R
当前的关系上定义了一个函数

Function dependency satisfied by R
当前的关系满足了函数依赖

这两者是不等价的

依赖函数集闭包(Closure of a set of functional dependencies)
函数依赖F可以推导出来的所有函数成为F的闭包F+;
推导的过程中有几条定理

  • B属性属于A 则A——>B
  • A——>B,则AC——>BC
  • A——>B,B——C 则A——>C
    以下几条是加强版的

  • A——>B,A——>C,则A——>BC

  • A——>BC ,则A——>B,A——>C
  • A——>B ,则BC——>D,则AC———>D

属性的闭包(Closure of Attributes)
这个是函数闭包的属性显示
A->B,A-C,CG->H,CG->I,B->H
计算AG的属性闭包
result=AG;
result=ABCG;
result=ABCGHI;

所以AG的属性闭包就应该是R
AG is a superkey of R
IS AG a candidate key?

step1 is AG a super key?
    AG->R,yes
step2 这里需要看AG中是否有冗余,如果有一个子集的属性闭包是R,则就不是候选键
is any subset of AG a surperkey?
    A? no
    G?no
so,AG is a candidate key(but also a candidate key)

Closure of Attribute的作用

  • Testing for superkey
  • Testing functional dependencies
  • Computing closure F+

正则覆盖

Fc is  a minimal set of functional dependencies equivalent to F;
F+=Fc+;
计算正交覆盖
R=(A,B,C)
F1={A->BC,B->C,A->B,AB->C}
combine the B->C and AB->C to AB->C
...
Fc:
    A->B
    B->C

Extraneous Attributes

AB->CD ,A->E,E->C
then AB->D
(AB)+=(ABCDE)
C in AB->CD is extraneous;

在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性

第二范式
(消除了非主属性对键的部分函数依赖)

 - sencond normal form 
     Decompose SLG(S#,SD,SL,C#,G)
         (S#,C#)->G
         (SD->SL)
         (S#->SD)
         (S#->SL)
         很明显。 (S#->SD)(S#->SL)都依赖了高冷的S#,这几是所谓部分依赖。
    Decompose SLG(S#,SD,SL,C#,G)into 
    SC(S#,C#,G) ,SSS(S#,SD,SL)
    Fsc={(S#,C#)->G}
    Fsss={S#->SD,SD->SL,S#->SL}


第三范式
(消除非主属性对键的传递性依赖)

Fsss={S#->SD,S#->SL,SD->SL}
消除之后 Fsss={S#->SD,S#->SL}

BCNF
(消除主属性对键的部分和传递函数依赖)
(因为消除是在第三范式基础上,因此,最后,不存在主属性、非主属性 对 键的部分和传递函数依赖

STJ(S,T,J) 
T-J;
{S,J}->T;
{S,T}->J;
由此可以得到候选键是:{S,J}{S,T}
不符合BCNF,很明显,主属性J对候选键{S,T}存在着部分依赖,所以
并不是什么BCNF
但是倒是符合第三范式,因为根本不存在什么非主属性对候选键的传递性和部分依赖

可以将T分离,变成两部分
ST(S,T)和TJ(T,J)
一个S对应一个T,一个T对应一个J

Schema Decomposition
lossy decomposition

有损分解的举例
employee(ID,name)
employee2(name,salary,city)
很明显,如果有两个人同名,则合并时无法判断其ID,丢失了信息,因此是有损分解

lossless decomposition

如果R1R2R1R2的超码,则R上的分解(R1R2)是无损分解。这是一个充分条件,当所有的约束都是函数依赖时它才是必要条件(例如多值依赖就是一种非函数依赖的约束),不过这已经足够了。

保持依赖

如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。

例题

设关系模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足 (43) 。
(43) A.具有无损连接性、保持函数依赖
              B.不具有无损连接性、保持函数依赖
              C.具有无损连接性、不保持函数依赖
              D.不具有无损连接性、不保持函数依赖

先做无损链接的判断。R1∩R2={C},计算C+。
Result=C
由于CDC∈result,所以result=result∪D=CD
可见C是R2的超码,该分解是一个无损分解。
再做保持依赖的判断。
A→BC,BC→EE→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),CD在R2上成立,因此给分解是保持依赖的。

选A。

3NF的分解

前面已经说过,从2NF到3NF是消除了非主属性对候选键的传递性依赖的过程。
算法过程
Note:

 1. all candidate keys should be founded out
 2. only one canonical cover Fc should be computed at first
 3.对待Fc中的每一个函数依赖
A->B,如果它没有包含在已有子模式中,则构造一个BCNF/3NF子模式,加入到一个新的R中
 4.如果R中不包含一个候选键,则对R的候选键也单独构造一个关系模式。

例题

Consider schema R(X,Y,Z,W),
and F={X->Z,Z->X,Y->XZ,W->XZ}that holds on R.
Give the lossless,dependency preserving decomposition of this schema into 3NF
the solution is follows:

 1. find {YW}+=R(这里有一个确定候选键的原则,首先如果一个属性只出现在了关系式右边,则必定不是,如果只出现在左边,则必定在候选键当中,然后加上别的属性,如果全集等于U,则就是候选键。候选键不只有一个,候选键中不能有冗余)
 2. 计算出来一个Fc。即最小关系集。
 3. With respect to F = {X->Z, Z->X, Y->XZ, W->XZ}, 
considering X in Y->XZ and Z in W->XZ, 
  {X->Z, Z->X, Y->Z, W->X} implies F, so X in Y->XZ and Z in W->XZ are all extraneous(这两个属性在这里是多余的,首先把它们化简掉) attributes, and one of canonical covers for F is
       Fc = {X->Z, Z->X, Y->Z, W->X}(但不是唯一一个)
 4. 对Fc中的每一个依赖函数A->B,都将它变成AB这样一个subschema
 R1={XZ} R2={YZ} R3={WX}
 由于缺少一个候选键,再加上 R4={YW}
因此,最后的分解式应该是
{XZ,YZ,XW,YW};



事务管理 (Transaction Management)

事务的定义

a unit of DBS application program executing that accesses and possibly updates various data item in DB
一个访问和(可能发生的)更新操作的最小单位,形如
T1:
    begin transaction
    read(A);
    A:=A-5;
    write(A)
    end transaction

事务的ACID特性

目的:保证正确性 to guarantee integrities of DB
内容:Atomicity,Consistency,Isolation,Durability

Atomicity(原子性)

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

Consistentcy(一致性)

事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。(这句话的潜在含义是:在事务的过程中,数据的完整性是可以被破坏的,但是在结束时,必须正确!)

Isolation(隔离性)

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
最后的效果相当于**事务串行执行**

Durablity(持久性)

一旦成功完成,对数据库的改变就是永久的,不会因为随着系统错误而丢失

事务的状态
Active

起始状态,在begin transaction之后进入。
会被分配local buffer

Note

操作被执行,但是修改**可能**仅仅会存在于disk buffer中

Partially Committed(部分提交)

commit指令之后
DBMS将disk buffer中的内容写入到disk当中

Commit

after the transaction has successfully committed all its operations ,and all the results of these operation have been reflected to the DB in Partially Committed state

Failed

执行过程中无法完成下去,进入此状态,恢复到事务执行之前的状态(roll back),执行的过程叫做错误处理

Abort

在错误处理完成之后

事务的串行并行

数据库系统中,多个事务的串行执行可以保证ACID,但效率低
并行可以提高效率
如果并行执行和串行执行的结果一致,那么这个并行是正确的,称之为可串行化
反之是错误的

Conflict

if and only if there exists some item Q accessed by both T1 and T2,and at least one of these two instruction is write(Q),then T1 and T2 are conflict

Conflict Serializability

S and S1 are conflict equivalent,则称SConflict Serializablity

S中有{T1,T2,T3,T4}
Recoverability
如果T2依赖于T1中的某一个Write(Q)的Q,那么其commit应该放在T1的commit之后执行,这样当T1的commit在执行失败之后进行rollback,这个时候T2的commit还没有被执行,就将被abort。

否则的话,就会出现T2中出现了脏读。(读取了并不存在的数据)
Cascadeless Schedules
如果T2的全部指令都在T1的commit之后,那么情况就更简化了,这样连abort都不需要了。如果T1 rollback,则终止Schedule。

恢复Recovery component in DBMS

ensure atomicity and durability despite failures,thus povides high availability 

版权声明:本文为博主原创文章,转载请标明出处。

posted @ 2015-06-19 18:49  Fridge  阅读(1065)  评论(0编辑  收藏  举报