FChao
发布于 2026-05-02 / 0 阅读
0
0

数据库系统工程师⑫:关系数据库

1.假设员工关系 EMP(员工号,姓名,性别,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系)如下表所示。

如果一个部门只能有一部电话和一位负责人,

一个员工可以有多个家庭成员,那么关系EMP属于( 1 ),且( 2 )问题;

为了解决这一问题,应该将员工关系EMP分解为( 3 )。

请作答:第 1 题

A 1NF

B 2NF

C 3NF

D BCNF

先仔细观察表,通常只有员工号是唯一的,作为主键,在这道题中,员工号 + 家庭成员 才能唯一确定一行,认为这两个属性组成主键。

其他非主属性只依赖员工号,并不依赖于家庭成员,就变成了部分依赖,不满足第二范式要求,所以只能是第一范式

请作答:第 2 题

C存在冗余,但不存在修改操作的不一致

D存在冗余、修改操作的不一致,以及插入异常和删除异常

2. 是否存在修改操作的不一致?

✅ 存在

如果张晓明的部门电话改了,需要同时修改 3 条记录,否则会出现不一致。

3. 是否存在插入异常?

✅ 存在

例如一个新员工还没有家庭成员,无法插入记录(因为主键不能为空)。

4. 是否存在删除异常?

✅ 存在

如果删除某员工的所有家庭成员记录,该员工的信息就会从表中完全丢失。

请作答:第 3 题

A EMP1(员工号,姓名,性别,家庭住址) EMP2(部门,部门电话,部门负责人) EMP3(员工号,家庭成员,成员关系)

B EMP1(员工号,姓名,性别,部门,家庭住址) EMP2(部门,部门电话,部门负责人) EMP3(员工号,家庭成员,成员关系)

C EMP1(员工号,姓名,性别,家庭住址) EMP2(部门,部门电话,部门负责人,家庭成员,成员关系)

D EMP1(员工号,姓名,性别,部门,部门电话,部门负责人,家庭住址) EMP2(员工号,家庭住址,家庭成员,成员关系)

函数依赖有:

① 员工号 → 姓名,性别,部门,家庭住址

② 部门 → 部门电话,部门负责人

③ (员工号, 家庭成员) → 成员关系

原表中部门电话、部门负责人这两个属性的函数依赖并不依赖于完整的候选键(员工号+家庭成员),而是仅依赖于“部门”。所以部门也得跟着一起拆分。

4.5.6.关系 R、S 如下图所示,关系代数表达式π4,5,3(σ1<6(R×S) )的输出结果与( 4 )等价,该表达式与( 5 )等价。若对关系 R、S 进行自然连接,所得关系的属性列数和元组个数分别为( 6 )。

A

B

C

D

这道题π4,5,3(σ1<6(R×S) )考察的是 关系代数运算,特别是:

笛卡尔积(×):R × S

选择(σ):σ₁<₆

投影(π):π₄,₅,₃

列编号引用(数字表示第几列)

第一步:R × S(笛卡尔积)

R 有 4 行,S 有 4 行 → 结果有 4×4 = 16 行,列数为 3+3=6 列。

关系代数标准定义:R × S 的列顺序是 R 的列全部在前,S 的列全部在后

笛卡尔积的结果是一共有6列,那么:

R 有 3 列 → 占据编号 1、2、3

S 有 3 列 → 占据编号 4、5、6

这6列分别是:

R 的第 1 列(R.A)R 的第 2 列(R.B)R 的第 3 列(R.C)

S 的第 1 列(S.A)S 的第 2 列(S.B)S 的第 3 列(S.C)

第二步:σ₁<₆(选择)

根据第一步的分析,我们知道

σ₁<₆=R 的第 1 列(A) < S 的第 3 列(C)

对每一行组合,判断“R的第1列的值”是否小于“S的第3列的值”

如果条件为真,则保留这一行;如果为假,则丢弃这一行。

具体来说,R.A 的每个值会分别与 S.C 的每个值比较,我们这里看到R.A有四行,是1、3、4、5,S.C有4行,是3、1、3、1

那么RA的第一行的1,要去和SC的四行每一行的值都去做比较

RA SC

1 3 1<3保留,保留的行是:124 533

1 1 不满足丢弃

1 3 1<3保留,保留的行是:124 983

剩下的所有情况都不满足左小于右了

第三步π₄,₅,₃ 投影

从每一行中只取第 4 列、第 5 列、第 3 列,并且按这个顺序组成新的行。

第 4 列 = S.A

第 5 列 = S.B

第 3 列 = R.C

根据上一步的操作,

(R.A=1, R.B=2, R.C=4, S.A=5, S.B=3, S.C=3)

取 4,5,3 列:

→ (S.A=5, S.B=3, R.C=4)

→ (5, 3, 4)

(R.A=1, R.B=2, R.C=4, S.A=9, S.B=8, S.C=3)

→ (S.A=9, S.B=8, R.C=4)

→ (9, 8, 4)

答案选B

第二问,我们已经分析出来了

π₄,₅,₃就是

最后一问:若对关系 R、S 进行自然连接,所得关系的属性列数和元组个数分别为( 6 )。

自然连接的规则:

找 同名属性(两个图列名都是ABC,全相同)

然后,在这些同名属性上做等值连接

1️⃣去重(同名属性只保留一份)

2️⃣去掉不等值的行

R这边的每一行,都与S那边的每一行做匹配

没有任何一行满足 A、B、C 全部相等,自然连接结果有 0 行

属性列数:3

元组个数:0

(即空关系)

7.8.9.若关系 R、S 如下图所示,π1,3,7(σ3<6(R×S))= ( 7 ),且结果集的元组列数和元组个数分别为 ( 8 ) ,R ÷ S= ( 9 ) 。

一共有4+3=7列,前4列R后3列。一共有4行x2行=8行

RA RB RC RD SC SD SE

1 2 3 4 5 6 7

在这两个选项中,要看仔细了 根本不存在RE,

因为S没有SA,所以简写A是可以的,第一张图是正确选项

第二问求结果集

先求σ3<6,也就是RC < SD的行

3 比对 4 3<4 保留 1234 342

9 3<9 保留 1234 893

4 比对 4 不满足

9 4<9 保留 1343 893

8 比对 4 不满足

9 8<9 保留 2489 893

8 比对 4 不满足

9 8<9 保留 1289 893

结果为

1 2 3 4 3 4 2

1 2 3 4 8 9 3

1 3 4 3 8 9 3

2 4 8 9 8 9 3

1 2 8 9 8 9 3

再求投影π₁,₃,₇

1 3 2

1 3 3

1 4 3

2 8 3

1 8 3

共 5 行,3 列。也就是3个属性,5个元祖

第三问求R 除以 S

R:ABCD

S:CDE

除法的结果就是,去除掉被除的相同属性CD,在这种除法中被除的S里面的E不是子集完全不需要考虑,相除的结果就是 ABCD 去掉CD得到AB

有了AB,我们要找出:在所有的(RA,RB)组合中,它在R中的对应的(RC,RD),有哪些是和S中的(C,D)重合的?

所以说除法有个前提, S的属性CD,是R的属性ABCD的子集,满足

RA RB RC RD SC SD

1 2 3 4 3 4

1 2 8 9 8 9

1 3 4 3

2 4 8 9

第一种RA,RB组合:

1,2 它在R中对应的CD是3和4

在S中也能和CD的3和4重合,那么我们就保留这个1,2作为AB的结果

1,2 它在R中对应的CD8是9

在S中也能和CD的8和9重合,那么我们就保留这个1,2作为AB的结果

最后得到满足条件的(A,B)就是1,2

10.给定关系模式R ( U,F) ,U = {A,B,C,D }, F={A→C,A→D,C→B,B→D},F 中的冗余函数依赖为( 10 );

1️⃣A→C

2️⃣A→D

3️⃣B→C

4️⃣D→B

仔细看F条件:因为A→C,C→B,B→D,已经可以得出A→D,所以A→D,冗余

F = {A→C, A→D, C→B, B→D}

  • A→C:知道了 A,就能知道 C(C 依赖于 A)

  • C→B:知道了 C,就能知道 B(B 依赖于 C)

  • B→D:知道了 B,就能知道 D(D 依赖于 B)

第二问:题目中的若将R分解为ρ={AC,CB,BD},

就是将原来有四个属性的表U拆分成3个子表,现在已经不考察拆分成两个以上的复杂情况

A不具有无损连接性,而且不保持函数依赖

B不具有无损连接性,但保持函数依赖

C具有无损连接性,而且保持函数依赖

D具有无损连接性,但不保持函数依赖

原 F 中的所有依赖都能被分解后的子表依赖集推导出来

→ 必然 保持函数依赖

只要分解包含了传递链上的所有相邻依赖,就一定保持函数依赖,因此可立即排除“不保持”的选项(A 和 D)。

如何判断无损连接性?如果是拆分成两部分的情况

假设原 R(A,B,C,D),F={A→C, C→B, B→D},

分解为 R1(A,B,C),R2(C,D)

(R1 ∩ R2) → (R1 - R2) 或 (R1 ∩ R2) → (R2 - R1)则成立

R1 ∩ R2 = {C}

R1 - R2 = {A, B}

检查:C → AB 是否成立?

从 F 有 C→B,但没有 C→A,所以 C → AB 不成立

R2 - R1 = {D}

检查:C → D 是否成立?

从 F 有 C→B→D,所以 C→D 成立 ✅

满足第二条 → 具有无损连接性

整个判断只需 10 秒,不用画表。

12.13.对象关系数据库中,员工(工号,姓名,性别,联系电话)表中的联系电话为多值属性,则员工属于( 非1NF关系 ),在SQL99标准中可以使用( 13 )来实现。

A 集合类型 可以存储多个值的集合(如数组、多重集) 存储一组同类型数据 ✅ 适合

B CLOB 类型 大文本对象 存长文本(如文章、日志) ❌ 不直接支持多值

C BLOB 类型 二进制大对象 存图片、音频、视频 ❌ 不直接支持多值

D 结构类型 类似 C 语言 struct,可组合多个不同类型 用于组合属性(如地址拆分为省、市、街) ❌ 不是用来存多个电话的集合


评论