数据库系统原理期末复习

数据库系统原理期末复习

这是本人整理的数据库系统原理的复习资料,按照四个课程目标所划的知识点进行复习,时间充裕的同学可对照文末各章复习知识点查漏补缺。

一、课程目标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、为什么一个数据文件只能有一个聚集索引?
答:由于一个数据表只能有一种实际的存储顺序,因此在一个数据表中只能建立一个聚集索引。

 谁可以建立索引
 数据库管理员 或 表的属主(即建立表的人)

  • 10
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值