数据库系统教程1-7章课后答案(施伯乐)(第二版)

更新时间:2023-03-11 15:02:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2.2 教材中习题2的解答

2.1名词解释

·关系模型:用二维表格表示实体集,外键和主键表示实体间联系的数据模型,称为关系模型。

·关系模式:是对关系的描述,包括模式名、诸属性名、值域名和模式的主键。 ·关系实例:关系模式具体的值,称为关系实例。

·属性:即字段或数据项,与二维表中的列对应。属性个数,称为元数(arity)。 ·域:属性的取值范围,称为域。

·元组:即记录,与二维表中的行对应。元组个数,称为基数(cardinality)。 ·超键:能惟一标识元组的属性或属性集,称为关系的超键。 ·候选键:不含有多余属性的超键,称为候选键。

·主键:正在使用的、用于标识元组的候选键,称为主键。

·外键:属性集F是模式S的主键,在模式R中也出现,那么称F是模式R的外键。 ·实体完整性规则:实体的主键值不允许是空值。

·参照完整性规则:依赖关系中的外键值或者为空值,或者是相应参照关系中某个主键码。

·过程性语言:编程时必须给出获得结果的操作步骤,即指出“干什么”及“怎么干”的语言。

·非过程性语言:编程时,只需指出需要什么信息,不必给出具体的操作步骤,即只要指出“干什么”,不必指出“怎么干”的语言。

·无限关系:指元组个数为无穷多个的关系。

·无穷验证:验证公式真假时需要进行无限次验证。 ? 2.2 在关系模型中,对关系作了哪些规范性限制? 答:对关系作了一下四个限制: 属性值不可分解;没有重复元组;没有行序;使用时有列序。

2.3 为什么关系中的元组没有先后顺序,且不允许有重复元组?

答:由于关系定义为元组的集合,而集合中的元素是没有顺序的,因此关系中的元组也就没有先后的顺序(对用户而言)。这样既能减少逻辑排序,又便于在关系数据库中引进集合论的理论。

每个关系模式都有一个主键,在关系中主键值是不允许重复的。如果关系中有重复元组,那么其主键值肯定相等,起不了惟一标识作用,因此关系中不允许有重复元组。

? 2.4 外键值何时允许空?何时不允许空?

答:在依赖表中,当外键是主键的组成部分时,外键值不允许空;否则外键值允许空。 2.5 笛卡儿积、等值联接、自然联接三者之间有什么区别?

答:笛卡尔积是一个基本操作,而等值联接和自然联接是组合操作。

设关系R的元数为r,元组个数为m;关系S的元数为s,元组个数为n。 那么,R×S的元数为r+s,元组个数为m×n;

R?S的元数也是r+s,但元组个数小于等于m×n;

iθj

R?S的元数小于等于r+s,元组个数也小于等于m×n;

2.6 设有关系R和S: R A B C 3 6 7 2 5 7 7 2 3 S A B C 3 4 5 7 2 3 (2003/9/21) (GJ-DA) (共2页) 目录--1 4 4 3

计算R∪S,R-S,R∩S,R×S,π3,2(S),σB<’5’(R),R 2<2 S, R S。 解: R∪S A B C R-S A B C 3 6 7 3 6 7 2 5 7 2 5 7 7 2 3 4 4 3 4 4 3 3 4 5

R×S R.A R.B R.C S.A S.B S.C 3 6 7 3 4 5 3 6 7 7 2 3 2 5 7 3 4 5 2 5 7 7 2 3 7 2 3 3 4 5 7 2 3 7 2 3 4 4 3 3 4 5 4 4 3 7 2 3

σ

B<’5’(R)

R∩S A B C

7 2 3

π

3,2(S)

5 3

C B 4 2

A B C 2 4

3 3

2<2

R?S

R.A R.B R.C S.A S.B S.C

2

3

3

4

5

7 4

7

R?S ? ? ? ? ?

A B C 7

2

3

2.7 设有关系R和S: R A B a b c b d e

S B b e b C c a d

? 计算R ? S,R ? S,σA=C(R×S),S ? R。

B

? 2.8 假设关系U和V分别有m个元组和n个元组,给出下列表达式中可能的最小和最大的元组数量:

? ? U∩V ? U∪V

? ? U?V

? σF(U)×V (F为某个条件)

? ? πL(U)-V (其中L为某属性集) ? 解:

? 操作 ? ? U∩V ? ? U∪V

? 最小元组数

? 0 ?max(m,n)

? 最大元组数 ?min(m,n) ?m+n

(2003/9/21) (GJ-DA) (共2页) 目录--2

? ? U?V ? ?σF(U)×V

? ?πL(U)-V

? 0 ? 0 ? 0

?m×n ?m×n ?m

2.9 如果R是二元关系,那么下列元组表达式的结果是什么?

{t|( ?u)(R(t) ∧R(u) ∧(t[1] ≠u[1]∨t[2] ≠u[2]))}

答:当R的元组数≥2时,R中每个元组都存在与之不相同的元组,因此表达式的结果为关系R; 当R的元组数为0或1时,表达式的结果为空关系。

2.10 假设R和S分别是三元和二元关系,试把表达式π1,5(σ2=4∨3=4(R×S))转换成 等价的:①汉语查询句子;②元组表达式;③域表达式。

解:? 在关系R和S的笛卡尔积中,选取第2个属性值与第4个属性值相等,或者第3个属性值与第4个属性值相等的那些元组,再取第1列和第5列组成新的关系。

? 与(R×S)等价的元组表达式是:

{ t | (?u) (?v) (R(u) ∧ S(v) ∧ t[1]=u[1] ∧ t[2]=u[2] ∧ t[3]=u[3] ∧ t[4]=v[1]∧

t[5]=v[2] )}

与σ2=4 ∨ 3=4(R×S)等价的元组表达式是:

{ t | (?u) (?v) (R(u) ∧ S(v) ∧ t[1]=u[1] ∧ t[2]=u[2] ∧ t[3]=u[3] ∧ t[4]=v[1]∧

t[5]=v[2] ∧ (t[2]=t[4] ∨ t[3]=t[4]))}

与π1,5(σ2=4 ∨ 3=4(R×S))等价的元组表达式是:

{ w | (?t) (?u) (?v) (R(u) ∧ S(v) ∧ t[1]=u[1] ∧ t[2]=u[2] ∧ t[3]=u[3] ∧t[4]=v[1]

∧ t[5]=v[2] ∧ (t[2]=t[4] ∨ t[3]=t[4]) ∧ w[1]=t[1] ∧w[2]=t[5])}

再对上述元组表达式化简(消去t)可得:

{ w | (?u) (?v) (R(u) ∧ S(v) ∧ (u[2]=v[1] ∨ u[3]=v[1]) ∧ w[1]=u[1] ∧

w[2]=v[2])}

在熟练后,可以直接写出上式。 ? 再转换成域表达式:

{ w1 w2 | (?u1) (?u2) (?u3) (?v1) (?v2) (R(u1u2u3) ∧ S(v1v2) ∧ (u2=v1 ∨ u3=v1) ∧

w1=u1 ∧ w2=v2)}

再化简(消去u1,v2)可得:

{ w1 w2 | (?u2) (?u3) (?v1) (R(w1u2u3) ∧ S(v1w2) ∧ (u2=v1 ∨ u3=v1))}

2.11 假设R和S都是二元关系,试把元组表达式{t|R(t) ∧(?u)(S(u) ∧u[1] ≠t[2])}转换成等价的:

①汉语查询句子; ②域表达式; ③关系代数表达式。

答:①在关系R中选取第2列的值与关系S中某个元组的第1列值不相等的那些元组,组成新的关系。

②域表达式为:

{ t1t2 | R(t1t2)∧(?u1) (?u2) ( S(u1u2) ∧ u1≠t2)} ③关系代数表达式为:

π

1,2(σ2≠3(R×S))或π1,2(R?S)

2≠1

(2003/9/21) (GJ-DA) (共2页) 目录--3

2.12 试把域表达式{ ab | R(ab) ∧ R(ba)}转换成等价的:?汉语查询句子;?关系代数表达式;?元组表达式。

解:? 在关系R中选取属性值交换后仍是R中元组的那些元组,组成新的关系。 ? 关系代数表达式为:π1,2(σ1=4 ∧ 2=3(R×R))

也可写成:R∩π2,1(R)

? 元组表达式为:{ t | (?u) (?v) (R(u) ∧ R(v) ∧ u[1]=v[2] ∧ u[2]=v[1] ∧ t[1]=u[1]

∧ t[2]=u[2])}

或:{ t | (?v) (R(t) ∧ R(v) ∧ t[1]=v[2] ∧ t[2]=v[1])}

2.13 有两个关系R (A, B, C)和是S(D, E, F),试把下列关系代数表达式转换成等价的元组表达式: ①πA(R); ②σB=’17’(R);

③ R×S; ④πA,F(σC=D(R×S) 解:①πA(R):{ t | (?u) ( R(u) ∧ t[1]=u[1])} ②σB='17'(R):{ t | R(t) ∧ t[2]= '17'}

③ R×S:{ t | (?u) (?v) ( R(u) ∧ S(v) ∧ t[1]=u[1] ∧ t[2]=u[2] ∧t[3]=u[3]

∧ t[4]=v[1] ∧t[5]=v[2] ∧t[6]=v[3])}

④πA,F(σC=D(R×S)):{ t | (?u) (?v) ( R(u) ∧ S(v) ∧ u[3]=v[1] ∧ t[1]=u[1]

∧ t[2]=v[3])}

? 2.14 设有关系R(A,B,C)和S(A,B,C),试把下列关系代数表达式转换成等价的域表达式:

① πA(R) ② σ2=′17′(R) ③ R∪S ⑤ R-S

④ R∩S

⑥ π1,2(R) π2,3(S)

解:① πA(R): { t1 | (?u2) (?u3) ( R(t1u2u3))} ② σ2=′17′(R): { t1t2t3 | R(t1t2t3) ∧ t2= '17'}

③ R∪S:{ t1t2t3 | R(t1t2t3) ∨ S(t1t2t3)}

④ R∩S:{ t1t2t3 | R(t1t2t3) ∧ S(t1t2t3)} ⑤ R-S:{ t1t2t3 | R(t1t2t3) ∧┓ S(t1t2t3)}

⑥ π1,2(R:{ t1t2t3 | (?u3) (?v1) | R(t1t2u3) ∧ S(v1t2t3)} ) π2,3(S)

? 2.15 设有关系R(A,B)和S(A,C),试把下列域表达式转换成等价的关系代数表达式:

? ① {a |(?b)(R(ab)∧ b=17)} ? ② {abc |(R(ab)∧ S(ac))} ? ③ {a |(?b)(R(ab))∨(?c)((?d)(S(dc))?S(ac))} ? ④ {a |(?c)(S(ac)∧(?b1)(?b2)(R(ab1)∧R(cb2)∧b1>b2))}

? 解:① π1(σ2=′17′(R)) ? ② R?S

? ③ π1(R)∪(S÷π2(S))

? ④ π1(σ1=3 ∧ 2=5 ∧ 4>6(S×R×R))

(2003/9/21) (GJ-DA) (共2页) 目录--4

2.16 设两个关系R (A,B )和S (A,C )。用null表示空值,分别写出等价于下列表达式的元组关系演算表达式:

① R S; ② R S; ③ R S 。 解:① R S:

{ t | (?u) (?v) (R(u) ∧ S(v) ∧ u[1]=v[1] ∧ t[1]=u[1] ∧t[2]=u[2] ∧ t[3]=v[2])

∨ (?v) (?u) (S(v) ∧ R(u) ∧ v[1]≠u[1] ∧ t[1]=null ∧t[2]=v[1] ∧ t[3]=v[2])} ② R S: { t | (?u) (?v) (R(u) ∧ S(v) ∧ u[1]=v[1] ∧ t[1]=u[1] ∧t[2]=u[2] ∧ t[3]=v[2])

∨ (?u) (?v) (R(u) ∧ S(v) ∧ u[1]≠v[1] ∧ t[1]=u[1] ∧t[2]=u[2] ∧ t[3]=null) ∨ (?v) (?u) (S(v) ∧ R(u) ∧ v[1]≠u[1] ∧ t[1]=null ∧t[2]=v[1] ∧ t[3]=v[2])} ③ R S: { t | (?u) (?v) (R(u) ∧ S(v) ∧ u[1]=v[1] ∧ t[1]=u[1] ∧t[2]=u[2] ∧ t[3]=v[2])

∨ (?u) (?v) (R(u) ∧ S(v) ∧ u[1]≠v[1] ∧ t[1]=u[1] ∧t[2]=u[2] ∧ t[3]=null) 2.17 设有三个关系:

S(S#,SNAME,AGE,SEX) SC(S#,C#,CNAME)

C(C#,CNAME,TEACHER) 试用关系代数表达式表示下列查询语句:

① 检索LIU老师所授课程的课程号和课程名。 ② 检索年龄大于23岁的男学生的学号和姓名。

③ 检索学号为S3学生所学课程的课程名与任课教师名。 ④ 检索至少选修LIU老师所授课程中一门课的女学生姓名。 ⑤ 检索WANG同学不学的课程的课程号。 ⑥ 检索至少选修两门课的学生学号。

⑦ 检索全部学生都选修的课程的课程号与课程名。

⑧ 检索选修课程包含LIU老师所授全部课程的学生学号。 解:? πC#,CNAME(σTNAME='LIU'(C))

? πS#,SNAME(σAGE>'23' ∧ SEX='M'(SC))

? π? π? π

CNAME,TNAME(σS#='S3'(SC?C))

SNAME(σSEX='F' ∧ TNAME='LIU'(S?SC?C)) C#(C)-πC#(σSNAME='WANG'(S?SC))

1=4 ∧ 2≠5(SC×SC))

? π1(σ? π

C#,CNAME(C?(πS#,C#(SC)÷πS#(S)))

? πS#,C#(SC)÷πC#(σTNAME='LIU'(C))

2.18 试用元组表达式表示第2.17题中各个查询语句。

解:? { t | (?u) (C(u) ∧ u[3]='LIU' ∧ t[1]=u[1] ∧ t[2]=u[2])}

? { t | (?u) (S(u) ∧ u[3]>23 ∧ u[4]='M' ∧ t[1]=u[1] ∧ t[2]=u[2])}

? { t | (?u) (?v) (SC(u) ∧ C(v) ∧ u[1]='S3' ∧ u[2]=v[1] ∧ t[1]=v[2] ∧t[2]=v[3])}

(此处自然联接条件u[2]=v[1]不要遗漏)

? { t | (?u) (?v) (?w) (S(u) ∧ SC(v) ∧ C(w) ∧ w[3]='LIU' ∧ u[4]='F' ∧u[1]=v[1]

∧ v[2]=w[1] ∧ t[1]=u[2])}

(此处自然联接条件u[1]=v[1]和v[2]=w[1]不要遗漏)

(2003/9/21) (GJ-DA) (共2页) 目录--5

论基础是___________。

6.关系代数的基本操作是___________。

7.安全运算是指不产生___________和___________的运算。

8.等式R S = R×S成立的条件是两个关系没有公共属性___________。 9.关系的并、差、交操作,要求两个关系具有____相同的关系模式_______。

10.一般,在关系代数运算中,当查询涉及到“否定”时,就要用到___差________操作;当

查询涉及到“全部值”时,就要用到___除法________操作。

11.如果关系R和S做自然联接时,只把R中原该舍去的元组放到新关系中,那么这种操作

称为___________操作。 12.等式πL(σF(E))=σF(πL(E))成立的条件是___________。 13.等式πL1(πL2(E))=πL1(E)成立的条件是___________。 14.等式σF(E1×E2)= E1×σF(E2)成立的条件是___________。 15.等式σF(E1?E2)= σF(E1)?σF(E2)成立的条件是___________。

16.关系逻辑中,外延谓词是指_______________,内涵谓词是指_______________。 17.关系逻辑中的“安全条件”是指____________________。 18.设有关系R(A,B,C),那么与规则W(c,a)← R(a,b,c)

等价的关系代数操作是____投影________。 19.设有关系R(A,B,C),那么与规则W(a,b)← R(a,b,'18')∧b≥'15'

等价的关系代数操作是____________。 20.设有关系R(A,B,C)和S(B,C,D),那么与规则

W(a,d)← R(a,b,c)∧ S(b,c,d)

等价的关系代数操作是______自然连接______。 2.3.2 单项选择题(在备选答案中选出一个正确答案) 1.在关系中,“元数”(arity)是指 [ ] A.行数 B.元组个数 C.关系个数 D.列数 2.在关系中,“基数”(cardinality)是指 [ ] A.行数 B.属性个数 C.关系个数 D.列数 3.由系统进行数据导航的语言称为 [ ] A.第三代语言 B.高级程序设计语言

C.过程性语言 D.非过程性语言

4.设关系R、S、W各有10个元组,那么这三个关系的自然联接的元组个数为 [ ] A.10 B.30 C.1000 D.不确定(与计算结果有关)

5.设W = R S,且W、R、S的元组个数分别为p、m、n,那么三者之间满足 [ ]

iθj A.p<(m+n) B.p≤(m+n) C.p<(m×n) D.p≤(m×n) 6.设关系R和S的结构相同,且各有10个元组,那么这两个关系的并操作结果的元组个数

为 [ ] A.10 B.小于等于10 C.20 D.小于等于20 7.设关系R和S的属性个数分别为2和3,那么 R S等价于 [ ]

1<2

A.σ1<2(R×S) C.σ1<2(R S)

B.σ1<4(R×S) D.σ1<4(R S)

(2003/9/21) (GJ-DA) (共2页) 目录--11

8.如果两个关系没有公共属性,那么其自然联接操作 A.转化为笛卡尔积操作 B.转化为联接操作

C.转化为外部并操作 D.结果为空关系 9.下列式子中,不正确的是 [ A.R-S=R-(R∩S) B.R=(R-S)∪(R∩S)

C.R∩S=S-(S-R) D.R∩S=S-(R-S) 10.设关系R和S都是二元关系,那么与元组表达式

{ t | (?u) (?v) (R(u) ∧ S(v) ∧ u[1]=v[1] ∧ t[1]=v[1] ∧ t[2]=v[2])}

等价的关系代数表达式是 [

A.πC.π

3,4(R?S) 3,4(R?S)

[ ]

]

]

B.πD.π

2,3(R?S)

1=3

1=1

3,4(σ1=1(R×S))

11.在元组关系演算中,与公式P1∧P2等价的公式是 A.┐(P1∨P2) B.┐P1∨┐P2

C.┐(┐P1∧┐P2) D.┐(┐P1∨┐P2) 12.在元组关系演算中,与公式(?s)(P1(s))等价的公式是 A.┐(?s)(P1(s)) B.(?s)(┐P1(s))

C.┐(?s)(┐P1(s)) D.┐(?s)(┐P1(s)) 13.在元组关系演算中,与公式P1=>P2等价的公式是 A.┐P1∨P2 B.┐P2∨P1

C.┐P1∧P2 D.┐P2∧P2

14.与域演算表达式{ab | R(ab)∧ R(ba)}不等价的关系代数表达式是

A.π

1,2(σ1=4∧2=3(R×R))

[ ]

[ ]

[ ]

[ ]

B.π

1,2(R

? R)

1=2∧2=1

C.R∩π2,1(R) D.σ1=2(R) 15.设R和S都是二元关系,那么与元组演算表达式

{ t | (?u) (?v) (R(u)∧S(v)∧u[2]=v[2]∧t[1]=u[1]∧t[2]=v[1])} 等价的关系代数表达式是

A.πC.π

1,3(σ2=4(R?S)) 1,3(R

2=4

[ ]

B.π

1,3(σ2=2(R×S))

1,3(R

2=2

?S) D.π?S)

16.设有关系R(A,B,C)和S(B,C,D),那么与R?S等价的关系代数表达式是

2=1

2=1

[ ]

A.σ3=5(R?S)

B.π

1,2,3,6(σ3=5(R ? S))

C.σ3=5∧2=4(R×S)) D.π1,2,3,6(σ3=2∧2=1(R×S)) 17.设R和S都是二元关系,那么与元组演算表达式

{ t | R(t)∧ (?u) (S(u) ∧ u[1]≠ t[2])}

不等价的关系代数表达式是 [ ] A.π1,2(σ2≠3(R×S)) B.π1,2(σ2≠1(R×S))

C.π

1,2(R

?S) D.π

2≠1

3,4(σ1≠4(S×R))

18.在关系代数表达式的查询优化中,不正确的叙述是 [ ]

(2003/9/21) (GJ-DA) (共2页) 目录--12

A.尽可能早地执行联接 B.尽可能早地执行选择 C.尽可能早地执行投影

D.把笛卡尔积和随后的选择合并成联接运算 2.3.3 计算题

1.设有关系R和S: R A B C S B C D 6 4 2 4 4 9 6 5 3 4 2 5 5 6 8 5 2 6 5 3 8 6 8 4

试计算:R?S,R?S,R?S,R?S。

2=1

3=2

1>3

2.设有关系R和S: R A B C S D E F 2 4 6 3 6 9 3 2 1 3 4 5 7 4 4 4 4 7

试计算下面四个元组表达式的值: R1={ t | R(t)∧ t[2]<3 }

R2={ t | (?u) (R(t) ∧ S(u) ∧ t[1]

R4={ t | (?u)(?v)(R(u) ∧ S(v) ∧ u[2]=v[2] ∧ t[1]=u[1] ∧ t[2]=v[3])}

3.在第2题的关系R和S中,试计算下面四个域表达式的值:

R1={ xyz | (?u)(?v)(R(xyz)∧ S(uzv)) }

R2={ xy | (?u) (?v)(?w) (R(uxv) ∧ S(uwy) ∧ v>w )} R3={ xyz | (?u)(?v) (R(xyz) ∧ S(uyv) ∧ x

4. 在第2题的关系R和S中,试计算下面四个规则的值:

规则1:W1(b)← R(a,b,c)∧ a>c

规则2:W2(a,b,c,d,f)← R(a,b,c)∧ S(d,b,f) 规则3:W3(a,b,c)← R(a,b,c)∧ S(d,e,f)∧ b>d 规则4:W4(a,b,c)← R(a,b,c)∧ ┐S(c,e,f)

2.4 自测题答案

2.4.1 填空题答案

1.关系被定义为一个集合 2.关系中主键值不允许重复 3.关系(或二维表) 文件 4.主键 外键 5.集合论(或集合代数) 谓词演算

6.∪、-、×、π和σ 7.无限关系 无穷验证 8.R和S没有公共属性 9.相同的关系模式(或相同的结构) 10.差 除法 11.左外联接 12.条件F只涉及到L中的属性

13.L1?L2

14.F只涉及到E2中的属性 15.F只涉及E1和E2中的公共属性

16.其关系存储在数据库中的谓词 由逻辑规则定义的谓词

(2003/9/21) (GJ-DA) (共2页) 目录--13

17.出现在规则中任何地方的变量必须出现在某个非求反的关系子目标中 18.W=πC,A(R) 19.W=πA,B(σB≥'15'∧C='18'(R)) 20.W=π

1,4(R?S)

或 W=π1,6(σ2=4∧3=5(R×S))

2.4.2 单项选择题答案

1.D 2.A 3.D

4.D 5.D 6.D 7.B 8.A 9.D 10.C 11.D 12.D 13.A 14.D 15.D

16.B 17.B

18.A

2.4.3 计算题答案 1.答:

R?S A B C D R 2=1

?S A R.B R.C S.B S.C D

6 4 2 5 6 4 2 4 4 9 6 5 3 8 6 4 2 4 2 5 5 6 8 4 6 5 3 5 2 6 6 5 3 5 3 8

5 6 8 6 8 4

R3=2

?S A R.B R.C S.B S.C D

6 4 2 4 2 5 6 4 2 5 2 6 6 5 3 5 3 8

5 6

8 6 8 4

R1?>3 S A R.B R.C S.B S.C D

6 4 2

4 2 5 6 4 2 6 8 4 6 5 3 4 2 5 6 5 3 6 8 4

5 6

8

6

8

4

2.答:

R1 A B C R2 A B C R3 A B C R4 A F 3 2 1 2 4 6 3 2 1 2 5 3 2 1 7 4 4 2 7 7 5 7 7

3.答:

R1 A

B C R2 B F R3 A B C R4 A B F

(2003/9/21) (GJ-DA) (共2页)--14

目录 2 4 6 7 4 4 4.答: W1 R.A R.B R.C 3 2 1 7 4 4 4 4 5 7 2 3 4 2 6 1 2 7 7 4 4 4 9 5 7

W2 R.A R.B R.C S.D S.F 2 4 6 3 5 2 4 6 4 7 7 4 4 3 5 7 4 4 3 7

W3 R.A R.B R.C 2 4 6 7 4 4

W4 R.A R.B R.C 2 4 6

3 2 1

(2003/9/21)GJ-DA) (共2页)--15

( 目录

3.2 教材中习题3的解答

3.1 名词解释

·基本表:实际存储在数据库中的表,称为基本表。

·视图:是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是数据库中只存放视图的定义而不存放视图的数据。

·实表:是对基本表的别称。 ·虚表:是对视图的别称。

·相关子查询:SELECT语句嵌套时,子查询中查询条件依赖于外层查询中的值,因此子查询要反复求值供外层查询使用。这种子查询称为相关子查询。

·联接查询:查询时要从多个基本表中提取数据,此时把多个基本表写在同一层的FROM子句中,这种查询形式称为联接查询。

·嵌套查询:查询时要从多个基本表中提取数据,此时把多个基本表分别放在不同层次上的FROM子句中,这种查询形式称为嵌套查询。

·交互式SQL:在终端交互方式使用的SQL语言。

·嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言。

·共享变量:嵌入的SQL语句和主语言语句间传递信息的变量,称为共享变量。共享变量先由主语言程序定义,再用SQL的说明语句说明,然后SQL语句就可使用这些变量。

·游标:游标是与某一查询相联系的符号名。游标有游标关系和游标指针两层含义。在游标打开时,游标(指针)指向查询结果的第一个记录之前。

·卷游标:在游标推进时,可以进退自如的游标。 3.2 对于教学数据库的三个基本表 S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER)

试用SQL的查询语句表达下列查询:

①检索LIU老师所授课程的课程号和课程名。 ②检索年龄大于23岁的男学生的学号和姓名。

③检索学号为S3学生所学课程的课程名与任课教师名。

④检索至少选修LIU老师所授课程中一门课程的女学生姓名。 ⑤检索WANG同学不学的课程的课程号。 ⑥检索至少选修两门课程的学生学号。

⑦检索全部学生都选修的课程的课程号与课程名。 ⑧检索选修课程包含LIU老师所授课程的学生学号。 解:① SELECT C#, CNAME

FROM C

WHERE TNAME=’LIU’; ② SELECT S#, SNAME

FROM S

WHERE AGE>23 AND SEX=’M’; ③ SELECT CNAME,TEACHER

FROM SC, C

WHERE SC.C#=C.C# AND S#=’S3’; ④ SELECT SNAME (联接查询方式)

FROM S, SC, C

WHERE S.S#=SC.S# AND SC.C#=C.C#

(2003/9/21) (GJ-DA) (共2页) 目录--16

AND SEX=’F’ AND TNAME=’LIU’; 或:SELECT SNAME (嵌套查询方式)

FROM S

WHERE SEX=’F’

AND S# IN (SELECT S#

FROM SC

WHERE C# IN (SELECT C#

FROM C

WHERE TNAME=’LIU’));

或:SELECT SNAME (存在量词方式)

FROM S

WHERE SEX=’F’

AND EXISTS (SELECT *

FROM SC

WHERE SC.S#=S.S#

AND EXISTS (SELECT * FROM C WHERE C.C#=SC.C# AND TNAME=’LIU’));

⑤ SELECT C# FROM C

WHERE NOT EXISTS (SELECT * FROM S, SC WHERE S.S#=SC.S# AND SC.C#=C.C# AND SNAME=’WANG’); ⑥ SELECT DISTINCT X.S#

FROM SC AS X, SC AS Y

WHERE X.S#=Y.S# AND X.C#!=Y.C#; ⑦ SELECT C#, CNAME FROM C

WHERE NOT EXISTS

(SELECT * FROM S

WHERE NOT EXISTS

(SELECT * FROM SC WHERE S#=S.S# AND C#=C.C#));

在1974年的SYSTEM R系统中,曾使用过“集合包含”的语法,即 (集合1)CONTAINS(集合2) 用这种语法也能写出本题的SELECT语句,即: SELECT C#,CNAME FROM C WHERE (SELECT S# FROM SC WHERE C#=C.C#) CONTAINS (SELECT S# FROM S);

(2003/9/21) (GJ-DA) (共2页)--17

目录 由于判断“(集合1)CONTAINS(集合2)”与“NOT EXISTS((集合2)EXCEPT(集合1))”是等价的,因此本题的SELECT语句也能这样写:

SELECT C#,CNAME FROM C WHERE NOT EXISTS

((SELECT S# FROM S)

EXCEPT

(SELECT S# FROM SC WHERE C#=C.C#));

⑧ SELECT DISTINCT S# FROM SC AS X WHERE NOT EXISTS (SELECT * FROM C WHERE TNAME=’LIU’ AND NOT EXISTS (SELECT * FROM SC AS Y WHERE Y.S#=X.S# AND Y.C#=C.C#)); 与⑦类似,本题的SELECT语句也能这样写: SELECT DISTINCT S#

FROM SC X WHERE NOT EXISTS

((SELECT C# FROM C WHERE TEACHER=’LIU’)

EXCEPT

(SELECT C# FROM SC Y WHERE Y.S#=X.S#));

3.3 对于第3.2题中的8个查询语句,试给出SELECT语句的图示形式。

解:为了说明问题,这里先用高级语言的算法形式表示其执行过程,再给出图示形式。 下面给出④、⑤、⑦、⑧的算法及图示形式。

④ 如果把三个关系S、SC、C看成三个文件,那么可以看出这个查询语句的SELECT语句实际上是一个三重循环。从而可得这个查询的算法形式如下:

for关系S的每个元组do {which:=false; if S.SEX=’F’ then for 关系SC的每个元组,且NOT which do if SC.S#=S.S# then for 关系C的每个元组,且NOT which do if C.C#=SC.C#,且TEACHER=’LIU’ then {print(S.SNAME); which:=true; } };

这个算法可以用图3.1表示。 S S# SNAME AGE SEX SC S# C# GRADE C C# CNAME TEACHER _X P. F _X _Y _Y LIU 图3.1 ⑤for 关系S的每个元组 do

{if S.SNAME=’WANG’ then

for 关系C的每个元组 do

(2003/9/21) (GJ-DA) (共2页) 目录--18

{which:=false;

for 关系SC的每个元组,且NOT which do if SC.S# =S.S# ,且SC.C#=C.C# then which := true; if NOT which then print(S.SNAME);

};

这个算法可以用图3.2表示。图中“┐”表示“NOT EXISTS”,即“不存在满足此条件的元组” S S# SNAME AGE SEX C C# CNAME TEACHER SC S# C# GRADE _X WANG P._Y ┐ _X _Y 图3.2 ⑦ for 关系C的每个元组 do {which1 := false;

for 关系S的每个元组,且NOT which1 do

{ which2 := false;

for 关系SC的每个元组,且NOT which2 do

if SC.S# =S.S#, 且SC.C# =C.C# then which2 := true; if NOT which2 then which1:=true; };

if NOT which1 then print(C.C#,C.CNAME);

};

这个算法可以用图3.3表示。

C C# CNAME TEACHER S S# SNAME AGE SEX SC S# C# GRADE P._X P. ┐ _Y ┐ _Y _X 图3.3 ⑧ for 关系SC的每个元组x do {which1 := false;

for 关系C的每个元组y,且NOT which1 do

{ if y.TEACHER=’LIU’then { which2 := false;

for 关系SC的每个元组z,且NOT which2 do

if z.S# =x.S#,且z.C# =y.C# then which2 := true; if NOT which2 then which1:=true; };

if NOT which1 then print(x.S#); } };

这个算法可以用图3.4表示。

SC S# C# GRADE C C# CNAME TEACHER SC S# C# GRADE P._X P. ┐ _Y LIU ┐ _X _Y 图3.4

3.4 设有两个基本表R(A,B,C)和S(A,B,C),试用SQL查询语句表达下列关系代数表

达式:

① R∪S ② R∩S ③ R-S ④ R×S ⑤πA,B(R) πB,C(S)

(2003/9/21) (GJ-DA) (共2页) 目录--19

⑥ π1,6(σ3=4(R×S) ⑦π1,2,3( 3=3 R S) ⑧ R÷πC(S) 解:① (SELECT * FROM R) UNION

(SELECT * FROM S);

② (SELECT * FROM R) INTERSECT

(SELECT * FROM S); ③ (SELECT * FROM R) MINUS

(SELECT * FROM S); ④ SELECT *

FROM R, S;

⑤ SELECT R.A, R.B, S.C

FROM R, S

WHERE R.B=S.B; ⑥ SELECT R.A, S.C

FROM R, S

WHERE R.C=S.A;

⑦ SELECT R.* (R.*表示R中全部属性)

FROM R, S

WHERE R.C=S.C;

⑧ R÷πC(S)的元组表达式如下:

{ t |(?u)(?v)(?w)(R(u)∧ S(v)∧ R(w)∧ w[1]=u[1] ∧ w[2]=u[2]

∧ w[3]=v[3] ∧ t[1]=u[1] ∧ t[2]=u[2])}

据此,可写出SELECT语句: SELECT A, B

FROM R RX

WHERE NOT EXISTS

( SELECT * FROM S

WHERE NOT EXISTS

( SELECT * FROM R RY

WHERE RY.A=RX.A AND RY.B=RX.B AND RY.C=S.C));

3.5 设有两个关系R(A,B)和S(A,C),试用SQL查询语句表示下列域表达式:

① { a |(?b)(R(ab)∧ b=‘17’)}

② { abc | R(ab)∧ S(ac)}

③ { a |(?c)(?b1)(?b2)(S(ac)∧R(ab1)∧ R(cb2)∧ b1>b2)} 解:① SELECT A FROM R

WHERE B=17;

② SELECT R.A, R.B, S.C FROM R, S

WHERE R.A=S.A; ③ SELECT S.A

(2003/9/21) (GJ-DA) (共2页) 目录--20

FROM S, R RX, R RY

WHERE S.A=RX.A AND RX.B>RY.B;

3.6 试叙述SQL语言的关系代数特点和元组演算特点。 答:SQL的关系代数特点如下:

① 有关系代数运算的并、交、差、自然联接等运算符;

② FROM子句体现了笛卡尔积操作,WHERE子句体现了选择操作,SELECT子句体现

了投影操作。

SQL的元组演算特点如下:

① FROM子句中的基本表名应视为“元组变量”,属性名应视为“元组分量”; ② 有存在量词EXISTS符号。

3.7 试用SQL查询语句表达下列对3.2题中三个基本表S、SC、C的查询:

① 在表C中统计开设课程的教师人数。 ② 求选修C4课程的女学生的平均年龄。

③ 求LIU老师所授课程的每门课程的平均成绩。 ④ 统计每个学生选修课程的门数(超过5门的学生才统计)。要求输出学生学号和选修门

数,查询结果按门数降序排列,若门数相同,按学号升序排列。 ⑤ 检索学号比WANG同学大,而年龄比他小的学生姓名。 ⑥ 在表SC中检索成绩为空值的学生学号和课程号。 ⑦ 检索姓名以L打头的所有学生的姓名和年龄。 ⑧ 求年龄大于女同学平均年龄的男学生姓名和年龄。 ⑨ 求年龄大于所有女同学年龄的男学生姓名和年龄。 解:① SELECT COUNT(DISTINCT TEACHER) FROM C;

② SELECT AVG(AGE) FROM S, SC

WHERE S.S#=SC.S# AND C#=’C4’ AND SEX=’F’; ③ SELECT C.C#,AVG(GRADE) FROM SC,C

WHERE SC.C#=C.C# AND TEACHER=‘LIU’ GROUP BY C.C#;

④ SELECT S#, COUNT(C#) FROM SC

GROUP BY S#

HAVING COUNT(*)>5 ORDER BY 2 DESC, 1; ⑤ SELECT SNAME FROM S

WHERE S#>ALL(SELECT S# FROM S

WHERE SNAME=’WANG’) AND AGE

FROM S

WHERE SNAME=’WANG’);

⑥ SELECT S#, C# FROM SC

WHERE GRADE IS NULL;

(2003/9/21) (GJ-DA) (共2页) 目录--21

⑦ SELECT SNAME, AGE FROM S

WHERE SNAME LIKE ’L%’; ⑧ SELECT SNAME, AGE FROM S

WHERE SEX=’M’

AND AGE>(SELECT AVG(AGE)

FROM S

WHERE SEX=’F’);

⑨ SELECT SNAME, AGE FROM S

WHERE SEX=’M’ AND AGE>ALL(SELECT AGE

FROM S

WHERE SEX=’F’);

3.8 对于下面的关系R和S,试求出下列各种联接操作的执行结果:

① R NATURAL INNER JOIN S

② R NATURAL RIGHT OUTER JOIN S ③ R RIGHT OUTER JOIN S USING(C) ④ R INNER JOIN S

⑤ R FULL OUTER JOIN S ON false

R A B C S B C D a1 b1 c1 b1 c1 d1 a2 b2 c2 b2 c2 d2 a3 b3 c3 b4 c4 d4

解:

① A B C D ② A B C D ③ A R.B C S.B

b1 a1 b1 c1 d1 a1 b1 c1 d1 a1 b1 c1

b2 a2 b2 c2 d2 a2 b2 c2 d2 a2 b2 c2

b4 null b4 c4 d4 null null c4

④ A R.B R.C S.B S.C D ⑤ A R.B R.C S.B S.C

D

d1 d2 d4 D

(2003/9/21) (GJ-DA) (共2页) 目录--22

a1 b1 c1 b1 c1 d1 a1 b1 c1 null null null a1 b1 c1 b2 c2 d2 a2 b2 c2 null null null a1 b1 c1 b4 c4 d4 a3 b3 c3 null null null

c1 a2 b2 c2 b1 c1 d1 null null null b1 d1 c2 a2 b2 c2 b2 c2 d2 null null null b2 d2 c4 a2 b2 c2 b4 c4 d4 null null null b4 d4 a3 b3 c3 b1 c1 d1 a3 b3 c3 b2 c2 d2 a3 b3 c3 b4 c4 d4

3.9 SQL2提供CASE表达式操作,这个操作类似于程序设计语言中的多分支选择结构,其句

法如下: CASE

WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2

??

WHEN 条件n THEN 结果n

ELSE 结果m

END

如果自上而下“条件i”首先被满足,那么这个操作返回值“结果i”(可以是某个表达式的值);如果没有一个条件被满足,那么返回值“结果m”。 在基本表SC(S#,C#,GRADE)中,GRADE值是百分制。如果欲转换成“成绩等第”,则规则如下:若GRADE<40则等第为F,若40≤GRADE<60则等第为C,若60≤GRADE<80则等第为B,若80≤GRADE则等第为A。试写出下列两个查询语句: ① 检索每个学生的学习成绩,成绩显示时以等第(SCORE)形式出现。 ② 检索每个等第的学生人次数。 解:① SELECT S#,C#,CASE

WHEN GRADE >= 80 THEN 'A' WHEN GRADE >= 60 THEN 'B' WHEN GRADE >= 40 THEN 'C' ELSE 'F' END AS SCORE

FROM SC;

② SELECT SCORE,COUNT(S#)

FROM (SELECT S#,C#,CASE

WHEN GRADE >= 80 THEN 'A' WHEN GRADE >= 60 THEN 'B' WHEN GRADE >= 40 THEN 'C'

(2003/9/21) (GJ-DA) (共2页) 目录--23

ELSE 'F'

END

FROM SC) AS RESULT(S#,C#,SCORE) GROUP BY SCORE;

3.10 用第3.9题给出的CASE操作在下列更新语句中完成SC表中的元组更新:

① 若课程号为C5则增加6分,若课程号为C8则增加10分,其他一律增加5分。 ② 若C4课程的成绩低于该门课平均成绩时,提高5%,否则提高4%。 解:① UPDATE SC

SET GRADE = GRADE + CASE

WHEN C# ='C5' THEN 6 WHEN C# ='C8' THEN 10 ELSE 5 END ;

② UPDATE SC

SET GRADE = GRADE * CASE

WHEN GRADE <(SELECT AVG(GRADE)

FROM SC

WHERE C# ='C4')

THEN 1.05 ELSE 1.04 END

WHERE C# ='C4';

3.11 设零件之间有组合联系,其关系模式如下:

PART(P#,PNAME,SUBP#,TOTAL)

其属性表示零件编号、零件名称、所需子零件编号及数量。设临时关系W(P#,SUBP#)的属性分别表示零件编号、这种零件的直接或间接子零件编号。 ① 试写出表示关系W的规则。 ② 写出计算W的递归查询语句。 解:① W(x, y)←PART(x, g, y, h)

W(x, y)←W(x, z)∧ W(z, y) ② WITH RECURSIVE W(P#, SUBP#) AS (SELECT P#, SUBP# FROM PART) UNION

(SELECT W1.P#, W2.SUBP# FROM W AS W1, W AS W2 WHERE W1.SUBP#=W2.P#) SELECT * FROM W;

3.12 试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C的更新操作:

① 往关系C中插一个课程元组('C8','VC++','BAO')。

② 检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已

(2003/9/21) (GJ-DA) (共2页) 目录--24

存在的表FACULTY(TNAME)。

③ 在SC中删除尚无成绩的选课元组。

④ 把选修LIU老师课程的女同学选课元组全部删去。 ⑤ 把MATHS课不及格的成绩全改为60分。

⑥ 把低于所有课程总平均成绩的女同学成绩提高5%。

⑦ 在表SC中修改C4课程的成绩,若成绩小于等于70分时提高5%,若成绩大于70 分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。

⑧ 在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。 解:① INSERT INTO C

VALUES('C8','VC++','BAO');

② INSERT INTO FACULTY(TNAME)

SELECT DISTINCT TEACHER

FROM (SELECT TEACHER, C.C#, AVG(GRADE)

FROM S, SC

WHERE SC.C#=C.C#

GROUP BY TEACHER, C.C#)

AS RESULT(TEACHER, C#, AVG_GRADE) AS X WHERE 80<=ALL(SELECT AVG_GRADE

FROM RESULT AS Y

WHERE Y.TEACHER=X.TEACHER);

③ DELETE FROM SC

WHERE GRADE IS NULL; ④ DELETE FROM SC

WHERE S# IN(SELECT S# FROM S WHERE SEX='F')

AND C# IN(SELECT C# FROM C WHERE TEACHER='LIU'); ⑤ UPDATE SC

SET GRADE=60 WHERE GRADE<60

AND C# IN(SELECT C# FROM C WHERE CNAME='MATHS'); ⑥ UPDATE SC

SET GRADE=GRADE*1.05

WHERE S# IN(SELECT S# FROM S WHERE SEX='F') AND GRADE<(SELECT AVG(GRADE) FROM SC); ⑦ 用两个UPDATE语句实现:

UPDATE SC

SET GRADE=GRADE*1.04

WHERE C#='C4' AND GRADE>70; UPDATE SC

SET GRADE=GRADE*1.05

(2003/9/21) (GJ-DA)2页)--25

(共 目录

WHERE C#='C4' AND GRADE<=70; (这两个UPDATE语句的顺序不能颠倒。) 用一个UPDATE语句实现:

UPDATE SC

SET GRADE=GRADE*CASE

WHEN GRADE>70 THEN 1.04 ELSE 1.05 END

WHERE C#='C4';

⑧ UPDATE SC

SET GRADE=GRADE*1.05

WHERE GRADE<(SELECT AVG(GRADE) FROM SC); 3.13 设数据库中有三个关系:

职工表 EMP(E#,ENAME,AGE,SEX,ECITY),

其属性分别表示职工工号、姓名、年龄、性别和籍贯。

工作表 WORKS(E#,C#,SALARY),

其属性分别表示职工工号、工作的公司编号和工资。

公司表 COMP(C#,CNAME,CITY),

其属性分别表示公司编号、公司名称和公司所在城市。

试用SQL语句写出下列操作:

① 用CREATE TABLE语句创建上述三个表,需指出主键和外键。 ② 检索超过50岁的男职工的工号和姓名。

③ 假设每个职工只能在一个公司工作,检索工资超过1000元的男性职工工号和姓名。 ④ 假设每个职工可在多个公司工作,检索在编号为C4和C8公司兼职的职工工号和姓名。 ⑤ 检索在“联华公司”工作、工资超过1000元的男性职工的工号和姓名。

⑥ 假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数.显示(E#,NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。

⑦ 工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工工号。

⑧ 检索联华公司中低于本公司平均工资的职工工号和姓名。

⑨ 在每一公司中为50岁以上职工加薪100元(若职工为多个公司工作,可重复加)。 ⑩ 在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。 解:① CREATE TABLE EMP

( E# CHAR(4) NOT NULL, ENAME CHAR(8) NOT NULL, AGE SMALLINT, SEX CHAR(1), ECITY CHAR(20), PRIMARY KEY(E#)); CREATE TABLE COMP

( C# CHAR(4) NOT NULL,

CNAME CHAR(20) NOT NULL, CITY CHAR(20),

(2003/9/21) (GJ-DA) (共2页) 目录--26

PRIMARY KEY(C#));

CREATE TABLE WORKS

( E# CHAR(4) NOT NULL, C# CHAR(4) NOT NULL, SALARY SMALLINT, PRIMARY KEY(E#, C#),

FOREIGN KEY(E#) REFERENCES EMP(E#), FOREIGN KEY(C#) REFERENCES COMP(C#));

② SELECT E#, ENAME

FROM EMP

WHERE AGE>50 AND SEX='M';

③ SELECT EMP.E#, ENAME

FROM EMP, WORKS

WHERE EMP.E#=WORKS.E# AND SALARY>1000; ④ SELECT A.E#, A.ENAME

FROM EMP A, WORKS B, WORKS C WHERE A.E#=B.E# AND B.E#=C.E#

AND B.C#='C4' AND C.C#='C8';

⑤ SELECT A.E#, A.ENAME

FROM EMP A, WORKS B, COMP C WHERE A.E#=B.E# AND B.C#=C.C#

AND CNAME='联华公司' AND SALARY>1000 AND SEX='M';

⑥ SELECT E#, COUNT(C#) AS NUM, SUM(SALARY) AS SUM_SALARY

FROM WORKS GROUP BY E#; ⑦ SELECT X.E#

FROM WORKS X WHERE NOT EXISTS

(SELECT *

FROM WORKS Y

WHERE E#='E6'

AND NOT EXISTS

(SELECT *

FROM WORKS Z WHERE Z.E#=X.E# AND Z.C#=Y.C#));

⑧ SELECT A.E#, A.ENAME

FROM EMP A, WORKS B, COMP C WHERE A.E#=B.E# AND B.C#=C.C#

(2003/9/21) (GJ-DA)2页)--27

(共 目录 AND CNAME='联华公司'

AND SALARY<(SELECT AVG(SALARY)

FROM WORKS, COMP

WHERE WORKS.C#=COMP.C#

AND CNAME='联华公司');

⑨ UPDATE WORKS

SET SALARY=SALARY+100

WHERE E# IN (SELECT E# FROM EMP WHERE AGE>50); ⑩ DELETE FROM WORKS WHERE E# IN (SELECT E# FROM EMP WHERE AGE>60); DELETE FROM EMP WHERE AGE>60;

3.14 对第3.13题中的关系建立一个有关女职工信息的视图EMP_WOMAN,属性包括(E#,ENAME,

C#,CNAME,SALARY)。

然后对视图EMP_WOMAN操作,检索每一位女职工的工资总数。(假设每个职工可在多个公司兼职)

解: CREATE VIEW EMP_WOMAN

AS SELECT A.E#, A.ENAME, C.C#, CNAME, SALARY

FROM EMP A, WORKS B, COMP C WHERE A.E#=B.E# AND B.C#=C.C#

AND SEX='F';

SELECT E#,SUM(SALARY) FROM EMP_WOMAN

GROUP BY E#;

3.15 在第1章中提到的仓库管理数据库中有五个基本表: 零件 PART(P#,PNAME,COLOR,WEIGHT) 项目 PROJECT(J#,JNAME,DATE) 供应商 SUPPLIER(S#,SNAME,SADDR) 供应 P_P(J#,P#,TOTAL) 采购 P_S(P#,S#,QUANTITY)

① 试用SQL DDL语句定义上述五个基本表,需说明主键和外键。

② 试将PROJECT、P_P、PART三个基本表的联接定义为一个视图VIEW1,将PART、P_S、SUPPLIER三个基本表的联接定义为一个视图VIEW2。

③ 试在上述两个视图的基础上进行查询操作: a)检索上海的供应商所供应的零件的编号和名称。 b)检索项目J4所用零件的供应商的编号和名称。 解:① CREATE TABLE PART

(P# CHAR(6),

PNAME CHAR(10) NOT NULL, COLOR CHAR(6), WEIGHT FLOAT(6), PRIMARY KEY(P#));

CREATE TABLE PROJECT

(2003/9/21) (GJ-DA) (共2页) 目录--28

(J# CHAR(6),

JNAME CHAR(12) NOT NULL, DATE DATE,

PRIMARY KEY(J#)); CREATE TABLE SUPPLIER

(S# CHAR(8),

SNAME CHAR(12) NOT NULL, SADDR VARCHAR(30), PRIMARY KEY(S#));

CREATE TABLE P_P

(J# CHAR(6), P# CHAR(6), TOTAL INTEGER,

PRIMARY KEY (J#, P#)

FOREIGN KEY(J#) REFERENCES PROJECT(J#), FOREIGN KEY(P#) REFERENCES PART(P#)); CREATE TABLE P_S

(P# CHAR(6), S# CHAR(8), QUANTITY INTEGER, PRIMARY KEY (P#, S#)

FOREIGN KEY(P#) REFERENCES PART(P#),

FOREIGN KEY(S#) REFERENCES SUPPLIER(S#));

② CREATE VIEW VIEW1

AS SELECT A.J#, JNAME, DATE, C.P#, PNAME, COLOR,

WEIGHT, TOTAL

FROM PROJECT A, P_P B, PART C WHERE A.J#=B.J# AND B.P#=C.P#;

CREATE VIEW VIEW2

AS SELECT A.P#, PNAME, COLOR, WEIGHT, C.S#, SNAME,

SADDR, QUANTITY

FROM PART A, P_S B, SUPPLIER C WHERE A.P#=B.P# AND B.S#=C.S#;

③ a) SELECT P#, PNAME

FROM VIEW2

WHERE SADDR LIKE ’上海%’; b) SELECT S#, SNAME FROM VIEW1, VIEW2

WHERE VIEW1.P#=VIEW2.P# AND J#=’J4’;

3.16 对于3.2题的教学数据库中基本表SC,建立一个视图: CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE) AS SELECT S#,COUNT(C#),AVG(GRADE) FROM SC

GROUP BY S#;

试判断下列查询和更新操作是否允许执行。如允许,写出转换到基本表SC上的相应操作。

(2003/9/21) (GJ-DA) (共2页) 目录--29

① SELECT *

FROM S_GRADE; ② SELECT S#,C_NUM FROM S_GRADE

WHERE AVG_GRADE>80; ③ SELECT S#,AVG_GRADE FROM S_GRADE

WHERE C_NUM >(SELECT C_NUM

FROM S_GRADE

WHERE S#='S4');

④ UPDATE S_GRADE SET S#='S3' WHERE S#='S4'; ⑤ DELETE FROM S_GRADE

WHERE C_NUM>4;

答:① 允许查询。相应的操作如下:

SELECT S#,COUNT(C#) AS C_NUM,AVG(GRADE) AS AVG_GRADE FROM SC

GROUP BY S#;

② 允许查询。相应的操作如下:

SELECT S#,COUNT(C#) AS C_NUM FROM SC GROUP BY S#

HAVING AVG(GRADE)> 80;

③ 允许查询。相应的操作如下:

SELECT S#,AVG(GRADE) AS AVG_GRADE FROM SC GROUP BY S#

HAVING COUNT(C#)> (SELECT COUNT(C#)

FROM SC GROUP BY S# HAVING S#='S4');

④ 不允许。C_NUM是对SC中的学生选修门数进行统计,在未更改SC表时,要在视图S_GRADE中更改门数,是不可能的。

⑤ 不允许。在视图S_GRADE中删除选修门数在4门以上的学生元组,势必造成SC中这些学生学习元组的删除,这不一定是用户的原意,因此使用分组和聚合操作的视图,不允许用户执行更新操作。

3.17 预处理方式对于嵌入式SQL的实现有什么重要意义?

答:此时宿主语言的编译程序不必改动,只要提供一个SQL函数定义库,供编译时使用。预处理方式只是把源程序中的SQL语句处理成宿主语言的函数调用形式。

3.18 在宿主语言的程序中使用SQL语句有哪些规定? 答:有三条规定:

① 在程序中要区分SQL语句与宿主语言语句,所有SQL语句必须加前缀标识“EXEC SQL”以及结束标志“END_EXEC”;

② 允许嵌入的SQL语句引用宿主语言的程序变量,而主语句不能引用数据库中的字段

(2003/9/21) (GJ-DA) (共2页) 目录--30

变量;

③ SQL的集合处理方式与宿主语言的单记录处理方式之间要用游标机制协调。 3.19 SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?

答:用游标机制协调。把SELECT语句查询结果定义成游标关系,以使用文件的方式来使用游标关系。与游标有关的SQL语句有四个:游标定义,游标打开,游标推进,游标关闭。 3.20 嵌入式SQL的DML语句何时不必涉及到游标?何时必须涉及到游标? 答:不涉及游标的DML语句有下面两种情况: ① INSERT、DELETE、UPDATE语句,只要加上前缀和结束标志,就能嵌入在宿主语言程序中使用;

② 对于SELECT语句,如果已知查询结果肯定是单元值,也可不必涉及游标操作。 涉及游标的DML语句有下面两种情况: ① 当SELECT语句查询结果是多个元组时,必须用游标机制把多个元组一次一个地传递给主程序处理;

② 对游标指向元组进行修改或删除操作时,也涉及到游标。 3.21 在教学数据库中检索成绩不及格的学生信息,要求显示(S#,SNAME,C#,CNAME,TEACHER),

试编写实现此功能的嵌有SQL语句的C语言程序段。 解: #define NO_MORE_TUPLES !(strcmp(SQLSTATE,〞02000〞))

void sel()

{ EXEC SQL BEGIN DECLARE SECTION;

char sno[5],cno[5],sname[9],cname[11],teacher[9]; char SQLSTATE[6];

EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE x CURSOR FOR

SELECT s.s#,sname,c.c#,cname,teacher FROM s,sc,c

WHERE s.s#=sc.s# and sc.c#=c.c# and grade<60; EXEC SQL OPEN scx; while(1)

{ EXEC SQL FETCH FROM x

INTO :sno,:sname,:cno,:cname,:teacher;

if(NO_MORE_TUPLES)break;

printf(〞%s,%s,%s,%s,%s\\n〞,sno,sname,cno,cname,teacher);

}

EXEC SQL CLOSE x; }

3.3 练习题

3.3.1 填空题

1.在SQL中,关系模式称为___基本表______,子模式称为___视图_______,元组称为____

行______,属性称为___列_______。

2.SQL中,表有两种:__________和__________,也称为__________和__________。 3.SQL中,用户有两种:__________和__________。

4.SQL中,外模式一级数据结构的基本单位是__________。 5.在“SQL模式”中,主要成分有__________。 6.基本表中,“主键”概念应该体现其值的__________和__________两个特征。 7.操作“元组 IN(集合)”的语义是____________________。 8.表达式中的通配符“%”表示__________,“_”(下划线)表示__________。

(2003/9/21) (GJ-DA) (共2页) 目录--31

9.操作“元组>SOME(集合)”的语义是____________________。 10.操作“元组

12.嵌入式SQL的预处理方式,是指预处理程序先对源程序进行扫描,识别出__________,

并处理成宿主语言的__________形式。

13.为保证嵌入式SQL的实现,通常DBMS制造商提供一个__________,供编译时使用。 14.SQL语句嵌入在C语言程序中时,必须加上前缀标识__________和结束标志__________。 15.“卷游标”是指____________________。

3.3.2 单项选择题(在备选答案中选出一个正确答案) 1.在SQL中,用户可以直接进行查询操作的是 [ ] A.实表和虚表 B.基本表和实表

C.视图和虚表 D.基本表 2.SQL中,聚合函数COUNT(列名)用于 [ ] A.计算元组个数 B.计算属性的个数

C.对一列中的非空值计算个数 D.对一列中的非空值和空值计算个数 3.SQL中,与“NOT IN”等价的操作符是 [ ] A.=SOME B.<>SOME C.=ALL D.<>ALL 4.元组比较操作(a1,a2)>(b1,b2)的意义是 [ ] A.(a1>b1)OR((a1=b1)AND(a2>=b2))

B.(a1>=b1)OR((a1=b1)AND(a2>=b2)) C.(a1>b1)OR((a1=b1)AND(a2>b2)) D.(a1>=b1)OR((a1=b1)AND(a2>b2)

5.SQL中,谓词EXISTS可用来测试一个集合是否 [ ] B.有重复的列名

C.为非空集合 D.有空值

6.对于基本表EMP(ENO,ENAME,SALARY,DNO)

其属性表示职工的工号、姓名、工资和所在部门的编号。

基本表DEPT(DNO,DNAME) 其属性表示部门的编号和部门名。

有一SQL语句: SELECT COUNT(DISTINCT DNO) FROM EMP;

其等价的查询语句是 [ ] A.统计职工的总人数 B.统计每一部门的职工人数

C.统计职工服务的部门数目 D.统计每一职工服务的部门数目

7.对于第6题的两个基本表,有一个SQL语句: SELECT ENO,ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHERE DNAME='金工车间';

其等价的关系代数表达式是: [ ]

A.π

ENO,ENAME(σDNAME≠'金工车间'(EMP?DEPT))

(2003/9/21) (GJ-DA) (共2页) 目录--32

B.πENO,ENAME(EMP

? DEPT)

DNAME≠'金工车间'

C.πENO,ENAME(EMP)-πENO,ENAME(σDNAME='金工车间'(EMP?DEPT)) D.π(EMP)-πENO,ENAME(σENO,ENAMEDNAME≠'金工车间'(EMP?DEPT)) 8.对于第6题的两个基本表,有一个SQL语句:

UPDATE EMP SET SALARY=SALARY*1.05 WHERE DNO='D6' AND SALARY<(SELECT AVG(SALARY)

FROM EMP);

其等价的修改语句为 [ A.为工资低于D6部门平均工资的所有职工加薪5%

B.为工资低于整个企业平均工资的职工加薪5%

C.为在D6部门工作、工资低于整个企业平均工资的职工加薪5% D.为在D6部门工作、工资低于本部门平均工资的职工加薪5% 9.有关嵌入式SQL的叙述,不正确的是 [ A.宿主语言是指C一类高级程序设计语言

B.宿主语言是指SQL语言

C.在程序中要区分SQL语句和宿主语言语句 D.SQL有交互式和嵌入式两种使用方式 10.嵌入式SQL实现时,采用预处理方式是 A.把SQL语句和主语言语句区分开来

B.为SQL语句加前缀标识和结束标志

C.识别出SQL语句,并处理成函数调用形式 D.把SQL语句编译成二进制码

11.允许在嵌入的SQL语句中,引用宿主语言的程序变量,在引用时 A.直接引用

B.这些变量前必须加符号“*” C.这些变量前必须加符号“:” D.这些变量前必须加符号“&”

12.如果嵌入的SELECT语句的查询结果肯定是单元组,那么嵌入时 A.肯定不涉及游标机制

B.必须使用游标机制

C.是否使用游标,由应用程序员决定 D.是否使用游标,与DBMS有关

13.卷游标的推进语句“EXEC SQL FETCH RELATIVE -4”表示 A.把游标移向查询结果的第4行

B.把游标移向查询结果的倒数第4行 C.把游标从当前位置推进4行 D.把游标从当前位置返回4行

14.卷游标的推进语句“EXEC SQL FETCH ABSOLUTE -3 ”表示 A.把游标移向查询结果的第3行

]

]

[ ]

[ ]

[ ]

[ ]

[ ]

(2003/9/21) (GJ-DA) (共2页) 目录--33

B.把游标移向查询结果的倒数第3行 C.把游标从当前位置推进3行 D.把游标从当前位置返回3行 3.3.3 简答题

1.试叙述SQL的关系代数特点和元组演算特点。

2.SQL语言对于“查询结果是否允许存在重复元组”是如何实现的? 3.试对SELECT语句中使用的基本表名和列名的语义作详细的解释。 4.SELECT语句中,何时使用分组子句,何时不必使用分组子句?

3.4 练习题答案

3.4.1 填空题答案

1.基本表 视图 行 列

2.基本表 视图 实表 虚表 3.应用程序 终端用户 4.视图

5.基本表、视图、索引、完整性规则等 6.惟一 非空

7.若元组在集合中,其值为true,否则为false

8.与零个或多个字符组成的字符串匹配 与单个字符匹配 9.若元组值大于集合中某一元组值,则其值为true,否则为false 10.若元组值小于集合中每一元组值,则其值为true,否则为false 11.交互式SQL 嵌入式SQL 12.SQL语句 函数调用 13.SQL函数定义库

14.EXEC SQL 分号(;)

15.可以进退自如的游标(即可随意推进或返回) 3.4.2 单项选择题答案

1.A 2.C 3.D 4.C 5.C 6.C 7.C 8.C 9.B 10.C 11.C 12.C 13.D 14.B 3.4.3 简答题答案

1.答:SQL的SELECT语句的基本句法来自于关系代数表达式πL(σF(R1×?×Rm)),

并且SQL中有并(UNION)、交(INTERSECT)和差(EXCEPT)等操作,因此SQL具有关系代数特点。 SELECT语句中出现的基本表名,都应该理解成基本表中的元组变量,而列名应理解

成元组分量,这样SQL就具有了元组演算的特点。

2.答:对于SELECT语句中SELECT子句,若用“SELECT DISTINCT”形式,则查询结

果中不允许有重复元组;若不写DISTINCT字样,则查询结果中允许出现重复元组。 3.答:在基本SQL中,SELECT语句中使用的基本表名都应该理解成表中的元组变量,而

列名就成了元组分量。这样就使SELECT语句带有元组演算的特点。

(注:实际上,在基本SQL中,把关系变量和元组变量混为一谈了。这在面向对象数据库中得到了纠正,在引用表时,都要为表定义一个元组变量。)

4.答:SELECT语句中使用分组子句的先决条件是要有聚合操作。当聚合操作值与其他属性

的值无关时,不必使用分组子句。譬如求男同学的人数。此时聚合值只有一个,因此不必分组。 当聚合操作值与其他属性的值有关时,必须使用分组子句。譬如求每一性别的人数。

此时聚合值有两个,与性别有关,因此必须分组。

(2003/9/21) (GJ-DA) (共2页) 目录--34

4.2 教材中习题4的解答

4.1 名词解释

·数据冗余:指同一个数据在系统中多次重复出现。 ·函数依赖(FD):在关系模式R(U)中,FD是形为X→Y的一个命题,只要r是R的当前关系,对r中任意两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么称FD X→Y在关系模式R(U)中成立。

·平凡的FD:如果X→Y,且Y?X,则称X→Y是一个“平凡的FD”。

·FD集F的闭包F+:被F逻辑蕴涵的函数依赖全体构成的集合,称为F的闭包,记为F+,即F+={ X→Y | F?X→Y}。

·属性集X的闭包X+:从已知的FD集F使用FD推理规则推出的所有满足X→A的属性A的集合,称为X的闭包,记为X+,即X+={ 属性A | X→A在F+中 }。

·FD的逻辑蕴涵:如果从已知的FD集F能推导出X→Y成立,那么称F逻辑蕴涵 X→Y,记为F ?X→Y。

·FD集的等价:对于两个FD集F和G,有F+=G+,则称F和G是等价的依赖集。 ·最小依赖集:设F是属性集U上的FD集,Fmin是F的最小依赖集,那么Fmin应满足下列四个条件:Fmin+=F+;每个FD的右边都是单属性;Fmin中没有冗余的FD;每个FD的左边没有冗余的属性。

·无损分解:设关系模式R,F是R上的FD集,ρ={ R1,?,Rk }是R的一个分解。

k

如果对R中满足F的每一关系r,都有r= i=1 ?πR(,那么称分解ρ相对F是“无损分解”。 ir)·泛关系假设:指数据库中每一个关系都是全部属性构成的关系的投影,此时,由全部属性构成的关系称为泛关系。

·chase过程:根据已知FD集,对R分解成ρ构造的初始表格的值进行修改,使之符合FD集,这个过程称为chase过程。

·保持FD:设关系模式R,F是R上的FD分解,ρ={ R1,?,Rk }是R的一个分

k

i=1 πRi(F)?F,那么称分解ρ保持FD集F。 解,如果有∪

·1NF:如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是1NF

的模式。

·2NF:如果R是1NF的模式,且每个非主属性完全函数依赖于R的候选键,那么称R是2NF的模式。

·3NF:如果R是1NF的模式,且每个非主属性都不传递依赖于R的候选键,那么称R是3NF的模式。

·BCNF:如果R是1NF的模式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。

·4NF:设D是关系模式R上成立的FD和MVD集合。如果D中每个非平凡的 MVD X→→Y的左部X都是R的超键,那么称R是4NF模式。

·5NF:如果关系模式R的每个JD均由R的候选键蕴涵,那么称R是5NF的模式。 ·多值依赖(MVD):设关系模式R(U),X和Y是U的子集,Z=U-X-Y。对于R的关系r,若在r中存在元组(x,y1,z1)和(x,y2,z2),就也应存在元组(x,y2,z1)和(x,y1,z2),那么称MVD X→→Y在模式R上成立。

·联接依赖(JD):设关系模式R(U),R1、?、Rn是U的子集,并满足U=R1∪?∪Rn,

(2003/9/21) (GJ-DA) (共2页) 目录--35

ρ={ R1,?,Rn }是R的一个分解。如果对于R的每个关系r都有mρ(r)=r,那么称 JD *(R1,?,Rn)在模式R上成立。

4.2 用A1、A2和A3三条推理规则来证明4.2.3节中的定理4.2(推理规则A4~A8)。

(1) A4(合并性,union):{ X→Y,X→Z }?X→YZ。

证明:已知X→Y,根据A2,两边用X扩充,得到X→XY。从已知X→Z,根据A2两边用Y扩充,得到XY→YZ。再根据A3,从X→XY和XY→YZ可得到X→YZ。

(2) A5(分解性,decomposition):{ X→Y,Z?Y }?X→Z。 证明:已知Z?Y,可得Y→Z。从Y→Z和已知X→Y,可得X→Z成立。 (3) A6(伪传递性):{ X→Y,WY→Z }?WX→Z。

证明:已知X→Y,根据A2,两边用W扩充,得到WX→WY。据WX→WY和已知的WY→Z,。再根据A3,可得WX→Z成立。

(4) A7(复合性,composition):{ X→Y,W→Z }?XW→YZ。

证明:已知X→Y,根据A2,两边用W扩充,得到WX→WY。从已知W→Z,根据A2两边用Y扩充,得到WY→YZ。再根据A3,从WX→WY和WY→YZ可得到XW→YZ成立。

(5) A8 { X→Y,W→Z }?X∪(W-Y)→YZ。

证明:已知X→Y,根据A2,两边用(W-Y)扩充,得到X∪(W-Y)→Y∪(W-Y),而 Y∪(W-Y)=WY,因此有X∪(W-Y)→WY。从已知W→Z,根据A2两边用Y扩充,得到WY→YZ。再根据A3,从X∪(W-Y)→WY和WY→YZ可得到X∪(W-Y)→YZ。

4.3 对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示,那么X→φ,φ→Y,φ→φ的含义是什么?

答:据推理规则的自反律可知,X?ф和ф?ф是平凡的FD,总是成立的。

而ф?Y表示在当前关系中,任意两个元组的Y值相等,也就是当前关系的Y值都相等。 4.4 设关系模式R有n个属性,在模式R上可能成立的函数依赖有多少个?其中平凡的FD有多少个?非平凡的FD有多少个?

1解:这个问题是排列组合问题。FD形为X?Y,从n个属性值中选择属性组成X共有C0n+Cn

nnnnn

+ ? +Cn=2种方法;同理,组成Y也有2种方法。因此组成X?Y形式应该有2·2=4n

种方法。即可能成立的FD有4n个。

平凡的FD要求Y?X,组合X?Y形式的选择有:

01(C0+C1)+C2·012n01nC0n·C0+Cn·11n(C2+C2+C2)+ ? +Cn(Cn+Cn+ ? Cn)

01·21+C2·22+ ? +Cn·2n=(1+2)n=3n =C0·2+Cnnnn

即平凡的FD有3n。因而非平凡的FD有4n-3n个。

4.5 已知关系模式R(ABC),F是R上成立的FD集,F={ A→B,B→C },试写出F的闭包F+。

解:据已知条件和推理规则,可知F+有43个FD: A?ф AB?ф AC?ф ABC?ф B?ф C?ф A?A AB?A AC?A ABC?A B?B C?C

(2003/9/21) (GJ-DA) (共2页) 目录--36

A?B AB?B AC?B ABC?B B?C ф?ф A?C AB?C AC?C ABC?C B?BC A?AB AB?AB AC?AB ABC?AB BC?ф A?AC AB?AC AC?AC ABC?AC BC?B A?BC AB?BC AC?BC ABC?BC BC?C A?ABC AB?ABC AC?ABC ABC?ABC BC?BC 4.6 设关系模式R(ABCD),F是R上成立的FD集,F={ A→B,C→B },则相对于F,试写出关系模式R的关键码。并说明理由。

解:R的关键码为ACD。因为从已知的F,只能推出ACD→ABCD。 4.7 设关系模式R(ABCD)上FD集为F,并且F={AB→C,C→D,D→A}。 ① 试从F求出所有非平凡的FD。 ② 试求R的所有候选键。

③ 试求R的所有不是候选键的超键。

解:① 从已知的F可求出非平凡的FD有76个。

譬如,左边是C的FD有6个:C→A,C→D,C→AD,C→AC,C→CD,C→ACD。 左边是D的FD有2个:D→A,D→AD。

左边是AB的FD有12个:AB→C,AB→D,AB→CD,AB→AC,??。 感兴趣的读者可以自行把这76个FD写齐。

② 候选键是能函数决定所有属性的不含多余属性的属性集。根据这个概念可求出R的候选键有三个:AB、BC和BD。

③ R的所有不是候选键的超键有四个:ABC、ABD、BCD和ABCD。 4.8 试举出反例说明下列规则不成立:

① { A→B }?{ B→A }

② { AB→C,A→C }?{ B→C } ③ { AB→C }?{ A→C }

答:设有三个关系:

r1 A B r2 A B C r3 A B C 1 1 2 1 2 1 2 3 2 1 2 2 2 1 3 4 3 2 3

(1)在关系r1中,A→B成立,但B→A不成立。

(2)在关系r2中,AB→C和A→C成立,但B→C不成立 (3)在关系r3中,AB→C成立,但A→C不成立。 4.9 设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C},

① 试写出属性集BD的闭包(BD)+。

② 试写出所有左部是B的函数依赖(即形为“B→?”)。

+

解:①从已知的F,可推出BD→BCD,所以(BD)=BCD。

②由于B+=BC,因此左部是B的FD有四个: B→φ,B→B,B→C,B→BC。

4.10 设关系模式R(ABCDE)上FD集为F,并且F={A→BC,CD→E,B→D,E→A}。 ① 试求R的候选键。 ② 试求B+的值。

解:① R的候选键有四个:A、E、CD和BC。

(2003/9/21) (GJ-DA) (共2页) 目录--37

② B+=BD。

4.11 设有关系模式R(ABC),其关系r如图4.1所示。 ① 试判断下列三个FD在关系r中是否成立?

A→B BC→A B→A

② 根据关系r,你能断定哪些FD在关系模式R上不成立?

A B C 1 2 3 4 2 3 5 3 3 图4.1 解:①在关系r中,A→B成立,BC→A不成立,B→A不成立。

②在关系r中,不成立的FD有:B→A,C→A,C→B,C→AB,BC→A。 4.12 设关系模式R(ABC)分解成ρ={ AB,BC },如果R上的FD集F={ A→B },那么这个分解是损失分解。试举出R的一个关系r,不满足mρ(r)=r。 解:这个反例r可以举测试时的初始表格: A B C AB a1 a2 b13 BC b21 a2 a3

π

AB(r)?πBC(r)有四个元组:

A B C

a1 a2 b13 a1 a2 a3 b21 a2 b13 b21 a2 a3

即mρ(r)≠r。

4.13 试解释数据库“丢失信息”与“未丢失信息”两个概念。“丢失信息”与“丢失数据”

有什么区别?

答:数据库中丢失信息是指r≠mρ(r),未丢失信息是指r=mρ(r)。 丢失信息是指不能辨别元组的真伪,而丢失数据是指丢失元组。 4.14 设关系模式R(ABC),F是R上成立的FD集,F={ A→C,B→C },试分别求F在

模式AB和AC上的投影。

答:πAB(F)=φ(即不存在非平凡的FD) πAC(F)={ A→C } 4.15 设关系模式R(ABC),F是R上成立的FD集,F={ B→A,C→A },ρ={ AB,BC }是R上的一个分解,那么分解ρ是否保持FD集F?并说明理由。 答:已知F={ B→A,C→A },而πAB(F)={ B→A },πBC(F)=φ, 显然,分解ρ丢失了FD C→A。 4.16 设关系模式R(ABC),F是R上成立的FD集,F={ B→C,C→A },那么分解ρ=

{ AB,AC }相对于F,是否无损分解和保持FD?并说明理由。 答:①已知F={ B→C,C→A },

而πAB(F)=φ,πAC(F)={ C→A } 显然,这个分解丢失了FD B→C

② 用测试过程可以知道,ρ相对于F是损失分解。

4.17 设关系模式R(ABCDEG)上FD集为F,并且F={D→G,C→A,CD→E,A→B}。 ① 求D+,C+,A+,(CD)+,(AD)+,(AC)+,(ACD)+。

(2003/9/21) (GJ-DA) (共2页) 目录--38

② 试求R的所有候选键。

③ 用ρ1={CDEG,ABC}替换R,这个分解有什么冗余和异常现象? ④ 用ρ2={DG,AC,CDE,AB}替换R,这个分解是无损分解吗?

⑤ 用ρ3={CDE,AC,DG,BCD}替换R,先求F在ρ3的每个模式上的投影πRi(F),再判断分解ρ3保持FD吗?

解:① D+=DG,C+=ABC,A+=AB,(CD)+=ABCDEG,(AD)+=ABDG,(AC)+=ABC,(ACD)+=ABCDEG。 ② R的候选键只有一个:CD。

③ 用ρ1={CDEG,ABC}替换R,在模式CDEG中,有局部依赖CD→G,此时在关系中,一个D值只有一个G值,但当这个D值与10个C值对应时,就要出现10个元组,则G值就要重复10次。

在模式ABC中,有传递依赖(C→A和A→B),此时在关系中,一个A值只有一个B值,但当这个A值与10个C值对应时,就要出现10个元组,则B值就要重复10次。

④ 用ρ2={DG,AC,CDE,AB}替换R,据chase过程可知,相对于F,R分解成ρ是无损分解。

⑤ 用ρ3={CDE,AC,DG,BCD}替换R, 则F在模式CDE上的投影为{CD→E},F在模式AC上的投影为{C→A}, F在模式DG上的投影为{D→G},F在模式BCD上的投影为{C→B},

显然从这四个投影集中的FD推不出原来F中的A→B,因此分解ρ3不保持FD集。 4.18 设关系模式R(ABCD),F是R上成立的FD集,F={ A→B,B→C,A→D,D→C },

ρ={ AB,AC,BD }是R的一个分解。 ① 相对于F,ρ是无损分解吗?为什么? ② 试求F在ρ的每个模式上的投影。 ③ ρ保持F吗?为什么?

答:①用测试过程可以知道,ρ相对于F是损失分解。

②πAB(F)={ A→B },πAC(F)={ A→C },πBD(F)=φ。

③显然,分解ρ不保持FD集F,丢失了B→C、A→D和D→C等三个FD。 4.19 设关系模式R(ABCD),R上的FD集F={ A→C,D→C,BD→A},试说明ρ={ AB,

ACD,BCD }相对于F是损失分解的理由。

答:据已知的F集,不可能把初始表格修改为有一个全a行的表格,因此ρ相对于F是损失分解。

4.20设关系模式R(ABCD)上FD集为F,并且F={A→B,B→C,D→B}。 ① R分解成ρ={ACD,BD},试求F在ACD和BD上的投影。 ② ACD和BD是BCNF吗?如不是,试分解成BCNF。 解:① F在模式ACD上的投影为{A→C,D→C},F在模式BD上的投影为{D→B}。

② 由于模式ACD的关键码是AD,因此显然模式ACD不是BCNF。模式ACD应分解成{AC,AD}或{CD,AD}。但是这个分解不保持FD,丢失了FD D→C或A→C。 另外,模式BD已是BCNF。

4.21设关系模式R(ABCD),ρ={AB,BC,CD}是R的一个分解。设F1={A→B,B→C},F2=

{B→C,C→D}。

① 如果F1是R上的FD集,此时ρ是否无损分解?若不是,试举出反例。 ② 如果F2是R上的FD集呢?

解:① 据chase过程可知,相对于F1,R分解成ρ是损失分解。 据构造初始表的规则,这个反例可以是下面的表格: r A B C D 1 1 0 0

(2003/9/21) (GJ-DA) (共2页) 目录--39

0 1 1 0 0 0 1 1

对于这个r而言,显然r≠ mρ(r)。

② 据chase过程可知,相对于F2,R分解成ρ是无损分解。 4.22 设关系模式R(ABCD),F是R上成立的FD集,F={ AB→CD,A→D }。

① 试说明R不是2NF模式的理由。 ② 试把R分解成2NF模式集。

答:①从已知FD集F,可知R的候选键是AB。

另外,AB→D是一个局部依赖,因此R不是2NF模式。 ②此时R应分解成ρ={ AD,ABC },ρ是2NF模式集。 4.23 设关系模式R(ABC),F是R上成立的FD集,F={ C→B,B→A }。

① 试说明R不是3NF模式的理由。 ② 试把R分解成3NF模式集。

答:①从已知FD集F,可知R的候选键是C。

从C→B和B→A,可知C→A是一个传递依赖,因此R不是3NF模式。 ②此时R应分解成ρ={ CB,BA },ρ是3NF模式集。

4.24 设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商店

里每个职工的日营业额,以及职工所在的部门和经理信息。

如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。

试回答下列问题:

(1)根据上述规定,写出模式R的基本FD和关键码; (2)说明R不是2NF的理由,并把R分解成2NF模式集; (3)进而分解成3NF模式集。 解:(1)基本的FD有三个: (职工编号,日期)→ 日营业额 职工编号 → 部门名 部门名 → 部门经理 R的关键码为(职工编号,日期)。 (2)R中有两个这样的FD: (职工编号,日期)→(日营业额) 职工编号 → (部门名,部门经理)

可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(职工编号,部门名,部门经理) R2(职工编号,日期,日营业额) 此处,R1和R2都是2NF模式。 (3)R2已是3NF模式。

在R1中,存在两个FD:职工编号 → 部门名

部门名 → 部门经理

因此,“职工编号 → 部门经理”是一个传递依赖,R1不是3NF模式。 R1应分解成R11(职工编号,部门名) R12(部门名,部门经理)

这样,ρ= { R11,R12,R2 }是一个3NF模式集。 4.25 设有关系模式

R(运动员编号,比赛项目,成绩,比赛类别,比赛主管)

存储运动员比赛成绩及比赛类别、主管等信息。

(2003/9/21) (GJ-DA) (共2页) 目录--40

如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。

试回答下列问题:

(1)根据上述规定,写出模式R的基本FD和关键码; (2)说明R不是2NF的理由,并把R分解成2NF模式集; (3)进而分解成3NF模式集。 解:(1)基本的FD有三个: (运动员编号,比赛项目)→ 成绩 比赛项目 → 比赛类别 比赛类别 → 比赛主管 R的关键码为(运动员编号,比赛项目)。 (2)R中有两个这样的FD: (运动员编号,比赛项目)→(比赛类别,比赛主管) 比赛项目 → (比赛类别,比赛主管)

可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(比赛项目,比赛类别,比赛主管) R2(运动员编号,比赛项目,成绩) 这里,R1和R2都是2NF模式。 (3)R2已是3NF模式。

在R1中,存在两个FD:比赛项目 → 比赛类别

比赛类别 → 比赛主管

因此,“比赛项目 → 比赛主管”是一个传递依赖,R1不是3NF模式。 R1应分解成R11(比赛项目,比赛类别) R12(比赛类别,比赛主管)

这样,ρ= { R11,R12,R2 }是一个3NF模式集。 4.26 设关系模式R(ABCD),在R上有五个相应的FD集及分解:

(1)F={ B→C,D→A },ρ={ BC,AD }

(2)F={ AB→C,C→A,C→D },ρ={ ACD,BC } (3)F={ A→BC,C→AD },ρ={ ABC,AD } (4)F={ A→B,B→C,C→D },ρ={ AB,ACD } (5)F={ A→B,B→C,C→D },ρ={ AB,AD,CD } 试对上述五种情况分别回答下列问题: ① 确定R的关键码。 ② 是否无损分解? ③ 是否保持FD集?

④ 确定ρ中每一模式的范式级别。 解:

(1) ① R的关键码为BD。

② ρ不是无损分解。 ③ ρ保持FD集F。

④ ρ中每一模式已达到BCNF级别。 (2) ① R有两个关键码:AB和BC。

② ρ是无损分解。

③ 因为πACD(F)={ C→A ,C→D },πBC(F)=φ(没有非平凡的FD),所以ρ不保持FD,丢失了AB→C。

④ ρ中两模式均已达到BCNF级别。

(2003/9/21) (GJ-DA) (共2页) 目录--41

(3) ① R有两个关键码:A和C

② ρ是无损分解。

③ 因为πABC(F)={ A→BC,C→A },πAD(F)= { A→D },所以ρ保持FD。 ④ 在模式ABC中,关键码是A或BC,属性全是主属性,但有传递依赖(A→BC,BC→A)。因此模式ABC是3NF,但不是BCNF。而模式AD显然已是BCNF。

(4) ① R的关键码为A。

② ρ是无损分解。

③ 因为πAB(F)={ A→B },πACD(F)={ A→C,C→D },从这两个依赖集推不出

原来的B→C,因此ρ不保持FD,丢失了B→C。

④ 模式AB是BCNF,模式ACD不是3NF,只达到2NF级别。 (5) ① R的关键码为A。

② ρ不是无损分解。

③ 因为πAB(F)={ A→B },πAD(F)={ A→D },πCD(F)={ C→D },从这三个

依赖集推不出原来的B→C,因此ρ不保持FD,丢失了B→C。 ④ ρ中每个模式均是BCNF级别。 4.27 设有关系模式R(ABC),h其关系r如图4.2所示。试判断下列FD和MVD在关系r中是否成立?

① A→B ② A→→ B ③ BC→A ④ BC→→A ⑤ B→C ⑥ B→→C

A B C 1 2 3 4 2 3 5 3 3 5 3 4 图4.2 解:① A→B在r中成立, ② A→→B在r中成立 ③ BC→A在r中不成立 ④ BC→→A在r中成立

⑤ B→C在r中不成立 ⑥ B→→C在r中成立

4.28 设有关系模式R(ABCDE),现有R的七个关系,如图4.3所示。试判断FD BC→D和MVD BC→→D分别在这些关系中是否成立? A B C D E ,A B C D E A B C D E a 2 3 4 5 a 2 3 4 5 (空关系) 2 a 3 5 5 2 a 3 5 5 a 2 3 4 6 (a)关系r1 (a)关系r2 (a)关系r3 A B C D E A B C D E A B C D E a 2 3 4 5 A 2 3 4 5 a 2 3 4 5 2 a 3 4 5 2 a 3 7 5 2 a 3 4 5 a 2 3 6 5 A 2 3 4 6 a 2 3 6 5 a 2 3 6 6 (a)关系r4 (a)关系r5 (a)关系r6 A B C D E a 2 3 4 5 a 2 3 6 5 a 2 3 6 6

(2003/9/21) (GJ-DA) (共2页) 目录--42

a 2 3 4 6 (a)关系r7

图4.3

解:BC→D在r1、r2、r3、r5中成立,在r4、r6、r7不成立。 BC→→D在r1、r2、r3、r4、r5、r7中成立,在r6不成立。

4.29 设关系模式R(ABC)上有一个MVD A→→B。如果已知R的当前关系存在三个元组

(ab1c1)、(ab2c2)和(ab3c3),那么这个关系中至少还应该存在哪些元组? 解:这个关系中至少还应存在下面6个元组:(ab1c2),(ab2c1),(ab1c3),(ab3c1),(ab2c3),(ab3c2)。

4.30 在教材P158的例4.20中,模式R(CSPY)上的依赖集D={ SP→Y }。试举r的例子满足SP→Y,但πCS(r)?πCP(r)?π

SPY

(r)≠r。验证这个r不满足MVD C→→S和C→→P。

答:设r为下面的关系:

r C S P Y c1 s1 p1 2001 c1 s2 p1 1999 c1 s2 p2 2000 c1 s1 p2 2003

在r中,有SP→Y成立,但C→→S和C→→P都不成立。譬如在前两个元组中,交换S的值,得到两个元组(c1,s2,p1,2001)和(c1,s1,p1,1999),但在r中找不到这两个元组,可见C→→S在R中不成立。同样,在中间两个元组中,交换P的值,得到两个元组(c1,s2,p2,1999)和(c1,s2,p1,2000),但在r中也找不到这两个元组,可见C→→P在R中也不成立。

关系r在CSP的投影为下面关系: C S P c1 s1 p1 c1 s2 p1 c1 s2 p2 c1 s1 p2 在上面的关系中,可以验证C→→S和C→→P都是成立的。因此多值依赖C→→S和C→→P在模式R(CSPY)中只能是一个嵌入的多值依赖。

4.31 试举出“若X→→Y和Y→→Z,则X→→Z”不成立的一个例子。 解:设R(ABCD),有两个MVD A→→BC和BC→→CD,模式R的关系r值如下所述,显然A→→CD不成立,但A→→D是成立的。

R A B C D a b1 c1 d1 a b2 c2 d2 a b1 c1 d2 a b2 c2 d1

4.32 下面的结论哪些是正确的?哪些是错误的?对于错误,请给出一个反例加以说明。

① 任何一个二元关系模式属于3NF模式。 ② 任何一个二元关系模式属于BCNF模式。 ③ 任何一个二元关系模式属于4NF模式。

(2003/9/21) (GJ-DA) (共2页) 目录--43

④ 任何一个二元关系模式属于5NF模式。

⑤ 若R(ABC)中有A→B和B→C,则有A→C。 ⑥ 若R(ABC)中有A→B和A→C,则有A→BC。 ⑦ 若R(ABC)中有B→A和C→A,则有BC→A。 ⑧ 若R(ABC)中有BC→A,则有B→A和C→A。 解:①、②成立。

③ 不成立。有R(AB)但r=rA?rB(即r=rA×rB)不一定成立。 ④ 与③一样,不成立。 ⑤、⑥、⑦成立 ⑧ 不成立。例如

r A B C 3 1 2 4 1 3 4 2 2 BC→A成立,但B→A和C→A都不成立。 4.33 试撰写2000字短文,论述泛关系假设、无损联接和保持依赖间的联系。 答:这篇短文的要点如下: (1)“泛关系假设”是在谈论数据库时必须存在泛关系情况下再讨论分解。 (2)谈论无损分解的先决条件是泛关系假设。 (3)谈论保持FD时,不提泛关系假设。

(4)无损分解与保持FD之间,没有必然的联系。 (5)满足无损分解的数据库,有r=mρ(r)性质。

(6)满足保持FD的数据库,数据的语义值肯定满足FD。

4.3 自测题

4.3.1 填空题

1.关系模式的操作异常问题往往是由__________引起的。

2.函数依赖完备的推理规则集包括__________、__________和__________。 3.如果Y?X?U,则X→Y成立。这条推理规则称为__________。

4.如果X→Y和WY→Z成立,则WX→Z成立。这条推理规则称为__________。 5.如果X→Y和Y?X成立,那么称X→Y是一个__________。这种FD可以根据推理规则__________律就可推出。 6.“从已知的FD集使用推理规则导出的FD在F+中”,这是推理规则的__________性。 7.“不能从已知的FD集使用推理规则导出的FD不在F+中”,这是推理规则的________性。 8.函数依赖X→Y能从推理规则导出的充分必要条件是__________。

9.被函数依赖集F逻辑蕴涵的函数依赖的全体构成的集合,称为__________,用符号

__________表示。

10.由属性集X函数决定的属性的集合,称为__________,用符号__________表示。 11.在关系模式R中,能函数决定所有属性的属性组,称为模式R的__________。 12.两个函数依赖集F和G等价的充分必要条件是__________。

13.关系模式R有n个属性,则在模式R上可能成立的函数依赖有__________个,其中平凡

的FD有__________个,非平凡的FD有__________个。 14.谈论无损联接的先决条件是作了__________的假设。 15.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={AB→C,D→B },则 F

(2003/9/21) (GJ-DA) (共2页) 目录--44

在模式ACD上的投影为___________;F在模式AC上的投影为___________。 16.消除了非主属性对候选键局部依赖的关系模式,称为__________模式。 17.消除了非主属性对候选键传递依赖的关系模式,称为__________模式。 18.消除了每一属性对候选键传递依赖的关系模式,称为__________模式。

19.在关系模式的分解中,数据等价用__________衡量,依赖等价用__________衡量。 4.3.2 单项选择题(在备选的答案中选出一个正确的答案) 1.在关系模式R中,函数依赖X→Y的语义是 [ ] A.在R的某一关系中,若两个元组的X值相等,则Y值也相等

B.在R的每一关系中,若两个元组的X值相等,则Y值也相等 C.在R的某一关系中,Y值应与X值相等 D.在R的每一关系中,Y值应与X值相等

2.如果X→Y和WY→Z成立,那么WX→Z成立。这条规则称为 [ ] A.增广律 B.传递律 C.伪传递律 D.分解律 3.X→Y能从推理规则导出的充分必要条件是 [ ]

A.Y?X

B.Y?X+

C.X?Y+

D.X+=Y+

4.两个函数依赖集F和G等价的充分必要条件是 [ ]

A.F=G B.F+=G C.F=G+ D.F+=G+ 5.在最小依赖集F中,下面叙述不正确的是 [ ] A.F中每个FD的右部都是单属性

B.F中每个FD的左部都是单属性 C.F中没有冗余的FD

D.F中每个FD的左部没有冗余的属性 6.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={ B→A,D→C },则F+中

左部为(BC)的函数依赖有 [ ] A.2个 B.4个 C.8个 D.16个 7.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={ A→B,B→C,C→D,D

→A },则F+中,左部为(CD)的函数依赖有 [ ] A.2个 B.4个 C.8个 D.16个 8.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={ AB→C,D→A },则属性

集(CD)的闭包(CD)+为 [ ] A.CD B.ACD C.BCD D.ABCD 9.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={ AB→C,D→A },则R的

关键码为 [ ] A.AB B.AD C.BC D.BD

10.在关系模式R分解成ρ={R1,??,Rk}时,R上的关系r和其投影联接表达式mρ(r)之

间满足 [ ]

A.r= mρ(r) B.r?mρ(r) C.mρ(r) ?r D.r≠mρ(r)

11.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ B→A,A→C },ρ={ AB,AC,AD }是R上的一个分解,那么分解ρ相对于F [ ] A.是无损联接分解,也是保持FD的分解

B.是无损联接分解,但不保持FD的分解 C.不是无损联接分解,但保持FD的分解

D.既不是无损联接分解,也不保持FD的分解 12.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ A→B,B→C,C→D, D

(2003/9/21) (GJ-DA) (共2页) 目录--45

→A },ρ={ AB,BC,AD }是R上的一个分解,那么分解ρ相对于F [ ] A.是无损联接分解,也是保持FD的分解

B.是无损联接分解,但不保持FD的分解 C.不是无损联接分解,但保持FD的分解

D.既不是无损联接分解,也不保持FD的分解 13.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ AB→C,D→B },那么F 在

模式ACD上的投影πACD(F)为 [ ] A.{ AB→C,D→B } B.{ AC→D }

C.{ AD→C } D.φ(即不存在非平凡的FD) 14.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ AB→C,D→B },ρ={ ACD,

BD }是R上的一个分解,那么分解ρ [ ] A.保持函数依赖集F B.丢失了AB→C

C.丢失了D→B D.是否保持FD,由R的当前关系确定 15.在关系模式R分解成数据库模式ρ时,谈论无损联接的先决条件是 [ ]

A.数据库模式ρ中的关系模式之间有公共属性 B.保持FD集 C.关系模式R中不存在局部依赖和传递依赖 D.存在泛关系 16.无损联接和保持FD之间的关系是 [ ] A.同时成立或不成立 B.前者蕴涵后者

C.后者蕴涵前者 D.没有必然的联系 4.3.3 简答题

1.为什么要进行关系模式的分解?分解的依据是什么? 2.分解有什么优缺点?

4.4 自测题答案

4.4.1 填空题答案 1.数据冗余 2.自反律 增广律 传递律 3.自反律 4.伪传递律 5.平凡的FD 自反 6.正确 7.完备

8.Y?X+

9.函数依赖集F的闭包 F+ 10.属性集X的闭包 X+ 11.超键(注:不能回答“候选键”) 12.F+= G+(注:不能回答F=G) 13.4n 3n 4n-3n 14.存在泛关系 15.{AD→C } φ(即没有非平凡的函数依赖) 16.2NF 17.3NF 18.BCNF 19.无损联接 保持FD 4.4.2 单项选择题答案

1.B 2.C 3.B 4.D 5.B 6.C 7.D 8.B 9.D 10.B 11.C 12.A 13.C 14.B 15.D 16.D 4.4.3 简答题答案

1.答:由于数据之间存在着联系和约束,在关系模式的关系中可能会存在数据冗余和操作异

常现象,因此需把关系模式进行分解,以消除冗余和异常现象。 分解的依据是数据依赖和模式的标准(范式)。

2.答:分解有两个优点:① 消除冗余和异常;② 在分解了的关系中可存储悬挂元组。

但分解有两个缺点:① 可能分解了的关系不存在泛关系;② 做查询操作,需做联接操作,增加了查询时间。

(2003/9/21) (GJ-DA) (共2页) 目录--46

5.2 教材中习题5的解答

5.1名词解释 (1)·软件工程:研究如何用科学知识、工程方面的纪律指导软件开发的过程,以提高软件质量和开发效率,降低开发成本,这样的一门学科称为“软件工程”。

·软件生存期:软件生存期是指从软件的规划、研制、实现、投入运行后的维护,直到它被新的软件所取代而停止使用的整个期间。软件生存期通常分为六个阶段:规划阶段,需求分析阶段,设计阶段,程序编制阶段,调试阶段,运行维护阶段。

·数据库工程:数据库应用系统的开发是一项软件工程,但又有自己特有的特点,所以特称为“数据库工程”。

·数据库系统生存期:我们把数据库应用系统从开始规划、设计、实现、维护到最后被新的系统取代而停止使用的整个期间,称为数据库系统生存期。这个生存期一般可划分成下面七个阶段:规划,需求分析,概念设计,逻辑设计,物理设计,实现,运行和维护 (2)·实体:可以区别的客观存在的事物,称为实体。 ·实体集:同一类实体构成的集合,称为实体集。 ·实体类型:实体集中实体的定义,称为实体类型。 ·实体标识符:能惟一标识实体的属性或属性集,称为实体标识符。有时也称为关键码(key),或简称为键。 (3)·联系:一个或多个实体之间的关联关系,称为联系。 ·联系集:同一类联系构成的集合,称为联系集。 ·联系类型:联系集中联系的定义,称为联系类型。 (4)·属性:实体的某一特性,称为属性。 ·基本属性:不可再分割的属性,称为基本属性。 ·复合属性:可再分解成其他属性的属性,称为复合属性。 ·单值属性:同一实体的属性只能取一个值,称为单值属性。

·多值属性:同一实体的属性可能取多个值,称为多值属性。

·导出属性:通过具有相互依赖的属性推导而产生的属性,称为导出属性。 (5)·联系:

·联系的元数:一个联系涉及到的实体集个数,称为该联系的元数。 · 联系的连通词:联系涉及到的实体集之间实体对应的方式(指对应一个还是多个实体),称为联系的连通词。

·实体的基数:是对连通词更为精确的描述。譬如有两个实体集E1和E2,E1中每个实体与E2中有联系实体数目的最小值Min和最大值Max,称为E1的基数。 (6)·弱实体:一个实体对于另一些实体(父实体)具有很强的依赖联系,而且该实体主键的部分或全部从其父实体中获得,则称该实体为弱实体。 ·子类实体和超类实体:某个实体类型中所有实体同时也是另一个实体类型中的实体,此时称前一实体类型是后一实体类型的子类,后一实体类型称为超类。其实体分别称为子类实体和超类实体。 ·继承性:指子类继承其超类上定义的所有属性,但其本身还可以包含其他的属性。 5.2 数据库系统的生存期分成哪几个阶段?数据库结构的设计在生存期中的地位如何?

答:对DBS生存期的划分,一般分为七个阶段,即规划、需求分析、概念设计、逻辑设计、物理设计、实现和运行维护。 DB结构设计的任务就是把概念设计阶段设计好的基本ER图转换成与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构。

5.3 基于数据库系统生存期的数据库设计分成哪几个阶段? 答:基于DBS生存期的DBD分成以下五个阶段:

(2003/9/21) (GJ-DA) (共2页) 目录--47

规划;需求描述和分析;概念设计;逻辑设计;物理设计。 5.4 数据库设计的规划阶段应做哪些事情?

答:DBD中规划阶段的主要任务是进行建立DB的必要性及可行性分析,确定DBS在组织中和信息系统中的地位,以及各个DB之间的联系。

5.5 数据库设计的需求分析阶段是如何实现的?目标是什么? 答:需求分析阶段的工作由下面四步组成: ·分析用户活动,产生用户活动图;

·确定系统范围,产生系统范围图; ·分析用户活动所涉及的数据,产生数据流图;

·分析系统数据,产生数据字典。 需求分析阶段的目标是对系统的整个应用情况作全面的、详细的调查,确定企业组织的目标,收集支持系统总的设计目标的基础数据和对这些数据的要求,确定用户的需求;并把这些要求写成用户和数据库设计者都能接受的文档。 5.6 概念设计的具体步骤是什么? 答:概念设计的主要步走可分为三步:

(1) 进行数据抽象,设计局部概念模式; (2) 将局部概念模式综合成全局概念模式; (3) 评审。

5.7 逻辑设计的目的是什么?试述逻辑设计阶段的主要步骤及内容。

答:逻辑设计的目的是把概念设计阶段设计好的基本ER图转换成与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构(包括数据库模式和外模式)。这些模式在功能、性能、完整性和一致性约束及数据库的可扩充性等方面均应满足用户的各种要求。 逻辑设计阶段主要有五步:形成初始模式,设计子模式,设计应用程序梗概,评价模式和修改模式。(解释略)

5.8 什么是数据库结构的物理设计?试述其具体步骤。

答:对于给定的基本数据模型选取一个最适合应用环境的物理结构的过程,称为DB的物理设计。 物理设计有五步: 确定DB的存储记录结构;确定数据存储按排;存取方法的设计;完整性和安全性的设计;应用程序设计。

5.9 数据库实现阶段主要做哪几件事情? 答:数据库实现阶段主要有以下三项工作: 建立实际DB结构;装入试验数据调试应用程序;装入实际数据进入试运行状态。 5.10 数据库系统投入运行后,有哪些维护工作?

答:DBS投入运行以后,就进入运行维护阶段。其主要工作有四项: 维护DB的安全性与完整性及系统的转储和恢复; DB性能的监督、分析与改进; 增加DB新功能; 改正运行中发现的系统错误。

5.11 设某商业集团数据库中有三个实体集。一是“商店”实体集,属性有商店编号、商店名、地址等;二是“商品”实体集,属性有商品号、商品名、规格、单价等;三是“职工”实体集,属性有职工编号、姓名、性别、业绩等。

商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品也可放在多个商店销售,每个商店销售一种商品,有月销售量;商店与职工间存在着“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。

(1) 试画出ER图,并在图上注明属性、联系的类型。

(2003/9/21) (GJ-DA) (共2页) 目录--48

(2) 将ER图转换成关系模型,并注明主键和外键。 解:(1) ER图如图5.1所示。

商店编号 商店名 地址 商店 M 1 月销售量 月薪 销售 聘用 聘期 N N 商品 职工 商品号 商品名 规格 单价 职工编号 姓名 性别 业绩

图5.1

(2)这个ER图可转换4个关系模式: 商店(商店编号,商店名,地址) 职工(职工编号,姓名,性别,业绩,商店编号,聘期,月薪) 商品(商品号,商品名,规格,单价) 销售(商店编号,商品号,月销售量)

5.12 设某商业集团数据库中有三个实体集。一是“公司”实体集,属性有公司编号、公司名、地址等;二是“仓库”实体集,属性有仓库编号、仓库名、地址等;三是“职工”实体集,属性有职工编号、姓名、性别等。

公司与仓库间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;仓库与职工间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工有聘期和工资。

i. 试画出ER图,并在图上注明属性、联系的类型。 ii. 将ER图转换成关系模型,并注明主键和外键。

解:(1) ER图如图5.2所示。

(2003/9/21) (GJ-DA) (共2页) 目录--49

公司编号 公司名 地址 公司 1 隶属 仓库编号 N 仓库 仓库名 地址 1 聘用 聘期 工资 职工 N 职工编号 姓名 性别 图5.2

(2)这个ER图可转换3个关系模式: 公司(公司编号,公司名,地址)

仓库(仓库编号,仓库名,地址,公司编号)

职工(职工编号,姓名,性别,仓库编号,聘期,工资)

5.13 设某商业集团数据库有三个实体集。一是“商品”实体集,属性有商品号、商品名、规格、单价等;二是“商店”实体集,属性有商店号、商店名、地址等;三是“供应商”实体集,属性有供应商编号、供应商名、地址等。

供应商与商品之间存在“供应”联系,每个供应商可供应多种商品,每种商品可向多个供应商订购,每个供应商供应每种商品有个月供应量;商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品可在多个商店销售,每个商店销售每种商品有个月计划数。 试画出反映上述问题的ER图,并将其转换成关系模型。

(2003/9/21) (GJ-DA) (共2页) 目录--50

本文来源:https://www.bwwdw.com/article/bgww.html

Top