第一章 数据库概论
1.在数据库管理技术的发展过程中,数据库独立性最高的是“数据库系统”阶段
2.三大经典的数据结构模型是“关系,层次和网状模型”
3.单个用户使用的数据视图的描述,称为“外模式”,它是用户与DBS的接口
4.DB中,数据的逻辑独立性是指“概念模式改变,外模式与应用程序不变”
5.通过指针链表来表示实体间联系的模型是“网状和层次模型”
6.DB的体系结构分成三层,分别是“逻辑模式,内模式,外模式”
7.DBMS的主要功能有“数据库定义功能,数据库的操纵功能和数据库的运行管理”,DB维护和组织存储管理及数据通信接口等
8.组成数据模型的三大要素是“数据结构,数据操作,数据完整性约束规则”
9.DBMS包括的主要程序“数据库定义语言及编译处理程序,数据操纵语言及编译程序,数据库运行控制程序,实时维护管理程序”
第二章 关系数据库
1.在关系模式中,“关系的主关键字的值不能为空”
2.关系代数的物种基本操作为“并,差,笛卡尔积,投影和选择”
3.设关系R(A,B,C)和S(B,C,D),则“可以有R连接S,R与S的笛卡尔积,但是R不可以并S,因为属性数目不同”
4.在关系代数中,对一个关系作投影操作后,新关系的元祖个数“小于或等于”原来的关系的元祖个数
5.当属性“年龄”值为1000时,该数据受到了“用户定义完整性”破坏
实体完整性:主关键字不能取空值 用户完定义完整性:取值范围 参照完整性:不引用不存在的实体
6.关系的元数指”属性的个数“,关系的基数指”元组的个数“,能唯一标识元组的属性集,而无多余属性,该属性集称为”候选关键字“
7.关系模型的三类完整性规则包括:”实体完整性,参照完整性,用户定义完整性“
8.在关系代数的运算中,专门的关系代数运算有:”选择(σ),投影(Π)连接(|x|)除(÷)“
9.θ连接操作是由关系代数的”选择和笛卡尔积“操作组合而成的
10.关系代数是用代数对关系的运算来表达查询的,而关系演算是用”谓词形式“表达查询的,它们分为”元组关系演算和域关系演算“两种
计算题举例1:
已知关系R,W,D如图所示:
R:
P |
Q |
T |
Y |
2 |
b |
c |
d |
9 |
a |
e |
f |
2 |
b |
e |
f |
9 |
a |
d |
e |
7 |
g |
e |
f |
7 |
g |
c |
d |
W:
解答: 注意:没有相同的元组:
解答: 要求R中 P列的元素大于5且T列中的元素等于e:
解答:连接R与W,要求列相同才可以连接,结果如下
P |
Q |
T |
Y |
B |
2 |
b |
c |
d |
m |
2 |
b |
c |
d |
n |
7 |
g |
c |
d |
m |
7 |
g |
c |
d |
n |
(4)R4=Π[2],[1],[6](σ[3]=[5](RxD))
解答:R与D达卡尔积计算后: 筛选 出 第二列,第一列和第六列 ,并且第三列等于第五列
P |
Q |
TR |
YR |
TD |
YD |
2 |
b |
c |
d |
c |
d |
2 |
b |
c |
d |
e |
f |
9 |
a |
e |
f |
c |
d |
9 |
a |
e |
f |
e |
f |
2 |
b |
e |
f |
c |
d |
2 |
b |
e |
f |
e |
f |
9 |
a |
d |
e |
c |
d |
9 |
a |
d |
e |
c |
f |
7 |
g |
e |
f |
c |
d |
7 |
g |
e |
f |
e |
f |
7 |
g |
c |
d |
c |
d |
7 |
g |
c |
d |
e |
f |
由题目条件:
P |
Q |
Y |
2 |
b |
d |
9 |
a |
f |
2 |
b |
f |
7 |
g |
d |
7 |
g |
f |
(5)R5=R/D
首先总结一下关系除法的计算方法:
如有R,S如下:
R:
A |
B |
C |
D |
2 |
1 |
a |
c |
2 |
2 |
a |
d |
3 |
2 |
b |
d |
3 |
2 |
b |
c |
2 |
1 |
b |
d |
S:
上面颜色已标出,S中的CD去R中对应的CD中找,找到相同的行,此时可以看到有3行相同的,分别是 第一行,第三行,第五行,
然后可以看到,CD中的 a,c和b,d列有两个相同的AB列,2,1,而 CD中对应的b,d却只有3,2,所以所除的结果是:
由以上方法,可以得第五题的解是:
计算题举例2:
设教学数据库由三个关系: S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
使用关系代数式表达下列查询:
(1)查找学号为s3的学生所学的课程名和任课教师名;
解答:πcname,teacher(σsname=‘s3‘(s|x|c))
(2)查找姓名为WANG学生不学的课程的课程号
解答:πc#(c)-πc#(σsname=’WANG‘,(s|x|c))
(3)查找女同学选修的课程名和任课教师名
解答:πsname,cname,teacher(σsex=’女‘,c#(c)=c#(sc),s#(s)=s#(sc),(s|x|c))
第三章:关系DB的标准语言SQL
1.传统的关系模型中的术语与SQL中的术语存在如下对应关系,关系模式在SQL中称为”基本表“,存储模式称为”存储文件“,子模式称为”视图“
2.视图是一个虚表,它是一个从”一个或几个基本表中选定某些记录或列“中导出的表
3.Select语句中,”where“子句用于选择满足给定条件的元组,使用”Group By“子句可按指定的列的值分组,同时使用”HAVING“子句提取满足条件的元组
4.SQL语言的数据定义功能包括”定义基本表,定义视图和定义索引“
5.SQL语言有两种使用方式,分别是”独立的交互使用方式和嵌入到高级语言方式“
计算题举例:
已知DBS中包含了三个基本表goods(G#,gname,price,type,fact)其中商品表中,G#,gname,商品名,price:单价,type:型号,fact:制造商,商场基本表:
shops(s#,sname,addr,manag)其中分别为:商场号,商场名,地址,经理名,基本销售表:SALES(S#,G#,QTY)QTY为数量
1.试用SQL语句完成下列查询
(1)查询所有电视机的生产厂商,型号,单价
select fact,type,price from goods where gname=‘电视机‘;
(2)查询同时生产电视机和电冰箱的制造商
select fact from goods where goods.gname=‘电冰箱‘ and goods.gname=‘电视机‘
(3)查询”吉利“商场所销售的各种商品的商品号和数量
select g#,qty from sales where s# in(select s# from shops where sname=‘吉利‘);
(4)查询销售量最高的商场号和所销售的商品号
select sales.s#,g# from sales where sales.qty=(select max(qty) from sales);
2.试用SQL对基本表做创建和更新操作
(1)创建基本表Goods(类型,长度自定)
create table goods(g# in not null indentity(1,1) primary key,
gname varchar(20) not null,
price numeric(18,0),
fact varchar(20) not null);
(2)将华南厂所有的商品名称,型号和单价插到一个已存在的基本表A(gn,gtype,price)中
insert into A (gn,gtype,price) select gname,type,price from goods where gname=‘华南厂‘
(3)将总销量低于1000的所有商品的价格降低10%
update goods set price=price*0.9 where g# in(select g# from (select g#,sum(qty) from sales group by g# having sum(qty)<1000))
第四章 关系数据库设计理论
1.当B属性依赖于A属性时,属性A与B的联系类型是 : ”多对一或一对一“
2.关系DB规范化是为了解决关系DB中”数据冗余,更新异常“问题而引入的
3.将一个关系模式规分解成多个关系模式时,为了保持原模式所满足的特性,要求分解具有”无损连接性和保持函数依赖性“
4.已知关系如下图所示:
R:
A |
D |
E |
a1 |
d1 |
e2 |
a2 |
d6 |
e2 |
a3 |
d4 |
e3 |
a4 |
d4 |
e4 |
(1) R中的函数依赖是否成立 :
1).A->D (成立)
2)AD->E( 成立)
3)DE->A(成立)
(2)R的候选关键字为 A,DE
这里复习下候选关键字的求法:
L,R,LR类属性, L累属性都是候选关键字,LR类属性中,可以多个组合,如果能够决定全部,则是候选关键字
(3)R属于"BCNF"范式
"左部决定因素都是R的超关键字"
解答题举例1:
指出下列关系模式最高是第几范式?并说明理由
(1)R(X,Y,Z),F={XY->Z}
解答:
考察F,X,Y是L类属性,(XY+)=XYZ,所以 XY是R的唯一Key,在F中只有一个FD,且左部包含Key,所以是BCNF.
(2)R(X,Y,Z),F={Y->Z,XZ->Y}
解答:
L类属性: X
LR类属性:Y,Z
由于 X+=X, (XY+)=XYZ
即XY是R的一个Key
XZ是R的另一个Key,
所以X,Y,Z都是主属性,所以∈3NF
解答题举例2:
设关系R如下:
课程名 |
教师名 |
教师地址 |
C1 |
马千里 |
D1 |
C2 |
于得水 |
D1 |
C3 |
余块 |
D2 |
C4 |
于得水 |
D1 |
请问:1)R为第几范式,为什么?
解答:
由表:1.课程名->教师名 ,2. 课程名->教师地址 ,3. 教师名->教师地址,由1,2,R的key :课程名
非主属性对单主属性不存在依赖
又因为教师名 不决定课程名,所以 课程名部分决定教师地址 所以R∈3NF
(2)是否存在删除异常?若存在,则说明在什么情况下发生?
存在,当删除教师,教师对应的课程也将被删除,存在删除异常
课程名 |
教师名 |
C1 |
马千里 |
C2 |
于得水 |
C3 |
余块 |
C4 |
于得水 |
教师名 |
教师地址 |
马千里 |
D1 |
于得水 |
D1 |
余块 |
D2 |
于得水 |
D1 |
将R分解为如上两个表即可解决问题
解答题举例3
设有关系模式R(U,F1),其中,U={E,F,G,H}
F1={E->G,G->E,F->EG,H->EG,FH->E}
(1)求F的最小依赖集
解答:
1).单一化: F1={E->G,G->E,F->E,F->G,H->E,H->G,FH->E}
2).去掉多余属性
考察FH->E,F+=FEG,H多余,即F->E
3).去掉多余FD,
F->E由E->G,F->G推得多余,
H->E由H->G,G-E推得多余
所以F‘={E->G,G->E,F->G,H-G}
(2)求R的候选关键字
解答:
L:H,F 所以(FH+)=EGFH
(3)将R分解成满足3NF,且具有无损连接性,保持函数依赖
ρ1={(EG),(FG),(HG)}
判断ρ1是否具有无损连接性,使用判定表,判定出有损,
ρ2=ρ1∪{FH}
={(EG),(FG),(HG),(FH)}
下面总结下无损连接的判定:
步骤:
设有关系模式R(A1,A2,A3,.....An) 和 FD集, 及R的一个分解 ρ={R1,R2,...Rk}
a.构造一张k行n列的判定表
每一列对应一个属性Ai(1<=j<=n),每一行对应一个分解的模式Ri(1<=i<=k);若Aj∈Ri,则在第i行与第j列交叉处填入符号aj,否则填入bij
b.反复利用F中的每个FD,修改表中元素,知道不能修改为止
c.如果发现表中某一行变成了a1,a2,.....ak.则是无损分解
否则是有损分解
举例:
无损分解判定法:
设有关系模式R(A,B,C,D),R被分解成ρ={AB,BC,CD} 若R上成立的FD集F1={B->A,C->D} 那么ρ相对F1是否具有无损分解?
ρ的初始判定表:
Ri |
A |
B |
C |
D |
AB(分解模式) |
a1(A∈AB所以是a1) |
a2 |
b13 |
b14 |
BC(分解模式) |
b21(A?BC所以是b21) |
a2 |
a3 |
b24 |
CD(分解模式) |
b31(A?CD所以是b32) |
b41 |
a3 |
a4 |
B,C,D列中同理
又B决定A, C决定D,所以需要将 A中的 b21修改为 a2以与B保持一致,其他同理可得 (颜色已标出)
改完后:
Ri |
A |
B |
C |
D |
AB(分解模式) |
a1 |
a2 |
b13 |
b14 |
BC(分解模式) |
a1 |
a2 |
a3 |
a4 |
CD(分解模式) |
b31 |
b41 |
a3 |
a4 |
发现: 第二行中 有完整的 a1,a2,a3,a4 所以说是无损分解!
数据库系统原理及其应用总结---ShinePans,古老的榕树,5-wow.com