一、填空题
1.关系数据模型中的关系可用二维表来表示,表中的一行对应关系的一个__元组_____,表中的一列对应关系的一个__属性______。
2.在关系代数运算中,使用 选择 运算可从关系中得到满足条件的元组;如果只对关系中的某些属性感兴趣,则可用关系代数的__投影___运算选择这些属性。
3.设关系R和S分别有m和n个元组,k1和k2个属性,有k3个相同的属性,则R×S的元组个数是_m×n____,属性的个数是_k1+k2___;R⋈S的属性个数是 K1+K2-K3___。
4.在关系A(S,SN,D)和B(D,CN,NM)中,S是A的主键,A中的属性D与B中的主键D相对应,则D在A中称为_ 外键_______。
5.关系数据模型的实体完整性规则要求,关系的主属性 不能为空 。
6.有关系:教学(学号,教工号,课程号)。假定每个学生可以选修多门课程,每门课程可以由多名学生来选修,每个老师只能讲授一门课程,每门课程可以由多个老师来讲授,那么该关系的主键是 (学号,教工号) 或 (学号,课程号)___。
7.有如下关系:学生(学号,姓名,性别,专业号,年龄),将属性年龄的取值范围定义在18~30之间为___用户定义_____完整性约束。
8.关系模型中可以有三类完整性约束:其中___实体___完整性和___参照____完整性是关系模型必须满足的完整性约束条件,应该由RDBMS自动支持。
9.关系代数运算中的5种基本的操作包括:_并__、差、笛卡尔积、投影和选择。
10.关系操作的特点是__集合____操作。
二、选择题
1.在关系代数的专门关系运算中,从表中取出满足条件的列的操作称为__B____。
A.选择 B.投影 C.连接 D.扫描
2.进行自然连接运算的两个关系必须具有 B_______。
A.相同属性个数 B.公共属性
C.相同关系名 D.相同关键字
3.关系演算是用__A_____来表达查询要求的方式。
A.谓词 B.关系的运算 C.元组 D.域
4.在关系代数中,对一个关系做投影操作后,新关系的元组个数__B_____原来关系的元组个数。
A.小于 B.小于或等于 C.等于 D.大于
5.在关系数据库中,表与表之间的联系是通过定义___B____实现的。
A.实体完整性 B.参照完整性
C.用户自定义的完整性 D.值域
6.关系模型中,一个候选码 _C_____。
A.可由多个任意属性组成
B.至少由一个属性组成
C.可由一个或多个其值能惟一标识该关系模式中任何元组的属性组成
D.必须由多个属性组成
7.集合R与S的交可以用关系代数的基本运算表示为__A____。
A.R-(R-S) B.R+(R-S)
C.R-(S-R) D.S-(R-S)
8.下列关系代数的操作中,不是基本运算的是__A____。
A.交 B.并
C.笛卡尔积 D.投影
9.以下关于关系性质的说法中,错误的是___B____。
A.关系中任意两行的值不能完全相同 B.关系中任意两列的值不能完全相同
C.关系中任意两行可以交换顺序 D.关系中任意两列可以交换顺序
10.在关系数据库中,实现表中任意两行不能相同的约束是依据__C____。
A.外码 B.属性 C.主键 D.列
11.以下关于外键和相应的主键之间的关系,正确的是__A_____。
A.外键并不一定要与相应的主键同名
B.外键一定要与相应的主键同名
C.外键一定要与相应的主键同名而且惟一
D.外键一定要与相应的主键同名,但并不一定惟一
12.关系中的主关键字不允许取空值是符合__A____约束规则。
A.实体完整性 B.参照完整性 C.用户定义的完整性 D.数据完整性
13.如果关系R中有4个属性和3个元组,关系S中有3个属性和5个元组,则R×S的属性个数和元组个数分别是___B____。
A.7和8 B.7和15 C.12和8 D.12和15
14.关系数据模型上的关系运算分为__B______。
A.关系代数和集合运算 B.关系代数和关系演算
C.关系演算和谓词演算 D.关系代数和谓词演算
15.在学生表(学号,姓名,性别)中,规定学号值域是8个数字组成的字符串,其规则属于_ C_____。
A.实现完整性约束 B.参照完整性约束
C.用户自定义完整性约束 D.关键字完整性约束
16.能够把关系R和S进行自然连接时舍弃的元组放到结果关系中的操作是____D____。
A.左外连接 B.右外连接 C.外部并 D.外连接
17.五种基本关系代数运算是_ A_____。
A.∪,-,×,π和σ B.∪,-,⋈,π和σ
C.∪,∩,×,π和σ D.∪,∩,⋈,π和σ
18.设有关系模式EMP(职工号,姓名,年龄,技能),假设职工号惟一,每个职工有多项技能,则EMP表的主键是_ D_____。
A.职工号 B.姓名,技能 C.技能 D.职工号,技能
三、简答题
1.名词解释:
属性,域,元组,候选键,主键,外键。
2.试阐述关系模型的3个组成部分。
3.试阐述关系模型的完整性规则。在参照完整性中,为什么外键属性的值也可以为空?什么情况下不可以为空?
答:外键不是候选键,是可以为空的,参照完整性只是要求当其有值时,其值必须是相应主键的某个值。但当外键属性是主属性时,即其是构成候选键的属性时,根据实体完整性,其值是不允许为空的。
4.关系代数的基本运算有哪些?如何用这些基本运算来表示其他运算?
答:关系代数运算中的5种基本的操作包括:并、差、笛卡尔积、投影和选择。
交: R∩S = R—(R—S) R∩S = S—(S—R)
连接:πK1+K2-K3σR.K3=S.K3 (RxS ) 关系R和S分别有k1和k2个属性,有k3个相同的属性
除:R÷S=πx(R)-πx (( πx (R)x S)-R)
5.试阐述关系的笛卡尔积、等值连接和自然连接的区别和联系。
6.假设R(a,b)和S(c,d),试把如下元组演算表达式用关系代数表达式表示:
{ t | R(t)∧($u)(S(u)∧u[1]≠t[2])}
答:πa,bσR.b=S.c (RxS )
7.关系R和S的半连接(semijoin)写作R∝S,它表示由R中的满足如下条件的元组t组成的集合:t至少跟S中的一个元组在R和S的公共属性上相同。用三种不同的关系代数表达式给出R∝S的等价表示。
答:关系R和S分别有k1和k2个属性,有k3个相同的属性
πK1σR.K3=S.K3 (RxS )
πK1R⋈ R.K3=S.K3S
πK1R⋈S
8.设有关系R、S,如图3-8。求πc(S)、σB<‘c’ (R)、σA=C (R×S)、R⋈S、R⋈R.B<S.BS
关系R
|
关系S
|
图3-8 关系R和S的模式及实例
答:注意选择和投影后剩余元组不能相同。
四、查询实现题
1.设有学生选课数据库,包括S、C和SC三个关系模式:
S(SNO,SN,SD,SB,SEX);
C(CNO,CN,PCNO,TN);
SC(SNO,CNO,GRADE);
学生表S包含学号(SNO)、学生姓名(SN)、所在系(SD)、出生年月(SB)、性别(SEX)等属性;
课程表C包含课程号(CNO)、课程名(CN)、先修课程号(PCNO)、主讲教师姓名(TN)等属性;
选课表SC包含学号(SNO)、课程号(CNO)、成绩(GRADE)等属性。
试用关系代数、元组演算完成如下查询:
(1)检索以“C2”课程作为先修课程的课程号;
∏ CNO(σPNO =‘C2’(C))
{t(1)|($v)( C(v)∧v[3]= ‘C2’ ∧t[1]=v[1])}
(2)检索选修课程名为“Math”的学生学号与姓名;
∏ SNO,SN (σCN=‘Math’(S⋈SC⋈C))
{t(2)|($u)($v)($w)(S(u)∧SC(v)∧C(w)∧u[1]=v[1]∧v[2]=w[1]∧w[2]=’Math’∧t[1]=u[1] ∧t[2]=u[2])}
(3)检索选修课程号为“C2”或“C4”课程的学生学号与成绩;
∏ SNO, GRADE (σCNO=‘C2’ ∨CNO=‘C4’(SC))
{t(2)|($v)(SC(v) ∧( v[2]=’C2’ ∨ v[2]=’C4’) ∧ t[1]=v[1]∧t[2]=v[3]}
(4)检索至少选修了课程号为“C2”和“C4”课程的学生姓名;
∏ SN ((∏ SNO (σ CNO=‘C2’(SC ) ) ∩ ∏ SNO (σ CNO=‘C4’(SC )))⋈S)
{t(1)|($u)($v)($w)(SC(u)∧SC(v)∧S(w)∧u[1]=w[1]∧v[1]=w[1]∧u[2]=’C2’∧v[2]=’C4’∧t[1]=w[2])}
(5)检索选修课程包括“李斯”老师所授课程之一的学生学号;
∏ SNO (∏ CNO(σTNO=’李斯’(C)) ⋈SC)
{t(1)|($u)($v) (SC(u)∧C(v)∧u[2]= v[1]∧v[4]=’李斯’∧t[1]= u[1])}
(6)检索全部学生都选修的课程的课程号和课程名;
∏ CNO,CN ((∏SNO,CNO(SC ) ÷ ∏ SNO(S) )⋈C)
{t(2)|("u)($v)($w)(S(u)∧C(v)∧SC(w)∧u[1]=w[1]∧v[1]=w[2]∧t[1]=v[1]∧t[2]=v[2])}
(7)检索计算机系学生都学习过的课程的课程号;
∏ SNO,CNO (σSD=“计算机”(S)⋈ SC ) ÷ ∏ SNO(σSD=“计算机”(S))
∏ SNO,CNO (SC ) ÷ ∏ SNO(σSD=“计算机”(S))
{ t(1)|($u)(SC(u)∧("v)(S(v)∧(v[3]=‘计算机系’→($w)(SC(w)∧w[1]=v[1] ∧ w[2]=u[2])))∧t[1]=u[2])}
{ t(1)|($u)(C(u)∧("v)(S(v)∧(v[3]=‘计算机系’→($w)(SC(w)∧w[1]=v[1] ∧ w[2]=u[2])))∧t[1]=u[2])}
(8)检索“张山”同学不学课程的课程号。
∏ CNO(C)- ∏ CNO( ∏ SNO(σSN=’张山’(S)) ⋈ SC)
{ t(1)|($u)( C(u)∧("v)( SC (v)∧(u[1]=v[2]→($w)(S(w)∧w[1]= v[1]∧W[2]≠’张山’)))∧t[1]=u[2]) }
{ t(1)|($u)( C(u)∧("v)( SC (v)∧(u[1]=v[2]→┐($w)(S(w)∧w[1]= v[1]∧W[2]=’张山’)))∧t[1]=u[2]) }
2.设有SPJ数据库,包括S、P、J和SPJ四个关系模式,数据库模式及实例值如图3-9所示。其中
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成;
零部件表P由零部件代码(PNO)、零部件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成;
供应情况表SPJ由供应商代码(SNO)、零部件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零部件给某项工程的数量为QTY。
试用关系代数、元组演算完成如下查询:
(1)检索上海厂商供应的所有零部件的号码;
∏PNO(σ city =’上海’ (S)⋈SPJ)
{t(1) | ($u) ($ v) (S(u) ∧ SPJ(v)∧u[4]=‘上海’∧ u[1]=v[1]∧ t[1]= v[2])}
(2)检索使用上海厂商供应的零部件的工程名称;
∏JNAME(σ city =’上海’ (S)⋈SPJ⋈ J)
{t(1) | ($u) ($ v)($ w) (S(u) ∧ SPJ(v)∧ J (w)∧u[4]=‘上海’∧ u[1]=v[1]∧ w[1]= v[3] ∧ t[1]= w[2])}
(3)检索供应工程J1零部件P1的供应商的号码;
∏sno(σJno =’J1’ ∧Pno =’P1’ (SPJ))
{t(1) | ($u)(SPJ(u)∧u[3]=‘J1’∧ u[2]=‘P1’∧ t[1]= u[1])}
(4)检索供应工程J1零部件为红色的供应商的号码;
∏sno(σJno =’J1’ ∧Color =’红色’ (SPJ ⋈P))
∏sno(σColor =’红色’ (P) ⋈(σJno =’J1’ (SPJ))
{t(1) | ($u) ($v) (SPJ(u)∧ P (v)∧ u[3]=‘J1’∧ u[2]=v[1] ∧v[3]= ’红色’ ∧ t[1]= u[1])}
(5)检索工程项目J2使用的各种零部件的名称及其数量;
∏PNAME ,QTY(σ JNO=’J2’ ( SPJ)) ⋈ P)
{t(2) | ($u) ($v) (SPJ(u)∧ P (v)∧u[3]=‘J2’∧ u[2]=v[1]∧ t[1]= v[2] ∧t[2]=u[4])}
(6)检索没有使用天津厂商供应的零部件的工程号码;
∏ Jno (J) - ∏Jno(∏Sno(σCITY =’天津’ ( S)) ⋈ SPJ))
{t(1) | ($u) (J (u)∧(" v) (SPJ(v)∧(u[1]=v[3]→($ w) (S (w)∧w[1] = v[1]∧W[4] ≠‘天津’)))∧t[1]= u[1])}
{t(1) | ($u) (J (u)∧(" v) (SPJ(v)∧(u[1]=v[3]→┐($ w) (S (w)∧w[1] = v[1]∧W[4] = ‘天津’)))∧t[1]= u[1])}
(7)检索没有使用天津供应商供应的红色零部件的工程号;
∏ Jno (J) - ∏Jno(σCITY =’天津’ ∧Color =’红色’( S ⋈ SPJ ⋈P))
∏ Jno (J) - ∏Jno(σCITY =’天津’ ( S) ⋈ SPJ⋈Color =’红色’(P))
{t(1) | ($u) (J (u)∧("v)( SPJ(v)∧(u[1]=v[3]→┐(($ w) (S (w) ∧w[1]= v[1]∧W[4] =‘天津’)∧($x)(P(x)∧x[1]=v(2)∧x[3]=’红色’))))∧t[1]= u[1])}
例:对于J表中的每一个JNO(比如J1)去判断SPJ表中所有JNO为J1的元组,是否不存在其SNO对应CITY是“天津”,而且PNO对应颜色是红色,由于存在(S1,P1,J1,200),所以J1不满足条件)。同理只有J2,J5满足条件。
{t(1) | ($u) (J (u)∧("v)( SPJ(v)∧(u[1]=v[3]→(($ w) (S (w) ∧w[1]= v[1]∧W[4] ≠‘天津’) ∨($x)(P(x)∧x[1]=v(2)∧x[3]≠’红色’))))∧t[1]= u[1])}
例:对于J表中的每一个JNO(比如J2)去判断SPJ表中所有JNO为J2的元组,是否存在SNO对应CITY 不是“天津”,或PNO对应颜色不是“红色”。虽然存在(S1,P2,J2,100)天津供应商, (S5,P6,J2,200)红色零件,但 J2满足条件。而对于J1,存在两个条件均不满足的元组,所以J1不满足条件。
{t(1) | ($x) (SPJ (x)∧┐(($u) ($v) ($ w) ((S (u) ∧SPJ(v) ∧P(w)∧u[4]= ‘天津’∧P[3]=’红色’ ∧u[1]= v[1] ∧v[2] =W[1] ∧x[3]=v(3) )))∧t[1]=x[3])}
对于没有使用任何零件的工程,不能在结果中得到,错误。
{t(1) | ($u) (J (u)∧("v)( SPJ(v)∧(u[1]=v[3]→($ w)($x)(S (w)∧P(x)∧w[1]= v[1]∧W[4] ≠‘天津’∧x[1]=v(2)∧x[3]≠’红色’ )))∧t[1]= u[1])} (有问题)
比如:由于存在(S1,P2,J2,100),所以J2不满足条件,错误。
(8)检索至少使用了供应商S1所供应的全部零部件的工程号Jno。
∏ Pno,Jno (SPJ )÷∏Pno(σSno =’S1’(SPJ))
注:检索出的工程使用的零件包括所有供应商所供应的、具有与S1所供应零件相同的零件。
∏ Sno,Pno,Jno (SPJ )÷∏Sno,Pno(σSno =’S1’(SPJ))
注:检索出的工程使用的零件包括由S1供应给其他工程的所有零件。
{t(1)|($u)(SPJ(u)∧("v)(SPJ(v)∧(v[1]=’S1’ →($w)(SPJ(w)∧w[2]=v[2]∧w[3]=u[3])))∧t[1]=u[3])}
{t(1)|($u) (SPJ(u)∧("v)(SPJ(v)∧(v[1]=’S1’ →($w)(SPJ(w)∧w[1]=v[1]∧w[2]=v[2]∧w[3]=u[3])))∧t[1]=u[3])}
或
{t(1)|($u)(J(u)∧("v)(SPJ(v)∧(v[1]=’S1’ →($w)(SPJ(w)∧w[2]=v[2]∧w[3]=u[1])))∧t[1]=u[1])}
{t(1)|($u) (J(u)∧("v)(SPJ(v)∧(v[1]=’S1’ →($w)(SPJ(w)∧w[1]=v[1]∧w[2]=v[2]∧w[3]=u[1])))∧t[1]=u[1])}
注:解答的结果中,如果S1没有对各工程提供任何零件,结果就是所有的工程号。