过程性语言 非过程性语言 编程时,必须指出“怎么干” 编程时,不必指出“怎么干” 由用户进行数据导航 由系统进行数据导航 单记录处理方式 集合处理方式 属于3GL范畴 属于4GL范畴 C语言,层次、网状DML等 关系DML,软件开发工具等 图2.1 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 4 4 3 S A B C 3 4 5 7 2 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)
7 4
A B C 2 4
3 3
2<2
R∩S A B C 7 2 3
π3,2(S) C B 5 4 3 2
R?S R.A R.B R.C S.A S.B S.C
7
2
3
3
4
5
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? 0 ∩V ? ⑵ ? max(m,n U ) ∪V ? ⑶ U ? 0 ? V ? ⑷ σ F ? 最大元 组数 ? min(m,n) ? m+n ? m×n (U)×V ? ⑸ π L ? 0 ? m×n (U)-V ? 0 ? 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 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) π2,3(S):{ t1t2t3 | (?u3) (?v1) | R(t1t2u3) ∧ S(v1t2t3)} ? 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)) 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])}