数据库系统原理期末复习
这是本人整理的数据库系统原理的复习资料,按照四个课程目标所划的知识点进行复习,时间充裕的同学可对照文末各章复习知识点查漏补缺。
一、课程目标1:数据库基础知识应用 20分
数据库的完整性(主键、外键)
一、设有3个关系:
S(S#,SNAME,SEX,AGE,sdept)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
用数据定义语言DDL定义上述三个表,请为每个属性定义适当的数据类型,宽度(和精度),每个表上的主键、外键以及恰当的数据完整性约束。(12.0分)
⑴、创建学生表s(4分)
create table s(
S# char(10) primary key,
sname varchar(8) not null,
sex char(2),
age int
sdept varchar(30));
⑵、创建课程表C (4分)
create table C(
C# char(4) primary key,
Cname varchar(20) not null,
teacher varchar(8) not null);
⑶、创建选课表sc (4分)
create table sc(
S# char(10),
C# char(4),
Grade int,
primary key(s#,c#),
foreign key s# references s(s#),
foreign key c# references c(c#));
关系代数的应用(选择、投影、连接)
给定关系R和S,如下图所示:
R
A | B | C | D |
---|---|---|---|
A1 | B1 | C1 | D1 |
A1 | B1 | C2 | D2 |
A1 | B1 | C3 | D3 |
A2 | B2 | C1 | D1 |
A2 | B2 | C2 | D2 |
A3 | B3 | C1 | D1 |
S
C | D | E |
---|---|---|
C1 | D1 | E1 |
C2 | D2 | E2 |
试计算下列结果(1)~(6)
(1)π3,4(R)∪π1,2(S)
分别对关系R、S的属性列C、D做投影。
π3,4(R):
C | D |
---|---|
C1 | D1 |
C2 | D2 |
C3 | D3 |
π1,2(S)为:
C | D |
---|---|
C1 | D1 |
C2 | D2 |
所以π3,4(R)∪π1,2(S)为:
C | D |
---|---|
C1 | D1 |
C2 | D2 |
C3 | D3 |
2)π3,4(R)-π1,2(S)
(4.0分)
正确答案:
C | D |
---|---|
C3 | D3 |
(3)σA=‘A2’(R)
(4.0分)
正确答案:
A | B | C | D |
---|---|---|---|
A2 | B2 | C1 | D1 |
A2 | B2 | C2 | D2 |
(4)R∞S,其中c为(R.C=S.C∧R.D=S.D)(4.0分)
正确答案:
④、第一步先做R╳S,为
A | B | R.C | R.D | S.C | S.D | E |
---|---|---|---|---|---|---|
A1 | B1 | C1 | D1 | C1 | D1 | E1 |
A1 | B1 | C1 | D1 | C2 | D2 | E2 |
A1 | B1 | C2 | D2 | C1 | D1 | E1 |
A1 | B1 | C2 | D2 | C2 | D2 | E2 |
A1 | B1 | C3 | D3 | C1 | D1 | E1 |
A1 | B1 | C3 | D3 | C2 | D2 | E2 |
A2 | B2 | C1 | D1 | C1 | D1 | E1 |
A2 | B2 | C1 | D1 | C2 | D2 | E2 |
A2 | B2 | C2 | D2 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | C2 | D2 | E2 |
A3 | B3 | C1 | D1 | C1 | D1 | E1 |
A3 | B3 | C1 | D1 | C2 | D2 | E2 |
第二步找出满足条件(R.C=S.A)∧(R.D=S.B)的元组,为
A | B | R.C | R.D | S.C | S.D | E |
---|---|---|---|---|---|---|
A1 | B1 | C1 | D1 | C1 | D1 | E1 |
A1 | B1 | C2 | D2 | C2 | D2 | E2 |
A2 | B2 | C1 | D1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | C2 | D2 | E2 |
A3 | B3 | C1 | D1 | C1 | D1 | E1 |
(5)R÷S
(4.0分)
正确答案:
第一步找出R与S相同的属性列,即C列和D列
第二步找出R中剩余两列A和B的象集,即:
{A1,B1}的象集为{C1,D1}、{C2,D2}、{C3,D3}
{A2,B2}的象集为{C1,D1}、{C2,D2}
{A3,B3}的象集为{C1,D1}
第三步已知关系S中C列和D列包含的元组为{
{C1,D1},{C2,D2}},而由第二步可知,{A1,B1}和{A2,B2}的象集均包含{
{C1,D1},{C2,D2}}
所以,R÷S为
A | B |
---|---|
A1 | B1 |
A2 | B2 |
(6)(π1,2(R)╳π1,2(S))-R
(4.0分)
正确答案:
π1,2(R)为:
A | B |
---|---|
A1 | B1 |
A2 | B2 |
A3 | B3 |
π1,2(S)为:
C | D |
---|---|
C1 | D1 |
C2 | D2 |
则π1,2(R)╳π1,2(S)为:
R.A | R.B | S.C | S.D |
---|---|---|---|
A1 | B1 | C1 | D1 |
A1 | B1 | C2 | D2 |
A2 | B2 | C1 | D1 |
A2 | B2 | C2 | D2 |
A3 | B3 | C1 | D1 |
A3 | B3 | C2 | D2 |
所以(π1,2(R)╳π1,2(S))-R 的结果为:
R.A | R.B | S.C | S.D |
---|---|---|---|
A3 | B3 | C2 | D2 |
设有3个关系:
S(S#,SNAME,SEX,AGE)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
试用关系代数表达式表示下列查询语句:(1)~(8)小题
(1)检索LIU老师所授课程的课程号和课程名;
(4.0分)
正确答案:
①、πC#,CNAME(σTEACHER=‘liu’(C))
(2)检索年龄大于23的男同学的学号和姓名;
(4.0分)
正确答案:
②、πS#,SNAME(σSEX='男’∧AGE>23(S))
(3)检索学号为S3的学生所学课程的课程名与任课老师;
(4.0分)
正确答案:
③、πCNAME,TEACHER(σS#=‘S3’(SC)∞C)
(4)检索至少选修LIU 老师所授课程中一门课程的女学生的姓名;
(4.0分)
正确答案:
④、πSNAME(σTEACHER=‘lIU’ ∧SEX=‘女’(S∞SC∞C))
(5)检索WANG同学不学课程的课程号;
(4.0分)
正确答案:
⑤、πC#(C)-πC#(σSNAME=‘WANG’(S∞SC))
(6)检索至少选修2门课的学生的学号;
(4.0分)
正确答案:
⑥、πS#(σ1=4∧2≠5(SC ╳SC))
(7)检索全部学生都选修的课程的课程号和课程名;
(4.0分)
正确答案:
⑦、πC#,CNAME((πC#, S#(SC)÷πS#(S)) ∞C)
(8)检索选修课程包含LIU老师所授全部课程的学生的学号;
(4.0分)
正确答案:
⑧、πS#,C#(SC)÷πC#(σTEACHER='LIU’(C))
(9)检索选修全部课程的学生学号
(4.0分)
正确答案:
⑨、πs#, C#(SC)÷πc#(C))
索引(聚簇索引、普通索引、唯一索引)详细讲解
2、为什么要对数据文件建立索引?
答:最明显的原因是速度。没有索引时,DBMS通过表扫描方式逐个读取指定表中的数据记录来访问,这样的查找方式就好像在图书馆里查找一本书时,将图书馆中的所有书都找一遍,这样做的效率毫无疑问是非常低的。由于索引表是排序的,可以采取类似二分查找的快速定位算法,在实际应用中,索引表还可以驻留在主存储器中,进一步提高查找的访问速度。
3、简述聚集索引和非聚集索引的区别。
答:汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
4、为什么一个数据文件只能有一个聚集索引?
答:由于一个数据表只能有一种实际的存储顺序,因此在一个数据表中只能建立一个聚集索引。
谁可以建立索引
数据库管理员 或 表的属主(即建立表的人)