函数依赖、规范化与 ER 建模

共 66 题
#

1. 3NF 与 BCNF 的差异,BCNF 要求每个非平凡函数依赖的左侧都是超键?

A 任何 3NF 关系都自动满足 BCNF
B BCNF 要求每个非平凡函数依赖的左侧都是超键,因此比 3NF 更严格,且可能牺牲依赖保持性 ✓ 正确答案
C BCNF 允许右侧是主属性但左侧非超键的依赖
D 3NF 与 BCNF 等价,只是叫法不同
#

2. 候选键的求解算法,属性闭包(Attribute Closure)X+ 的计算?

A 候选键是闭包等于全部属性的任意属性集
B 闭包算法要求属性集必须非空
C 闭包只需计算一次即可
D 属性集 K 是候选键当且仅当 K+ 等于全部属性且 K 的任何真子集都不满足 ✓ 正确答案
#

3. 函数依赖(FD)的形式化定义,X → Y 的语义与公理化系统?

A X→Y 表示任意两个元组 X 值不同则 Y 值不同
B X→Y 表示若两个元组 X 值相同则 Y 值必相同,且 Armstrong 公理系统可靠且完备 ✓ 正确答案
C 平凡函数依赖指 X⊆Y 恒成立
D 函数依赖与唯一约束无关
#

4. 最小函数依赖集(Minimal Cover)的求解算法,右部单属性化、去除冗余、化简左侧?

A 右部必须是多属性
B 最小覆盖是唯一的
C 最小覆盖要求右部单属性、无冗余依赖、左侧无冗余属性,且与原始依赖集等价 ✓ 正确答案
D 最小覆盖不需要保持逻辑等价
#

5. 范式选择的约束冲突,高范式 vs 性能(反范式)的实际考量?

A 高范式一定能提升查询性能
B 反范式完全消除更新异常
C 反范式以引入冗余换取更少的 JOIN 与更快的读,但需承担一致性维护成本 ✓ 正确答案
D 数据仓库普遍采用 3NF 高范式
#

6. 连接依赖(JD),五范式与无损分解的关系?

A 5NF 要求每个连接依赖都被候选键蕴含,是所有无损范式中最严格的 ✓ 正确答案
B 连接依赖与函数依赖无关
C 4NF 处理连接依赖,5NF 处理多值依赖
D 无损分解与连接依赖无关
#

7. 更新异常(Update Anomaly)的三种类型与各范式的解决方案?

A 更新异常只有修改异常一种
B 插入、删除、修改三类异常源于冗余,通过规范化消除部分依赖与传递依赖解决 ✓ 正确答案
C 规范化会增加更新异常
D 删除异常与冗余无关
#

8. 传递函数依赖 X → Y → Z 的识别?

A 传递依赖 X→Y→Z 需要 Y 能决定 X
B 传递依赖不影响 3NF
C 存在 学号→系别→系主任 时,系主任对学号是传递依赖,应拆分消除 ✓ 正确答案
D 传递依赖是指 X 直接决定 Z
#

9. 函数依赖 X → Y 与 X → → Y 的区别?

A X→Y 与 X→→Y 完全等价
B 多值依赖比函数依赖更弱,总是成立
C 多值依赖只在 5NF 中出现
D 函数依赖是多值依赖的特例,多值依赖用于解决 4NF 的冗余 ✓ 正确答案
#

10. 非平凡函数依赖 X → Y 中 Y ⊈ X 的含义?

A Y ⊈ X 表示 Y 是 X 的子集
B 非平凡函数依赖 X→Y 中 Y 含 X 之外属性,是规范化分析的对象 ✓ 正确答案
C 平凡函数依赖也会产生冗余
D 非平凡依赖一定成立
#

11. ER 模型到逻辑模型的常见错误,M:N 误拆为 1:N、ISA 误用外键?

A M:N 联系可直接在多方添加外键
B M:N 联系应新建连接表存放两个外键,ISA 继承应用继承映射而非普通外键 ✓ 正确答案
C ISA 继承必须用外键
D 多值属性应直接放在主表中
#

12. ISA 继承的转换,单表继承(Single Table)、类表继承(Class Table)、具体表继承(Concrete Table)?

A 类表继承查询无需 JOIN
B 单表继承无任何缺点
C 单表继承会产生大量 NULL,类表继承需 JOIN,具体表继承会冗余公共字段 ✓ 正确答案
D 具体表继承最适合多态查询
#

13. 一对一(1:1)联系的转换,外键放在哪一侧?

A 1:1 联系必须建中间表
B 外键必须放在部分参与的一侧
C 外键应放在完全参与的一侧,并加 UNIQUE 约束 ✓ 正确答案
D 外键可随机放置,无需约束
#

14. 一对多(1:N)联系的转换,外键放在多方?

A 外键放在一方
B 外键放在多方,且该外键列允许重复 ✓ 正确答案
C 1:N 联系必须建中间表
D 外键列必须唯一
#

15. PostgreSQL 中表继承(INHERITS)的实现,父表查询是否返回子表行?

A 子表不继承父表列
B 查询父表默认不包含子表
C 查询父表默认包含子表行,用 ONLY 可只查父表 ✓ 正确答案
D 父表与子表有强外键约束
#

16. 类表继承(Class Table Inheritance),每个类一张表,主键关联?

A 子表主键同时作为父表外键,保证一一对应,查询需 JOIN ✓ 正确答案
B 子表与父表无关
C 类表继承会产生大量 NULL
D 类表继承查询无需 JOIN
#

17. MySQL 中无原生继承,如何实现(单表加 type 列)?

A 单表 + type 列不会产生 NULL
B MySQL 原生支持 INHERITS
C MySQL 自动为子类建表
D MySQL 无原生继承,常用单表 + type 判别列模拟多态 ✓ 正确答案
#

18. PostgreSQL 中 ONLY 关键字与 INHERITS 的协同?

A ONLY 使查询包含更多子表
B ONLY 限定只操作父表本身,不包含继承的子表 ✓ 正确答案
C ONLY 只用于 DDL
D ONLY 与继承无关
#

19. PostgreSQL 中 partition 与 inheritance 的关系?

A 声明式分区不支持分区裁剪
B 分区与继承完全无关
C 声明式分区底层是继承表,由数据库自动管理,PG 10 之前用继承手工实现分区 ✓ 正确答案
D 继承必须手工加触发器
#

20. PostgreSQL 中约束 INHERIT 与 NO INHERIT?

A 主键约束会自动继承
B CHECK 约束默认继承到子表,NO INHERIT 可阻止其传播 ✓ 正确答案
C 所有约束都默认继承
D NO INHERIT 使约束更强
#

21. 现代 ORM(Hibernate)中的继承映射策略?

A 只有一种映射策略
B SINGLE_TABLE 用判别列区分,JOINED 每个类一张表,TABLE_PER_CLASS 每类一张完整表 ✓ 正确答案
C JOINED 查询无需 JOIN
D TABLE_PER_CLASS 无冗余
#

22. PostgreSQL 中 PERIOD 类型的实现?

A 只能用两列无法用范围类型
B PG 原生支持 PERIOD 类型
C 范围类型无法建索引
D PG 无原生 PERIOD,用范围类型如 tstzrange 表达时期,配合 EXCLUDE 约束控制重叠 ✓ 正确答案
#

23. SQL:2011 时态表(Temporal Table)的标准化,SYSTEM_TIME、APPLICATION_TIME?

A APPLICATION_TIME 描述事务时间
B SYSTEM_TIME 由应用维护
C 时态表只有一种时间维度
D SYSTEM_TIME 由数据库维护事务时间,APPLICATION_TIME 由应用维护有效时间,双时态表同时具备两者 ✓ 正确答案
#

24. 历史快照表(History Table)的设计模式,触发器、CDC、专用审计?

A 触发器历史表强一致但影响性能,CDC 基于日志无侵入,专用审计表依赖应用 ✓ 正确答案
B CDC 影响业务表性能
C 触发器历史表对性能无影响
D 三种模式完全相同
#

25. 审计日志(Audit Log)的实现,触发器、log 表、CDC?

A 触发器审计强一致但影响性能,CDC 基于日志无侵入,独立 log 表灵活但依赖应用 ✓ 正确答案
B 审计日志只记录新值
C 触发器不影响性能
D 审计日志与历史表完全相同
#

26. 有效时间(Valid Time)与事务时间(Transaction Time)的双时态(Bi-Temporal)建模?

A 双时态表只有一个时间维度
B 有效时间与事务时间相同
C 有效时间由应用维护、事务时间由数据库维护,双时态表同时记录两者 ✓ 正确答案
D 事务时间由应用维护
#

27. 闪回查询(Flashback Query)的实现,Oracle SCN、PostgreSQL xmin?

A Oracle 用 AS OF SCN/TIMESTAMP 查询历史,基于 UNDO;PostgreSQL 依赖 MVCC 与 PITR ✓ 正确答案
B PostgreSQL 原生支持 AS OF SCN
C 闪回查询不需要历史数据
D Oracle 与 PostgreSQL 闪回机制相同
#

28. PostgreSQL 中 xmin 隐藏列?

A xmin 记录行的物理位置
B xmin 记录插入该行版本的事务 ID,是 MVCC 可见性判断的基础 ✓ 正确答案
C xmin 与 MVCC 无关
D xmin 是业务主键
#

29. 审计日志的不可篡改性(Hash Chain)?

A 哈希链与审计日志无关
B 哈希链不检测篡改
C 哈希链只保护链尾
D 每条记录包含前一条的哈希,篡改会破坏链完整性从而被检测 ✓ 正确答案
#

30. 闪回恢复(Flashback Recovery)的应用?

A PostgreSQL 原生支持闪回表
B 闪回恢复必须重放整个备份
C Oracle 提供闪回表/闪回数据库等机制,PostgreSQL 通常依赖 WAL 的 PITR 恢复 ✓ 正确答案
D 闪回恢复只能恢复整个数据库
#

31. Armstrong 公理(自反律、增广律、传递律)及其推论(合并律、伪传递律、分解律)的完整推导?

A 合并律由 X→Y 且 X→Z 推出 X→YZ,分解律由 X→YZ 推出 X→Y ✓ 正确答案
B 合并律不能由基本公理推导
C 自反律表示 X→X 恒真因此无意义
D 增广律只在候选键时成立
#

32. 数据冗余(Redundancy)的类型,值冗余、键冗余、计算冗余?

A 所有冗余都应避免
B 值冗余减少 JOIN 但引入一致性风险,计算冗余可用物化视图维护 ✓ 正确答案
C 键冗余增加存储但不影响一致性
D 计算冗余与派生数据无关
#

33. PostgreSQL 表继承(INHERITS)的历史角色,声明式分区出现之前如何用继承实现分区与多态?它有哪些限制?

A 旧式分区完全自动
B 继承 + CHECK + 触发器/规则实现分区,但需手工维护、易出错 ✓ 正确答案
C 继承分区没有分区裁剪
D 触发器分区无需 CHECK 约束
#

34. ER 模型转换为关系模式的基本规则,实体集、联系集、多值属性的转化?

A 多值属性可并入主表
B 多值属性应单独建表,M:N 联系需新建联系表 ✓ 正确答案
C 弱实体不需要独立表
D 1:N 联系外键放一方
#

35. 多元联系(N 元)的转换,复杂多元联系如何分解为二元?

A 多元联系与二元联系语义等价
B 多元联系必须分解为二元联系
C 多元联系直接建一张联系表,保存各参与实体主键,分解为二元联系需谨慎保持语义 ✓ 正确答案
D 多元联系无需联系表
#

36. 多对多(M:N)联系的转换,必须新建联系表(连接表)?

A M:N 必须新建连接表,保存双方外键并携带联系属性 ✓ 正确答案
B M:N 可直接在任一方加外键
C M:N 联系表主键只能是单列
D M:N 无需表达联系属性
#

37. PowerDesigner、ER/Studio、dbdiagram.io 的 ER 建模工具对比?

A dbdiagram.io 不支持 DDL 导出
B 所有工具都免费
C PowerDesigner 是重型商业工具,dbdiagram.io 是轻量在线工具,按团队规模与预算选择 ✓ 正确答案
D PowerDesigner 不支持反向工程
#

38. Chen 记法与 Crow's Foot 记法的差异?

A Chen 用菱形表示联系、椭圆表示属性,Crow's Foot 用连线符号表达基数 ✓ 正确答案
B 两种记法相同
C Crow's Foot 用菱形表示联系
D Chen 记法只用于物理模型
#

39. 具体表继承(Concrete Table Inheritance),每个类一张完整表?

A 具体表继承支持统一多态查询
B 具体表继承无冗余
C 具体表继承查询子类需 JOIN
D 每个子类一张完整表,无 JOIN 但公共字段冗余、多态查询需 UNION ALL ✓ 正确答案
#

40. 单表继承(Single Table Inheritance)的取舍,所有字段在父表,类型列区分?

A 单表继承查询需 JOIN
B 单表继承无 NULL
C 所有字段放一张表,用 type 列区分,查询简单但 NULL 冗余与扩展性差 ✓ 正确答案
D 单表继承不能区分类型
#

41. Partition by Inheritance 的应用?

A 继承分区只在 PG 10 后可用
B 继承分区完全自动
C 继承分区不支持分区裁剪
D 用继承 + CHECK 约束 + 触发器路由实现分区,需手工维护 ✓ 正确答案
#

42. SQL Server 中无继承,多态如何实现?

A SQL Server 无原生继承,可用单表 type 列或类表外键关联模拟多态 ✓ 正确答案
B SQL Server 原生支持 INHERITS
C SQL Server 无法模拟多态
D SQL Server 自动建子表
#

43. SCD Type 2 的实现,effective_date、end_date、is_current 字段?

A 用 effective_date/end_date/is_current 保留历史版本,不覆盖旧记录 ✓ 正确答案
B SCD Type 2 直接覆盖旧记录
C SCD Type 2 不保留历史
D is_current 用于区分列
#

44. 慢变化维(Slowly Changing Dimension, SCD)类型 1、2、3、4、6 的差异?

A Type 1 保留完整历史
B Type 2 直接覆盖
C Type 1 覆盖不保留历史,Type 2 新增版本保留历史,Type 6 是混合方案 ✓ 正确答案
D Type 3 保留全部历史
#

45. 时序数据建模的四种模式,append-only、snapshot、delta、temporal table?

A snapshot 存储开销最小
B append-only 会覆盖旧数据
C append-only 只追加适合高吞吐事件,snapshot 存全量快照开销大,delta 存增量变化 ✓ 正确答案
D delta 存储开销最大
#

46. GDPR / 数据删除请求与历史数据保留的冲突?

A 历史数据必须完整保留
B GDPR 要求删除所有相关数据
C 通过匿名化与数据最小化,在满足删除权的同时保留必要审计与统计 ✓ 正确答案
D 匿名化违反 GDPR
#

47. CDC(Change Data Capture)与历史表的关系?

A CDC 基于日志捕获变更,可写入历史表,对源表无侵入 ✓ 正确答案
B CDC 会侵入业务表
C CDC 与历史表无关
D 触发器是 CDC 的唯一实现
#

48. GDPR 的删除权(Right to Erasure)与历史数据?

A 删除权只要求删除主表
B 删除权需覆盖所有副本,可通过匿名化在保留历史的同时满足删除权 ✓ 正确答案
C 历史数据可以豁免删除权
D 匿名化不满足删除权
#

49. Oracle AS OF TIMESTAMP 的语法?

A 与 UNDO 无关
B 用于闪回查询过去某时刻的数据,受 UNDO 保留期限制 ✓ 正确答案
C 可查询任意历史时刻
D 只支持 SCN 不支持时间戳
#

50. SCD Type 1(覆盖)与 Type 2(保留历史)的差异?

A 两者等价
B Type 1 保留历史
C Type 2 不保留历史
D Type 1 覆盖不保留历史,Type 2 新增版本保留历史,按历史需求选择 ✓ 正确答案
#

51. SYSTEM_TIME PERIOD 的语法?

A 需要手写触发器维护
B 声明系统版本化时态表,数据库自动维护行的生效区间 ✓ 正确答案
C 只支持查询最新版本
D 与事务时间无关
#

52. Triggers-based 历史表的副作用?

A 触发器不影响性能
B 强一致但增加写入开销、维护复杂,且批量/复制工具可能不触发触发器 ✓ 正确答案
C 触发器可移植性好
D 触发器不会导致事务失败
#

53. 时态数据库(Temporal Database)的应用场景?

A 时态数据库只用于 OLTP
B 用于金融审计、合规、SCD 历史、合同有效期等需要回溯时间状态的场景 ✓ 正确答案
C 时态数据库不保留历史
D 时态数据库只存储当前状态
#

54. 4NF、5NF(PJNF)涉及的多值依赖与连接依赖?

A 4NF 基于多值依赖,5NF 基于连接依赖,5NF 是进一步严格化 ✓ 正确答案
B 4NF 基于连接依赖
C 5NF 基于多值依赖
D 4NF 与 5NF 等价
#

55. 多值依赖(MVD)X →→ Y 的语义与 4NF 的关系?

A 每个 MVD 都是函数依赖
B 多值依赖只在 2NF 讨论
C 4NF 与多值依赖无关
D 多值依赖 X→→Y 表示 X 与其余属性独立,4NF 要求非平凡 MVD 左侧是超键 ✓ 正确答案
#

56. 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF(Boyce-Codd NF)的精确定义与逐步严格化?

A BCNF 只要求 1NF
B 2NF 比 3NF 更严格
C 1NF⊇2NF⊇3NF⊇BCNF 逐步严格,逐级消除部分、传递及非超键左部依赖 ✓ 正确答案
D 各范式互不包含
#

57. 1NF 的原子性如何判定?

A 属性值必须不可再分,无重复组与复合属性 ✓ 正确答案
B 1NF 允许重复组
C 1NF 允许数组字段
D 原子性没有判定标准
#

58. 2NF 消除什么类型的部分函数依赖?

A 2NF 消除非主属性对复合候选键的部分函数依赖 ✓ 正确答案
B 2NF 消除传递依赖
C 2NF 只针对单主键
D 2NF 消除连接依赖
#

59. 3NF 分解算法的步骤与正确性,如何从函数依赖集出发逐步消除传递依赖,分解的无损性与依赖保持性如何验证?

A 3NF 分解不需要候选键
B 3NF 分解可能不保持依赖
C 从最小覆盖出发建模式,若某模式含候选键则无损且保持依赖 ✓ 正确答案
D 3NF 分解不保证无损
#

60. BCNF 分解算法的步骤,找出违反 BCNF 的函数依赖并逐步拆分,为什么 BCNF 分解可能牺牲依赖保持性,与 3NF 分解如何取舍?

A BCNF 与 3NF 分解结果相同
B BCNF 分解总能保持依赖
C 3NF 分解可能不无损
D BCNF 分解保证无损但可能丧失依赖保持,3NF 分解总能保持依赖 ✓ 正确答案
#

61. BCNF 比 3NF 更严格之处?

A 两者等价
B BCNF 比 3NF 宽松
C BCNF 要求所有非平凡 FD 左部是超键,3NF 允许左侧非超键但右侧是主属性的依赖 ✓ 正确答案
D 3NF 不允许主属性依赖
#

62. Chen 记法的图形元素?

A 矩形表联系
B 菱形表实体
C 椭圆表联系
D 矩形表实体、菱形表联系、椭圆表属性、双椭圆表多值属性 ✓ 正确答案
#

63. ER 图到 DDL 的基本步骤?

A 多值属性直接并入主表
B 联系无需转成表或外键
C 实体转表、联系按基数转外键或联系表,再补充约束与索引生成 DDL ✓ 正确答案
D 主键可省略
#

64. ER 模型的扩展(EER)?

A EER 不能表达聚合
B EER 与 ER 完全相同
C EER 不支持继承
D EER 在 ER 基础上增加特殊化/泛化(ISA)、聚合等面向对象语义 ✓ 正确答案
#

65. 单表继承的 NULL 列代价?

A 单表继承无 NULL
B NULL 不影响存储
C 大量 NULL 增加存储与扫描成本,且无法对子类特有字段加非空约束 ✓ 正确答案
D NULL 列可加非空约束
#

66. 历史表与当前表的 JOIN 模式?

A 历史表 JOIN 无意义
B 只需按主键等值连接
C 历史表不需时间字段
D 查询某时刻状态需按有效时间区间匹配,而非简单等值连接 ✓ 正确答案