这里介绍一下自己在准备考研复试时对于数据库这门可的知识点总结,本科期间上课没听懂,后来自己经历考研,把常见的问题难点总结一下.
常考知识点:关系代数,连接查询,嵌套查询,范式,模式分解,ER图(数据库设计)
一.关系代数
关系代数基本运算包括并,差,笛卡尔积,选择,投影
传统集合运算:并,差,交,笛卡尔积
专门关系运算:选择,投影,连接,除
运算符就不展示了(太难画了)
选择:该运算是找到某个表中符合条件的若干行.格式:σ选择谓词(关系)
投影:该运算是找到某个表中符合条件的若干列.∏属性1…属性n(关系)
连接:连接是把具有相同属性且值相同的行做笛卡尔积.格式:(关系)⋈(关系)
这里说说等值连接和自然连接
等值连接是按照等值条件将两个表连接起来,对不同表的相同属性予以区别
自然连接是特殊的等值连接,按照相同属性且属性值相同的行做笛卡尔积,把相同属性去重.
除:书上用到了象集,但是解释太麻烦,这里不严谨的解释一下
表R
A | B | C |
---|---|---|
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
表S
B | C | D |
---|---|---|
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
R÷S
A |
---|
a1 |
在关系R中,A可以取四个值{a1,a2,a3,a4},其中:
a1的象集为:{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为:{(b3,c7),(b2,c3)}
a3的象集为:{(b4,c6)}
a4的象集为:{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c3),(b2,c1)}。
显然只有R的象集a1包含S在(B,C)属性组上的投影,所以R÷S={a1}
其实就是找到两个表的公共属性,对R表按照属性进行分组,把a1的行放在一起,a2行放在一起..,然后找到R表中公共属性包含另外一个表的公共属性的a值就是除法的结果.
除常用于问题中含有全部字样的问题
二.连接查询
当查询的数据在两个及其以上的表中时就需要使用连接操作将两个表连接起来进行操作.连接的方法就是将两个表中的公共属性进行连接,也就是说两个表右参照关系才能连接,连接的语句就是让公共属性相等.where 表1.属性=表2属性
如:
学生(学号,姓名,年龄)
选课(课程号,课程名,学号)
select *
from 学生,选课
where 学生.学号=选课.学号
三,嵌套查询
嵌套查询一般可以用where子句替代,有的不行,一般常有exists, in 等关键字,这里注意,子查询一定要在运算符的后面
如:
select *
from ...
where xxx = (
select *
.......
);
嵌套查询分为1.子查询完成后结果返回到父查询中,父查询继续执行.和2.父查询查一条记录后在子查询中继续查,这种效率低,一般是父子查询中用的相同的一个表.
举个例子:
四.范式
各个范式的严格定义这里不做介绍,只列出自己的理解
1nf,关系中每个属性都不可分,都是原子的
2nf,每一个非主属性都完全依赖与主属性,即不存在部分函数依赖
3nf,不存在非主属性对码传递函数依赖
bcnf,每一个决定因素都含有码
五.闭包X+, F+
(1)对于某个属性x的闭包算法:
1.令X0 = X
在函数依赖集F中找到箭头左边是X0子集的函数依赖,并把这些函数依赖右边并如X0中
2.判断新的Xi+1是否与Xi相等
若不相等,则判断Xi+1目前是否包含属性集中的所有属性,若全部属性都已经包含则退出,否则继续
若相等,则退出
(2)F+
1.找到所有属性的各种组合,包括空集
2.分别以各种组合为左部依据armstrong公式推导
六.最小依赖集(不唯一)
1.将函数依赖集F中的函数依赖的右边化为单一属性
2.去掉F中的所有函数依赖左边的冗余属性
3.去掉F中的所有冗余的函数依赖
例:R<U,F> , U={A,B,C,D}, F={A->BD, AB->C, C->D}
1.把右边属性化为单一属性
F={A->B, A->D, AB->C, C->D}
2.去掉左边冗余属性
A+ = {A,B,C,D}
B+ = {B}
所以B为冗余属性
所以F={A->B, A->D, A->C, C->D}
3.去掉冗余函数依赖
首先判断函数依赖左边相同属性多的函数依赖进行判断,找是否有某个函数依赖可以推出其他函数依赖
A->D冗余
所以F={A->B, A->C, C->D}
七.模式分解
1.检验无损连接性
R<U,F>,U={A,B,C,D}, F={…},p={R1,R1…}
初始化表
A | B | C | D | |
---|---|---|---|---|
R1 | ||||
R2 | ||||
… |
若该列的属性存在与该分解中,就填ai, i 为列号,否则填bij, i为行号,j列号
按照函数依赖更新各个行,判断是否有一个行全是a,有则满足无损连接,否则反之
2.转化为3NF的保持函数依赖分解
1.最小化处理F
2.把F中所有函数依赖左右都未出现过的属性构成一个关系模式
3.F中X->A,构成关系模式XA,若有X->A1, X->A2,…X->An,化为XA1A2…An
4.若分解后的关系Ri的属性集Ui,包含于Rj的属性集Uj中则去掉关系Ri
不想敲了,上照片吧......
八.E-R图(数据库设计)
对于一段话,找到所有实体,找到实体对应的属性,属性数量不少于两个,然后按照联系的类型去掉一些多余的属性.为什么会有多余的属性呢?举个例子,因为对于1:n的联系,n端的实体要包含1端的码和联系的属性,但是在er图中,这些属性不是n端实体的,不需画出来.
对于联系的关系模式设计
1:1,把联系的属性和任意一端的码写在另外一端
1:n,把联系的属性和1端的码写在n端
m:n,单独作为一个模式,再加入两端的主码