0


数据库系统原理与应用教程(014)—— 关系数据库练习题(一)

数据库系统原理与应用教程(014)—— 关系数据库练习题(一)

一、简答题

1、试述关系模型的三要素和关系操作语言的特点。

答案:

关系模型的三要素为数据结构、关系操作和完整性约束。在关系模型中,无论是实体集还是实体集之间的联系都是由关系表示的。

关系操作语言的特点:(1)关系操作的方式是一次一集合方式。(2)关系操作语言是高度非过程化的语言。

2、定义并解释下列术语,并说明它们之间的联系和区别。

(1)主码、候选码、外码

答案:

主码和候选码:若关系中的某一个属性(属性组),其值能唯一标识一个元组,则称该属性(或属性组)为候选码。当一个关系有多个候选码时,选定其中的一个候选码为主码。如果关系中只有一个候选码,这个唯一的候选码就是主码。

外码:设 F 是基本关系 R 的一个或一组属性,但不是关系 R 的主码(或候选码),如果 F 与基本关系 S 的主码 KS 相对应,则称 F 是基本关系 R 的外码。

(2)笛卡尔积、关系、元组、属性、域

答案:

笛卡尔积:给定一组域 D1,D2,…,Dn,则域 D1,D2,…,Dn 的笛卡尔积为:

D1×D2×…×Dn={(d1,d2,…,dn) | di ∈ Di,i=1,2,…,n}

关系:域的笛卡尔积所包含的元组是多个域中的元素任意组合得到的,因此有很多元组没有实际意义。从域的笛卡尔积中挑选中有意义的元组构成的集合称为关系。

元组:关系中的一行称为一个元组,组成元组的元素称为分量。

属性:关系中的一列称为一个属性。属性具有型和值,属性的型指属性名和取值范围等,属性的值指属性具体的取值。属性表示实体的特征。

域:域是一组具有相同数据类型的值集合。属性的取值范围称为域。

(3)关系、关系模式、关系数据库

答案:

关系:关系是一张二维表,是从域的笛卡尔积中挑选中有一的元组构成的集合。

关系模式:关系的描述称为关系模式。关系模式可以表示为:R(U,D,Dom,F),其中 R 是关系名,U 为关系包含的属性的集合,D 为属性组 U 中属性的域,Dom 为属性向域的映像的集合,F 为属性间数据依赖的集合。

关系数据库:基于关系模型的数据库称为关系数据库。在关系数据库中,实体与实体之间的联系都是用关系来表示的。其中,一个关系对应一个实体集,关系中的一行对应一个实体,关系中的一列对应实体的一个属性。

3、试述关系模型的完整性规则。在参照完整性中,为什么外码的值可以为空?什么情况下允许为空?

答案:

关系模型有三类完整性:实体完整性,参照完整性和用户自定义完整性。

实体完整性规则:若属性 A 是基本关系 R 的主属性,则属性 A 不能为空值。

参照完整性规则:若属性 F 是基本关系 R 的外码,它与基本关系 S 的主码 Ks 相对应,则对于 R 中每个元组在 F 上的值必须取空值,或者等于 S 中某个元组的主码值。当外码的值不清楚或不确定时,可以设为空值,此时参照关系中没有对应的记录与之匹配。

用户自定义完整性规则:用户自定义的完整性就是针对某一具体应用所定义的约束条件。

4、试述等值连接与自然连接的区别和联系。

答案:等值连接是从关系 R 和 S 的笛卡尔积中选取 R.A 和 S.B 属性值相等的元组。自然连接是一种特殊的等值连接,要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

5、举例说明参照完整性。

答案:

参照完整性是指参照关系中的外码要从被参照关系的主码中取值。例如,员工是参照关系,部门是被参照关系,部门号是部门表的主码,是员工关系的外码,则员工表的部门号要从部门表的部门号中去取,如下表所示。

部门表:
部门号部门名电话D01销售部3040111D02财务部3040222D03人事部3040333
员工表:
工号姓名性别电话部门E001王刚男3058444D01E002李艳艳女3069777D01E003张静静女3065123D01E004王涛男3086999D02E005张晓刚男3074666D02
6、说明视图与基本表的区别与联系

答案:

基本表是实际存放数据的表。视图表是从一个或几个基本表导出的表,是一个虚拟表。数据库中只存放视图的定义,而不存放视图对应的数据,数据存放在基本表中。视图定义好之后就可以像基本表一样使用,可以对视图进行增、删、改、查。也可以在一个视图之上再定义新的视图,对视图中的数据进行修改其实最终修改的是视图对应的基本表。反之,基本表中的数据发生变化,从视图中查询到的数据也会随之改变。

7、如果某关系的实例满足下列条件之一,要表示该实例,有多少种不同的方法(考虑元组的顺序和属性的顺序)。

(1)3 个属性,3 个元组

(2)4 个属性,5 个元组

(1)m 个属性,n 个元组

答案:

(1)3!× 3!= 36

(2)4!× 5!= 24×120 = 2880

(3)m!× n!

8、针对如下表所示的关系 R 和 S 写出 R ∪ S、R ∩ S 和 R - S。

关系 R:
tNOtNameTELCourse101王明62203546数据结构202张华62209876数据库303赵娟62208076高等数学
关系 S:
tNOtNameTELCourse101王明62203546数据结构102孙俪64309876操作系统103郭德纲63398076计算机网络
答案:

(1)R ∪ S
tNOtNameTELCourse101王明62203546数据结构102孙俪64309876操作系统103郭德纲63398076计算机网络202张华62209876数据库303赵娟62208076高等数学
(2)R ∩ S
tNOtNameTELCourse101王明62203546数据结构
(3)R - S
tNOtNameTELCourse202张华62209876数据库303赵娟62208076高等数学
9、设关系 R 和 S,其值如下表所示,求:

在这里插入图片描述

在这里插入图片描述

答案:

在这里插入图片描述

在这里插入图片描述

10、有如下关系:

学生(学号,姓名,年龄,所在系)

选课(课程号,课程名,先行课)

选课(学号,课程号,成绩)

用关系代数完成如下查询:

(1)求学过数据库课程的学生的学号和姓名。

(2)求学过数据库和数据结构的学生的学号和姓名。

(3)求没学过数据库课程的学生的学号。

(4)求学过数据库的先行课的学生的学号。

答案:
在这里插入图片描述

/*
create table stu(
    stu_id char(11) primary key,
    stu_name char(20),
    age int,
    dept char(20)
);
create table course(
    c_id char(5) primary key,
    c_name char(20),
    Advance_class char(20)
);
create table electives(
    stu_id char(11),
    c_id char(5),
    grade int
);
insert into stu values('20210224101','张宇',20,'管理系');
insert into stu values('20210224102','刘涛',21,'管理系');
insert into stu values('20210224103','刘蓓',20,'经济系');

insert into course values('C0001','高等数学',null);
insert into course values('C0002','计算机基础',null);
insert into course values('C0003','数据库','计算机基础');
insert into course values('C0004','数据结构','计算机基础');

insert into electives values('20210224101','C0001',80),('20210224101','C0002',85),('20210224101','C0003',84),('20210224101','C0004',92);
insert into electives values('20210224102','C0001',80),('20210224102','C0003',80),('20210224102','C0004',90);
insert into electives values('20210224103','C0002',78),('20210224103','C0001',79),('20210224103','C0004',91);
*/

mysql>select*from stu;+-------------+----------+------+-----------+| stu_id      | stu_name | age  | dept      |+-------------+----------+------+-----------+|20210224101| 张宇     |20| 管理系    ||20210224102| 刘涛     |21| 管理系    ||20210224103| 刘蓓     |20| 经济系    |+-------------+----------+------+-----------+3rowsinset(0.03 sec)

mysql>select*from course;+-------+-----------------+-----------------+| c_id  | c_name          | Advance_class   |+-------+-----------------+-----------------+| C0001 | 高等数学        |NULL|| C0002 | 计算机基础      |NULL|| C0003 | 数据库          | 计算机基础      || C0004 | 数据结构        | 计算机基础      |+-------+-----------------+-----------------+4rowsinset(0.00 sec)

mysql>select*from electives;+-------------+-------+-------+| stu_id      | c_id  | grade |+-------------+-------+-------+|20210224101| C0001 |80||20210224101| C0002 |85||20210224101| C0003 |84||20210224101| C0004 |92||20210224102| C0001 |80||20210224102| C0003 |80||20210224102| C0004 |90||20210224103| C0002 |78||20210224103| C0001 |79||20210224103| C0004 |91|+-------------+-------+-------+10rowsinset(0.00 sec)--(1)求学过数据库课程的学生的学号和姓名。select s.stu_id, stu_name
from stu s,course c,electives e
where s.stu_id = e.stu_id and c.c_id = e.c_id
      and c_name ='数据库';--查询结果如下
mysql>select s.stu_id, stu_name
    ->from stu s,course c,electives e
    ->where s.stu_id = e.stu_id and c.c_id = e.c_id
    ->and c_name ='数据库';+-------------+----------+| stu_id      | stu_name |+-------------+----------+|20210224101| 张宇     ||20210224102| 刘涛     ||20210224103| 刘蓓     |+-------------+----------+3rowsinset(0.06 sec)--(2)求学过数据库和数据结构的学生的学号和姓名。select s.stu_id, s.stu_name
from(select stu_id
      from electives
      where c_id =(select c_id from course where c_name ='数据库')) x,
      electives e, stu s
where x.stu_id = s.stu_id and x.stu_id = e.stu_id and 
      e.c_id =(select c_id from course where c_name ='数据结构');--查询结果如下
mysql> mysql>select s.stu_id, s.stu_name
    ->from(select stu_id
    ->from electives
    ->where c_id =(select c_id from course where c_name ='数据库')) x,->       electives e, stu s
    ->where x.stu_id = s.stu_id and x.stu_id = e.stu_id and->       e.c_id =(select c_id from course where c_name ='数据结构');+-------------+----------+| stu_id      | stu_name |+-------------+----------+|20210224101| 张宇     ||20210224102| 刘涛     |+-------------+----------+2rowsinset(0.00 sec)--(3)求没学过数据库课程的学生的学号。select stu_id 
from stu 
where stu_id notin(select e.stu_id
     from course c,electives e
     where c.c_id = e.c_id and c_name ='数据库');--查询结果如下
mysql>select stu_id 
    ->from stu 
    ->where stu_id notin->(select e.stu_id
    ->from course c,electives e
    ->where c.c_id = e.c_id and c_name ='数据库');
Empty set(0.07 sec)--(4)求学过数据库的先行课的学生的学号。select e.stu_id 
from electives e, course c 
where e.c_id = c.c_id and
      c_name =(select Advance_class from course where c_name ='数据库');--查询结果如下
mysql>select e.stu_id 
    ->from electives e, course c 
    ->where e.c_id = c.c_id and->       c_name =(select Advance_class from course where c_name ='数据库');+-------------+| stu_id      |+-------------+|20210224101||20210224103|+-------------+2rowsinset(0.00 sec)

11、设有一个 SPJ 数据库,包括 S、P、J、SPJ 四个关系:

S(SNO,SNAME,STATUS,CITY)–供应商表S,应商表代码SNO,应商表名称SNAME,应商表状态STATUS,应商表所在城市CITY

P(PNO,PNAME,COLOR,WEIGHT)–零件表P,零件代码PNO,零件名称PNAME,颜色COLOR,重量WEIGHT

J(JNO,JNAME,CITY)–工程项目表J,工程项目代码JNO,工程项目名称JNAME,工程项目所在城市CITY

SPJ(SNO,PNO,JNO,QTY)–供应情况表SPJ,供应商代码SNO,零件代码PNO,工程项目代码JNO,供应数量QTY,表示某供应商供应某种零件给某工程项目的数量。

请用关系代码表示如下查询:

(1)求供应工程 J1 零件的供应商号码 SNO

(2)求供应工程 J1 零件 P1 的供应商号码 SNO

(3)求供应工程 J1 零件为红色的供应商号码 SNO

(4)求没有使用天津供应商生产的红色零件的工程号

(5)求至少用了供应商 S1 所供应的全部零件的工程号

答案:

(1)πSNO(σJNO=‘J1’(SPJ))

(2)πSNO(σJNO=‘J1’ ∧ PNO=‘P1’(SPJ))

在这里插入图片描述

12、有以下三个关系:

S(S#,SNAME,AGE,SEX,NP)–S(学生),S#(学号),SNAME(姓名),AGE(年龄),SEX(性别),NP(籍贯)

C(C#,CNAME,TEACHER)–C(课程),C#(课程号),CNAME(课程名),TEACHER(主讲教师)

SC(S#,C#,GRADE)–SC(选修),S#(学号),C#(课程号),GRADE(成绩)

请用关系代数表示如下查询:

(1)查询年龄大于 21 岁的男生的学号(S#)和姓名(SNAME)。

(2)查询全部学生都选修的课程的课程号(C#)和课程名(CNAME)。

(3)查询籍贯为上海的学生的学号(S#)、姓名(SNAME)和选修的课程号(C#)。

(4)查询选修了全部课程的学生的姓名(SNAME)和年龄(AGE)。

答案:

在这里插入图片描述

13、某医院病房管理信息如下:

科室:科室名称,科室地址,科室电话

病房:病房号,床位号,所属科室名

医生:姓名,职称,所属科室名,年龄,工作证号

病人:病历号,姓名,性别,诊断,主管医生,病房号

其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。

请完成以下设计:

(1)设计系统的 E-R 图

(2)将该 E-R 图转换为关系模型

(3)指出每个关系的候选码

答案:

(1)E-R 图如下图所示:

在这里插入图片描述

(2)E-R 图对应的关系模型如下:

科室(科室名称,科室地址,科室电话)

病房(病房号,床位号,所属科室名)

医生(姓名,职称,所属科室名,年龄,工作证号)

病人(病历号,姓名,性别,诊断,主管医生,病房号)

(3)每个关系的候选码如下:

科室:科室名称

病房:病房号

医生:工作证号

病人:病历号


本文转载自: https://blog.csdn.net/weixin_44377973/article/details/125692814
版权归原作者 睿思达DBA_WGX 所有, 如有侵权,请联系我们删除。

“数据库系统原理与应用教程(014)—— 关系数据库练习题(一)”的评论:

还没有评论