原文筆記

2025-2026-2 计科数据库系统期末

考试科目: 数据库系统 本卷为: 闭卷 本卷为: A 卷 印数: 110 出题院系: 计算机学院 出题日期: 2026 年 4 月 20 日

题号
得分

一、选择题(1 分/题 * 15 题 = 15 分)

  1. 数据库(DB)、数据库管理系统(DBMS)和数据库系统(DBS)三者之间的关系是( )
    A. DB 包含 DBMS 和 DBS
    B. DBS 包含 DB 和 DBMS
    C. DBMS 包含 DB 和 DBS
    D. DBS 就是 DBMS
  2. 数据独立性是指( )
    A. 数据之间相互独立
    B. 应用程序与数据库的数据结构相互独立
    C. 数据存储与数据逻辑相互独立
    D. 数据与操作系统相互独立
  3. 关系数据库中,元组对应传统文件中的( )
    A. 记录
    B. 字段
    C. 文件
    D. 数据项
  4. 关系代数中,从关系中取出满足条件的元组的操作称为( )
    A. 投影
    B. 选择
    C. 连接
    D. 除
  5. SQL 语言中,用于删除表结构的命令是( )
    A. DELETE
    B. DROP
    C. CLEAR
    D. REMOVE
  6. 视图创建完成后,数据字典中存放的是( )
    A. 查询语句
    B. 查询结果
    C. 视图所包含的数据
    D. 视图所依赖的基本表
  7. 数据库触发器的主要作用是( )。
    A. 优化查询执行计划
    B. 提高数据插入速度
    C. 实现用户权限管理
    D. 自动维护数据完整性规则
  8. 将 E-R 图转换为关系模型,属于数据库设计的( )
    A. 需求分析
    B. 概念设计
    C. 逻辑设计
    D. 物理设计
  9. 若一个关系模式 R 属于 1NF,且它的每一个非主属性都完全函数依赖于主键,则 R 属于( )
    A. 1NF
    B. 2NF
    C. 3NF
    D. BCNF
  10. 在数据库中,关于游标的描述,错误的是( )
    A. 游标可以对查询结果集进行逐行处理
    B. 使用游标通常需要经历声明、打开、读取、关闭、释放几个步骤
    C. 游标常用于存储过程中处理复杂的逐行逻辑
    D. 游标能提高大数据量批量操作的执行效率
  11. 数据库中,数据的正确性、有效性和相容性称为( )
    A. 安全性
    B. 完整性
    C. 并发控制
    D. 恢复
  12. 事务的原子性是指( )
    A. 事务要么全做,要么全不做
    B. 事务执行后数据库永远一致
    C. 事务之间相互隔离
    D. 事务提交后结果永久有效
  13. 数据库中,“读脏数据”是由( )引起的
    A. 事务未提交就被其他事务读取
    B. 不可重复读
    C. 幻影读
    D. 死锁
  14. 解决并发操作带来的数据不一致问题,普遍采用( )
    A. 封锁机制
    B. 存取控制
    C. 日志文件
    D. 备份恢复
  15. 在关系代数优化中,下列策略不正确的是( )
    A. 尽可能早地执行选择运算
    B. 尽可能早地执行投影运算
    C. 把选择与笛卡尔积结合转换为等值连接
    D. 先做笛卡尔积,再做选择运算

二、填空题(2 分/空 * 10 空 = 20 分)

  1. 建立冗余数据的方式有 ____
  2. 数据转储的方法有 ____
  3. 查询优化包含两类,有 ____*
  4. 游标是系统为用户开设的一个 __,用来存放 SQL 语句的 __
  5. 数据库工作单元与源程序工作单元之间的通信方式有 ____ 和游标。

三、简答题(5 分/题 * 3 题 = 15 分)

  1. 将 1NF 的函数关系逐步分解为 BCNF,说明每一步消除了什么类型的函数依赖。
  2. 解释共享锁和排他锁的含义,并给出其相容矩阵。
  3. 简述数据库故障的主要分类及各类故障的成因与恢复方式。

四、关系代数及 SQL 语句(4 分/题 * 5 题 = 20 分)

有如下三个关系:

供应商表 Supplier(供应商编号 Sno,供应商名称 Sname,所在城市 City)

零件表 Part(零件编号 Pno,零件名称 Pname,零件规格 Spec)

供应表 Supply(供应商编号 Sno,零件编号 Pno,供应数量 Qty)

写出下列两个问题的关系代数表达式:

  1. 查询所有位于“西安”的供应商名称和供应商编号。
  2. 查询供应了 P1 零件的供应商名称、所在城市及供应数量。

用 SQL 语句回答下列三个问题:

  1. 查询供应商 S1 供应的零件总数(统计字段命名为 Total_Qty)。
  2. 查询供应数量大于 100 的 P2 零件的供应商名称、零件规格及供应数量。
  3. 查询没有供应零件 P3 的供应商信息。

五、数据库设计(共 20 分)

某高校拟开发教学管理信息系统,用于管理学生、专业、课程、教师、学院等核心业务对象,系统需满足以下业务需求:

  • 学生与专业:每个学生主修一个专业,一个专业可招收多名学生;学生需选修多门课程,每门课程可被多名学生选修,需记录学生每门课程的选修成绩。
  • 专业与学院:每个学院可设置多个专业,每个专业仅隶属于一个学院。
  • 课程与学院:每门课程由一个学院开设,一个学院可开设多门课程。
  • 课程与教师:一门课程可由多名教师讲授,一名教师可讲授多门课程,需记录每门课程的授课教室与课时信息。
  • 教师与学院:每名教师隶属于一个学院,一个学院可拥有多名教师。

题目:

  1. 请根据上述业务需求,完成该系统的概念结构设计,绘制对应的 E-R 图,要求标注所有实体型、联系型;标注每个联系的类型(1:1、1:n、m:n);标注联系的属性(如成绩、教室、课时)。(6 分)
  2. 请将该 ER 图转换为关系数据库的关系模式,要求标注每个关系模式的主键和外键。(7 分)
  3. 指出上述关系模式分别为第几范式,为什么。(7 分)

六、SQL 编程(共 10 分)

假设存在一个员工信息表 Employees(emp_id, emp_name, dept_id, salary),请编写一个 SQL 存储过程,要求如下:

存储过程名称:proc_get_employee_name;

输入参数:in_emp_id INT(员工 ID);

输出参数:out_emp_name VARCHAR(50)(员工姓名);

功能要求:

若输入的员工 ID 存在,将该员工的姓名赋值给输出参数;

若输入的员工 ID 不存在或为 NULL,输出参数赋值为“无此员工”。


数据库系统概论题目答案与解析

一、选择题(1 分/题 * 15 题 = 15 分)

1. 题目

数据库(DB)、数据库管理系统(DBMS)和数据库系统(DBS)三者之间的关系是( )

A. DB 包含 DBMS 和 DBS
B. DBS 包含 DB 和 DBMS
C. DBMS 包含 DB 和 DBS
D. DBS 就是 DBMS

答案:B

解析: 数据库系统 DBS 通常由数据库 DB、数据库管理系统 DBMS、应用程序和数据库管理员等组成。因此 DBS 包含 DB 和 DBMS。

2. 题目

数据独立性是指( )

A. 数据之间相互独立
B. 应用程序与数据库的数据结构相互独立
C. 数据存储与数据逻辑相互独立
D. 数据与操作系统相互独立

答案:B

解析: 数据独立性是指应用程序与数据库中数据的逻辑结构、物理存储结构之间具有相对独立性。教材口径中包括逻辑独立性和物理独立性。

3. 题目

关系数据库中,元组对应传统文件中的( )

A. 记录
B. 字段
C. 文件
D. 数据项

答案:A

解析: 关系中的一个元组对应传统文件中的一条记录;属性对应字段。

4. 题目

关系代数中,从关系中取出满足条件的元组的操作称为( )

A. 投影
B. 选择
C. 连接
D. 除

答案:B

解析: 选择运算是从关系中选出满足给定条件的元组,记作 σ\sigma

5. 题目

SQL 语言中,用于删除表结构的命令是( )

A. DELETE
B. DROP
C. CLEAR
D. REMOVE

答案:B

解析: DROP TABLE 用于删除基本表的定义及其数据;DELETE 只删除表中的数据,不删除表结构。

6. 题目

视图创建完成后,数据字典中存放的是( )

A. 查询语句
B. 查询结果
C. 视图所包含的数据
D. 视图所依赖的基本表

答案:A

解析: 视图是虚表。数据库中只保存视图的定义,即查询语句,不保存视图对应的查询结果。

7. 题目

数据库触发器的主要作用是( )。

A. 优化查询执行计划
B. 提高数据插入速度
C. 实现用户权限管理
D. 自动维护数据完整性规则

答案:D

解析: 触发器可在插入、删除、修改数据时自动执行,常用于实现复杂的完整性约束和业务规则。

8. 题目

将 E-R 图转换为关系模型,属于数据库设计的( )

A. 需求分析
B. 概念设计
C. 逻辑设计
D. 物理设计

答案:C

解析: E-R 图属于概念结构设计成果,将 E-R 图转换为关系模式属于逻辑结构设计。

9. 题目

若一个关系模式 R 属于 1NF,且它的每一个非主属性都完全函数依赖于主键,则 R 属于( )

A. 1NF
B. 2NF
C. 3NF
D. BCNF

答案:B

解析: 2NF 的要求是在 1NF 基础上,每一个非主属性都完全函数依赖于任何一个候选码,消除非主属性对码的部分函数依赖。

10. 题目

在数据库中,关于游标的描述,错误的是( )

A. 游标可以对查询结果集进行逐行处理
B. 使用游标通常需要经历声明、打开、读取、关闭、释放几个步骤
C. 游标常用于存储过程中处理复杂的逐行逻辑
D. 游标能提高大数据量批量操作的执行效率

答案:D

解析: 游标适合逐行处理复杂逻辑,但通常效率低于集合操作。大数据量批量操作一般不应优先使用游标。

11. 题目

数据库中,数据的正确性、有效性和相容性称为( )

A. 安全性
B. 完整性
C. 并发控制
D. 恢复

答案:B

解析: 数据库完整性是指数据的正确性、有效性和相容性。

12. 题目

事务的原子性是指( )

A. 事务要么全做,要么全不做
B. 事务执行后数据库永远一致
C. 事务之间相互隔离
D. 事务提交后结果永久有效

答案:A

解析: 原子性要求事务中的操作要么全部完成,要么全部不做。

13. 题目

数据库中,“读脏数据”是由( )引起的

A. 事务未提交就被其他事务读取
B. 不可重复读
C. 幻影读
D. 死锁

答案:A

解析: 读脏数据是指一个事务读取了另一个事务尚未提交的数据。

14. 题目

解决并发操作带来的数据不一致问题,普遍采用( )

A. 封锁机制
B. 存取控制
C. 日志文件
D. 备份恢复

答案:A

解析: 并发控制中普遍采用封锁机制来保证事务调度的正确性,防止数据不一致。

15. 题目

在关系代数优化中,下列策略不正确的是( )

A. 尽可能早地执行选择运算
B. 尽可能早地执行投影运算
C. 把选择与笛卡尔积结合转换为等值连接
D. 先做笛卡尔积,再做选择运算

答案:D

解析: 关系代数优化通常应尽早执行选择和投影,减少中间结果规模。先做笛卡尔积会产生大量无用中间结果,因此不正确。


二、填空题(2 分/空 * 10 空 = 20 分)

1. 题目

建立冗余数据的方式有 **__** 和 **__**

答案: 数据转储;登记日志文件

解析: 数据库恢复的基本原理是利用冗余数据。建立冗余数据最常用的技术是数据转储和登记日志文件。

2. 题目

数据转储的方法有 **__** 和 **__**

答案: 静态转储;动态转储

解析: 按转储期间是否允许事务运行,可分为静态转储和动态转储。补充:若按转储范围划分,也可分为海量转储和增量转储。

3. 题目

查询优化包含两类,有 **__** 和 **__**

答案: 代数优化;物理优化

解析: 查询优化通常包括代数优化和物理优化。代数优化主要改变查询语句中操作的次序和组合;物理优化主要选择合适的存取路径和执行算法。

4. 题目

游标是系统为用户开设的一个 **__**,用来存放 SQL 语句的 **__**

答案: 数据缓冲区;执行结果

解析: 游标用于处理 SQL 查询结果集。它相当于系统为用户开设的数据缓冲区,用来存放 SQL 语句的执行结果。

5. 题目

数据库工作单元与源程序工作单元之间的通信方式有 **__**、**__** 和游标。

答案: SQL 通信区;主变量

解析: 嵌入式 SQL 中,数据库工作单元和源程序工作单元之间主要通过 SQL 通信区、主变量和游标进行通信。


三、简答题(5 分/题 * 3 题 = 15 分)

1. 题目

将 1NF 的函数关系逐步分解为 BCNF,说明每一步消除了什么类型的函数依赖。

答案与解析:

从 1NF 到 BCNF 的规范化过程如下:

  1. 1NF → 2NF
    要求: 在 1NF 的基础上,每一个非主属性都完全函数依赖于任何一个候选码。
    消除的问题: 消除非主属性对码的部分函数依赖。
    即若存在: XKX \subset K,且 XAX \to A
    其中 KK 是候选码,AA 是非主属性,则说明 AA 部分依赖于码,需要分解。
  2. 2NF → 3NF
    要求: 在 2NF 的基础上,每一个非主属性都不传递依赖于候选码。
    消除的问题: 消除非主属性对码的传递函数依赖。
    即若存在: KXK \to XXAX \to A,且 XX 不是候选码,AA 是非主属性
    则有: KAK \to A
    这种依赖属于传递依赖,需要分解。
  3. 3NF → BCNF
    要求: 对于关系模式中的每一个非平凡函数依赖 XYX \to YXX 必须包含候选码,即 XX 必须是超码。
    消除的问题: 消除所有决定因素不是候选码的函数依赖。
    换句话说,BCNF 比 3NF 更严格,不仅要求非主属性不能部分依赖、传递依赖于码,还要求任何函数依赖的决定因素都必须是码。

2. 题目

解释共享锁和排他锁的含义,并给出其相容矩阵。

答案与解析:

  1. 共享锁,简称 S 锁
    若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读取 A,但不能修改 A。
    其他事务可以再对 A 加 S 锁,但不能对 A 加 X 锁。
  2. 排他锁,简称 X 锁
    若事务 T 对数据对象 A 加上 X 锁,则事务 T 可以读取和修改 A。
    其他事务不能再对 A 加 S 锁,也不能对 A 加 X 锁。
  3. 相容矩阵
已加锁 \ 申请锁S 锁X 锁
S 锁相容不相容
X 锁不相容不相容

解析: 共享锁之间相容,因为多个事务可以同时读同一个数据对象;排他锁与任何锁都不相容,因为修改数据时必须保证独占访问。

3. 题目

简述数据库故障的主要分类及各类故障的成因与恢复方式。

答案与解析:

数据库故障主要包括事务故障、系统故障、介质故障和计算机病毒等。

  1. 事务故障
    成因: 某个事务在运行过程中因输入错误、运算溢出、违反完整性约束、死锁等原因不能继续执行。
    恢复方式: 撤销该事务已经对数据库所做的修改,即执行 UNDO,使数据库恢复到事务开始前的状态。
  2. 系统故障
    成因: 操作系统故障、DBMS 故障、停电、硬件瞬时故障等,导致系统停止运行,但磁盘数据一般没有破坏。
    恢复方式: 系统重新启动后,根据日志文件:
    • 撤销故障发生时尚未提交的事务;
    • 重做故障发生前已经提交但其结果可能尚未写入数据库的事务。
  3. 介质故障
    成因: 磁盘损坏、磁头碰撞、强磁干扰等导致数据库或日志文件部分或全部丢失。
    恢复方式: 利用最近一次数据转储副本恢复数据库,然后利用日志文件重做转储以后已经提交的事务。
  4. 计算机病毒
    成因: 恶意程序破坏数据库文件或日志文件。
    恢复方式: 先清除病毒,再利用备份副本和日志文件进行恢复。实际系统中还需要加强安全控制和备份管理。

四、关系代数及 SQL 语句(4 分/题 * 5 题 = 20 分)

已知关系:

供应商表 Supplier(供应商编号 Sno,供应商名称 Sname,所在城市 City)

零件表 Part(零件编号 Pno,零件名称 Pname,零件规格 Spec)

供应表 Supply(供应商编号 Sno,零件编号 Pno,供应数量 Qty)

1. 题目

查询所有位于“西安”的供应商名称和供应商编号。

答案:

关系代数表达式:

πSname,Sno(σCity=西(Supplier))\pi_{Sname, Sno}(\sigma_{City='西安'}(Supplier))

解析: 先用选择运算 σ\sigma 选出 City 为“西安”的供应商,再用投影运算 π\pi 取出供应商名称和供应商编号。

2. 题目

查询供应了 P1 零件的供应商名称、所在城市及供应数量。

答案:

关系代数表达式:

πSname,City,Qty(σPno=P1(SupplierSupplier.Sno=Supply.SnoSupply))\pi_{Sname, City, Qty}(\sigma_{Pno='P1'}(Supplier \bowtie_{Supplier.Sno=Supply.Sno} Supply))

解析: 先将 Supplier 与 Supply 按供应商编号连接,再选择 Pno 为 P1 的元组,最后投影出供应商名称、所在城市和供应数量。

3. 题目

查询供应商 S1 供应的零件总数(统计字段命名为 Total_Qty)。

答案:

SQL Server 语句:

SELECT ISNULL(SUM(Qty), 0) AS Total_Qty
FROM Supply
WHERE Sno = 'S1';

解析: SUM(Qty) 用于统计供应数量总和。使用 ISNULL 是为了避免 S1 没有供应记录时返回 NULL。

4. 题目

查询供应数量大于 100 的 P2 零件的供应商名称、零件规格及供应数量。

答案:

SQL Server 语句:

SELECT
    s.Sname,
    p.Spec,
    sp.Qty
FROM Supplier AS s
JOIN Supply AS sp
    ON s.Sno = sp.Sno
JOIN Part AS p
    ON sp.Pno = p.Pno
WHERE sp.Pno = 'P2'
  AND sp.Qty > 100;

解析: 该查询需要同时使用供应商表、零件表和供应表。通过 Sno 连接供应商和供应关系,通过 Pno 连接零件和供应关系。

5. 题目

查询没有供应零件 P3 的供应商信息。

答案:

SQL Server 语句:

SELECT
    s.Sno,
    s.Sname,
    s.City
FROM Supplier AS s
WHERE NOT EXISTS (
    SELECT 1
    FROM Supply AS sp
    WHERE sp.Sno = s.Sno
      AND sp.Pno = 'P3'
);

解析: NOT EXISTS 表示不存在对应记录。该语句查询在 Supply 表中不存在供应 P3 记录的供应商。


五、数据库设计(共 20 分)

题目背景:

某高校拟开发教学管理信息系统,用于管理学生、专业、课程、教师、学院等核心业务对象,系统需满足以下业务需求:

  • 学生与专业:每个学生主修一个专业,一个专业可招收多名学生;学生需选修多门课程,每门课程可被多名学生选修,需记录学生每门课程的选修成绩。
  • 专业与学院:每个学院可设置多个专业,每个专业仅隶属于一个学院。
  • 课程与学院:每门课程由一个学院开设,一个学院可开设多门课程。
  • 课程与教师:一门课程可由多名教师讲授,一名教师可讲授多门课程,需记录每门课程的授课教室与课时信息。
  • 教师与学院:每名教师隶属于一个学院,一个学院可拥有多名教师。

1. 题目

请根据上述业务需求,完成该系统的概念结构设计,绘制对应的 E-R 图,要求标注所有实体型、联系型;标注每个联系的类型(1:1、1:n、m:n);标注联系的属性(如成绩、教室、课时)。(6 分)

答案:

实体型:

  1. 学生:Student
  2. 专业:Major
  3. 课程:Course
  4. 教师:Teacher
  5. 学院:College

联系型:

  1. 学生 —— 主修 —— 专业
    联系类型:n:1
    含义:每个学生主修一个专业,一个专业可招收多名学生。
  2. 学生 —— 选修 —— 课程
    联系类型:m:n
    联系属性:成绩 Grade
    含义:一个学生可选修多门课程,一门课程可被多名学生选修。
  3. 学院 —— 设置 —— 专业
    联系类型:1:n
    含义:一个学院可设置多个专业,一个专业只隶属于一个学院。
  4. 学院 —— 开设 —— 课程
    联系类型:1:n
    含义:一个学院可开设多门课程,一门课程只由一个学院开设。
  5. 学院 —— 拥有/隶属 —— 教师
    联系类型:1:n
    含义:一个学院可拥有多名教师,一名教师只隶属于一个学院。
  6. 教师 —— 讲授 —— 课程
    联系类型:m:n
    联系属性:教室 Classroom,课时 Hours
    含义:一名教师可讲授多门课程,一门课程可由多名教师讲授。

E-R 图文字表示:

学院 College 1 —— 设置 —— n 专业 Major

专业 Major 1 —— 主修 —— n 学生 Student

学生 Student m —— 选修 —— n 课程 Course | 成绩 Grade

学院 College 1 —— 开设 —— n 课程 Course

学院 College 1 —— 拥有/隶属 —— n 教师 Teacher

教师 Teacher m —— 讲授 —— n 课程 Course | 教室 Classroom,课时 Hours

解析: E-R 图的核心是识别实体型和联系型。1:n 联系通常可以通过在 n 端加入外键实现;m:n 联系通常需要单独转换为一个关系模式。

2. 题目

请将该 ER 图转换为关系数据库的关系模式,要求标注每个关系模式的主键和外键。(7 分)

答案:

  1. 学院表 College

College( CollegeID, CollegeName )

主键: CollegeID

  1. 专业表 Major

Major( MajorID, MajorName, CollegeID )

主键: MajorID

外键: CollegeID REFERENCES College(CollegeID)

  1. 学生表 Student

Student( StudentID, StudentName, MajorID )

主键: StudentID

外键: MajorID REFERENCES Major(MajorID)

  1. 课程表 Course

Course( CourseID, CourseName, CollegeID )

主键: CourseID

外键: CollegeID REFERENCES College(CollegeID)

  1. 教师表 Teacher

Teacher( TeacherID, TeacherName, CollegeID )

主键: TeacherID

外键: CollegeID REFERENCES College(CollegeID)

  1. 选修表 SC

SC( StudentID, CourseID, Grade )

主键: (StudentID, CourseID)

外键: StudentID REFERENCES Student(StudentID)

外键: CourseID REFERENCES Course(CourseID)

  1. 授课表 Teaching

Teaching( TeacherID, CourseID, Classroom, Hours )

主键: (TeacherID, CourseID)

外键: TeacherID REFERENCES Teacher(TeacherID)

外键: CourseID REFERENCES Course(CourseID)

解析: 1:n 联系可以在 n 端加入外键,例如 Student 中加入 MajorID。 m:n 联系需要单独转换为关系模式,例如 SC 和 Teaching。 联系的属性应放入由该联系转换成的关系模式中,因此 Grade 放入 SC,Classroom 和 Hours 放入 Teaching。

3. 题目

指出上述关系模式分别为第几范式,为什么。(7 分)

答案:

在以下基本函数依赖假设下:

  1. CollegeID → CollegeName
  2. MajorID → MajorName, CollegeID
  3. StudentID → StudentName, MajorID
  4. CourseID → CourseName, CollegeID
  5. TeacherID → TeacherName, CollegeID
  6. (StudentID, CourseID) → Grade
  7. (TeacherID, CourseID) → Classroom, Hours

各关系模式范式如下:

  1. College(CollegeID, CollegeName)
    范式:BCNF
    原因: 其唯一非平凡函数依赖为 CollegeID → CollegeName,决定因素 CollegeID 是候选码。
  2. Major(MajorID, MajorName, CollegeID)
    范式:BCNF
    原因: MajorID 是主键,MajorName 和 CollegeID 都完全函数依赖于 MajorID,不存在部分依赖和传递依赖。
  3. Student(StudentID, StudentName, MajorID)
    范式:BCNF
    原因: StudentID 是主键,StudentName 和 MajorID 都完全函数依赖于 StudentID,且决定因素是候选码。
  4. Course(CourseID, CourseName, CollegeID)
    范式:BCNF
    原因: CourseID 是主键,CourseName 和 CollegeID 都完全函数依赖于 CourseID,不存在非主属性对码的部分依赖和传递依赖。
  5. Teacher(TeacherID, TeacherName, CollegeID)
    范式:BCNF
    原因: TeacherID 是主键,TeacherName 和 CollegeID 都完全函数依赖于 TeacherID,决定因素是候选码。
  6. SC(StudentID, CourseID, Grade)
    范式:BCNF
    原因: 主键为 (StudentID, CourseID),Grade 表示某学生选修某课程的成绩,完全函数依赖于整个主键:
    (StudentID,CourseID)Grade(StudentID, CourseID) \to Grade
    Grade 不依赖于 StudentID 或 CourseID 的某一部分,因此不存在部分函数依赖,也不存在传递函数依赖。
  7. Teaching(TeacherID, CourseID, Classroom, Hours)
    范式:BCNF
    原因: 主键为 (TeacherID, CourseID),Classroom 和 Hours 表示某教师讲授某课程时的教室和课时信息,完全函数依赖于整个主键:
    (TeacherID,CourseID)Classroom,Hours(TeacherID, CourseID) \to Classroom, Hours
    因此不存在部分依赖和传递依赖,且决定因素是候选码。

总结: 上述关系模式在属性原子性的基础上,非主属性均完全依赖于候选码,且不存在非主属性对候选码的传递依赖;进一步看,每个非平凡函数依赖的决定因素都是候选码,因此均可认为达到 BCNF。


六、SQL 编程(共 10 分)

题目

假设存在一个员工信息表 Employees(emp_id, emp_name, dept_id, salary),请编写一个 SQL 存储过程,要求如下:

存储过程名称:proc_get_employee_name;

输入参数:in_emp_id INT(员工 ID);

输出参数:out_emp_name VARCHAR(50)(员工姓名);

功能要求:

若输入的员工 ID 存在,将该员工的姓名赋值给输出参数;

若输入的员工 ID 不存在或为 NULL,输出参数赋值为“无此员工”。

答案:

SQL Server 存储过程:

IF OBJECT_ID(N'dbo.proc_get_employee_name', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.proc_get_employee_name;
END;
GO

CREATE PROCEDURE dbo.proc_get_employee_name
@in_emp_id INT,
@out_emp_name VARCHAR(50) OUTPUT
AS
BEGIN
SET NOCOUNT ON;

    IF @in_emp_id IS NULL
       OR NOT EXISTS (
            SELECT 1
            FROM dbo.Employees
            WHERE emp_id = @in_emp_id
       )
    BEGIN
        SET @out_emp_name = '无此员工';
        RETURN;
    END;

    SELECT @out_emp_name = emp_name
    FROM dbo.Employees
    WHERE emp_id = @in_emp_id;

END;
GO

解析:

  1. IF OBJECT_ID(...) IS NOT NULL 用于判断存储过程是否已经存在,若存在则先删除,避免重复创建时报错。
  2. @in_emp_id 是输入参数,@out_emp_name 是输出参数。
  3. 如果 @in_emp_id 为 NULL,或者 Employees 表中不存在该员工编号,则将输出参数赋值为“无此员工”。
  4. 如果员工存在,则通过 SELECT @out_emp_name = emp_name 将员工姓名赋值给输出参数。

调用示例:

DECLARE @name VARCHAR(50);

EXEC dbo.proc_get_employee_name
@in_emp_id = 1,
@out_emp_name = @name OUTPUT;

SELECT @name AS emp_name;