0%

数据库复习笔记(三)

优化模式设计

没有信息丢失、保持函数依赖、冗余量最小、(好的查询性能)

Closure of FD sets(函数依赖集合的闭包)

Closure of a Set of Attributes(传递闭包)

求码

已知R(A,B,C,D,E,…),R的码是这样一组属性集合S,S的闭包含有R的所有属性,S的子集不能包含R的所有属性。

求码的启发式算法:不在任何函数依赖右边出现的属性必是码的一部分,从未在左边出现的不是码。

E/R图(Conceptual Model)、Relational Schema Design (or Logical Design)Relational Model

无损分解

经常会出现做自然连接后得到的表,比原来的表大的情况——lossy join

BCNF是无损分解

无损连接的chase检验

画矩阵判断是否是无损分解!

行数为分解后表的个数,列数为元素个数;对于每一行,已知元素填$a_i$,未知元素写$b_{ij}$,用函数依赖填表,如果出现一行全为a的元素,则为无损连接。

保持函数依赖

enforceable

拆表时,X->Y的X,Y不在一张表中,可能不保持函数依赖

范式

BCNF

所有函数依赖的左边都是superkey。除了平凡的函数依赖(AB->A)

若一个表只有两个属性,一定满足BCNF

分解成BCNF:

  1. 找到违背BCNF的函数A->B
  2. 求左边的闭包$A^+$,$A^+$拆成一张表,剩下的属性和A是一张表
  3. 继续检查拆后的表
  4. 将函数依赖的闭包分配给拆分后的表

这样可能会丢函数依赖,所以有了3NF。

3NF

对BCNF的修正

左边X不是superkey,右边A不是prime,则X->A不是3NF

保持函数依赖和无损连接的3NF模式分解

–求最小函数依赖集合和关系模式的候选码;

–按函数依赖左部相同原则进行分组,每个组的所有属性形成分解后的关系模式;

–如果某个关系模式被另一个关系模式所包含,删除该关系模式;

–判断候选码是否包含在某个关系模式中,如果包含则结束;如果不包含,将其中一个候选码作为关系模式加入到关系模式中。

多值依赖—>第四范式

X ->->Y

多个多值依赖在一张表中,则违背4NF

例题

Relation R(A,B,C) satisfies the multi-valued dependency A->->B, and has (possibly among others) the following tuples in its current instance: (0, 1, 2), (0, 3, 4), and (1, 5, 6).

Which of the following tuples is not necessarily in the current instance of R?

(a)(0; 1; 4) (b) (0; 3; 2) (c) (0; 5; 2) (d) None of the above.

The following three questions refer to a relation R(A, B, C, D, E) with functional dependencies A->B, BC->D, and E->C.

Question 1: The number of keys of R is:

(a) 1 (b) 2 (c) 8 (d) 11

Question 2: Which of the following functional dependency does not necessarily hold in R?

​ (a) AC -> D (b) AE -> C (c) BC -> B (d) CE -> D

Question 3: If we project R onto S(B, C, D, E), which of he following functional dependencies holds in S and also does not violate the BCNF condition for S?

​ (a) BC -> D (b) BE -> D (c) B -> E (d) E -> C

判断无损连接的算法

•已知R<U,F>,U={A,B,C,D,E}

•F={AB ->C, C ->D, D ->E}

•R的一个分解R1(A,B,C),R2(C,D),R3(D,E)

•已知R<U,F>,U={A,B,C,D,E}

•F={A->C,B->C, C ->D, DE ->C,CE ->A}

•R的一个分解R1(A,D),R2(A,B),R3(B,E),R4(C,D,E),R5(A,E)

最小函数依赖集

最小函数依赖集F:

F中的任意函数依赖右边只有一个属性,函数依赖缺一不可,左边的属性不能再少了

F的最小依赖集不一定是唯一的。

找的时候,去掉一个,看能不能由其它函数依赖推出它

2NF:码的一个子集决定了一个非主属性,则违背2NF

例题

•下列关系模式最高属于第几范式:

–R(ABCD), F={B→D,AB→C} 1NF

–R(ABCDE),F={AB→CE,E→AB,C→D} 2NF 码:(AB),E

–R(ABCD),F={B→D,D→B,AB→C} 3NF

–R(ABC),F={A→B,B→A,A→C} BCNF

–R(ABC),F={A→B,B→A,C→A} 2NF

–R(ABCD),F={A→C,D→B} 1NF

–R(ABCD),F={A→C,CD→B} 1NF

例:首先关系模式R满足原子性,所以是满足第一范式的。并且有函数依赖可以得到所有的非主属性都完全依赖于码,所以是第二范式。但是由于第二个依赖中SD不是码并且M不是键属性,所以不满足3NF的定义。

关系查询语句

$R:=R_1∩R_2,R:=R_1∪R_2,R:=R_1-R_2$

$R_3:=R_1×R_2\ (from\ R_1,R_2),R_1:=\sigma_C(R_2)\ (where\ condition),R_1:=π_L(R_2)\ (select\ L)$

投影操作(projection)会去掉重复的元组

$\theta$-连接:先做笛卡尔积$R_1×R_2$,再做选择$\sigma_C$,出来的结果列数等于R1和R2列数之和

自然连接:相同的列名合成一列

重命名:$R_1 := ρ_{R_1(A_1,…,A_n)}(R_2) $,简单记为:$R_1(A1,…,An) :=R_2$

对于set:S ∪ S = S ;对于bag:S ∪ S != S

$R÷S$:用于“for all”的查询

例题

\1. 查询数学系(MA)全体学生

\2. 查询学生的姓名和所在的系

\3. 查询年龄小于20岁的学生的学号和姓名

\4. 查询选修了‘C1’课的学生学号和姓名

\5. 查询至少选修了一门其直接先行课为’C1’课程的学生姓名

\6. 查询选修了全部课程的学生号码和姓名

\7. 将新开课<‘C6’,’Pascal’,’-’>插入到关系C中

\8. 将S1学生的‘C1’课成绩改为‘B’

思考题:

查询不学‘C2’课的学生姓名和年龄

•a) Consider relations R(A,B) and S(B,C) where T(R) = 5000, T(S) = 3000, and B is a primary key on S. The expected number of tuples in R 自然连接 S is less than or equal to 3000.FALSE

•b) Consider two relations R(A, B, C) and S(A, D, E), sharing a common attribute A. It is known that R.A is a foreign key referencing S.A, and that S.A is the primary key of relation S. Then the estimated size of R 自然连接 S is T(R).TRUE

theta连接(包括自然连接)运算满足交换律