一、AI 讲解
数据库范式是一系列规范条件的集合,这些规范条件定义了数据库表结构的合理性,以减少数据冗余和改善数据的逻辑结构。主要的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和巴斯-科德范式(BCNF)。每个高级范式都建立在前一个范式的基础上。
第一范式(1NF)
定义:一个表的每个列都不可再分,且每列中的数据都是原子数据项。
示例:
学号 | 姓名 | 课程 |
---|---|---|
S001 | 张三 | 数据库管理, 计算机网络 |
不满足1NF,因为“课程”这一列中含有多个课程名称,可再分。
调整后:
学号 | 姓名 | 课程 |
---|---|---|
S001 | 张三 | 数据库管理 |
S001 | 张三 | 计算机网络 |
第二范式(2NF)
定义:在1NF的基础上,消除了非主属性对于码的部分函数依赖。
示例:
学号 | 课程 | 成绩 | 教师 |
---|---|---|---|
S001 | 数据库管理 | 90 | 李四 |
S001 | 计算机网络 | 85 | 王五 |
假设学号+课程是主键,成绩和教师是非主属性,不存在非主属性对主键的部分依赖,因此满足2NF。
第三范式(3NF)
定义:在2NF的基础上,消除了非主属性对于码的传递函数依赖。
示例:
学号 | 课程 | 成绩 | 教师ID | 教师名 |
---|---|---|---|---|
S001 | 数据库管理 | 90 | T01 | 李四 |
S001 | 计算机网络 | 85 | T02 | 王五 |
假设教师名依赖于教师ID,而教师ID依赖于学号+课程(主键),存在传递依赖。需要将表分解。
调整后:
学生课程表:
学号 | 课程 | 成绩 | 教师ID |
---|---|---|---|
S001 | 数据库管理 | 90 | T01 |
S001 | 计算机网络 | 85 | T02 |
教师表:
教师ID | 教师名 |
---|---|
T01 | 李四 |
T02 | 王五 |
BCNF(巴斯-科德范式)
定义:在3NF的基础上,消除了主属性对码的部分或传递函数依赖。
示例:
假设存在一个表:
学号 | 课程代码 | 课程名称 | 教师 |
---|---|---|---|
S001 | C01 | 数据库管理 | 李四 |
S001 | C02 | 计算机网络 | 王五 |
如果“课程代码”决定了“课程名称”和“教师”,则存在主属性对主键的依赖(即课程代码对学号+课程代码的依赖),违反了BCNF。
调整后分为两个表:
学生课程表:
学号 | 课程代码 |
---|---|
S001 | C01 |
S001 | C02 |
课程信息表:
课程代码 | 课程名称 | 教师 |
---|---|---|
C01 | 数据库管理 | 李四 |
C02 | 计算机网络 | 王五 |
二、AI 出题
(1)题目
-
下列哪项不是第一范式(1NF)的要求?
- A. 数据表的每个列都不可以再分
- B. 每一列的值必须是单一的数据项
- C. 消除了所有的部分函数依赖
- D. 确保表中的每个列的值都与主键直接相关
-
第二范式(2NF)是基于哪个范式之上的?
- A. 1NF
- B. 3NF
- C. BCNF
- D. 4NF
-
消除非主属性对码的哪种依赖是第二范式(2NF)的主要目标?
- A. 部分函数依赖
- B. 完全函数依赖
- C. 传递函数依赖
- D. 多值依赖
-
第三范式(3NF)主要解决什么问题?
- A. 数据的原子性问题
- B. 非主属性对主键的部分依赖问题
- C. 非主属性对主键的传递函数依赖问题
- D. 多值依赖问题
-
下列哪项是BCNF范式相对于3NF更严格要求的方面?
- A. 数据项的原子性
- B. 非主属性的依赖关系
- C. 主属性对码的依赖
- D. 外键约束
-
如果一个关系模式R满足BCNF,则一定满足:
- A. 1NF但不一定
满足2NF
- B. 2NF但不一定满足3NF
- C. 3NF和2NF
- D. 1NF, 2NF和3NF
-
在数据库设计中,范式的提升通常意味着什么?
- A. 增加数据冗余
- B. 减少查询效率
- C. 减少数据冗余
- D. 增加更新异常
-
一个关系模式处于3NF,但不在BCNF中,可能是因为:
- A. 有非主属性部分依赖于主键
- B. 有非主属性传递依赖于主键
- C. 主属性对主键有部分依赖
- D. 主属性对主键有传递依赖
-
要将一个表设计成第一范式(1NF),下列哪个操作是必要的?
- A. 添加更多的行
- B. 将复合属性分解成多个简单属性
- C. 合并多个表
- D. 引入外键
-
哪种范式要求一个表中不应存在非主属性对另一非主属性的依赖?
- A. 1NF
- B. 2NF
- C. 3NF
- D. BCNF
(2)答案和解析
-
C. 消除了所有的部分函数依赖
- 解析:第一范式(1NF)的要求是确保表中的每个字段都是不可分的原子数据项,而不是消除部分函数依赖,这是第二范式(2NF)的目标。
-
A. 1NF
- 解析:第二范式(2NF)是在第一范式(1NF)的基础上建立的,其目的是消除非主属性对主键的部分函数依赖。
-
A. 部分函数依赖
- 解析:第二范式(2NF)的主要目标是消除非主属性对码(主键)的部分函数依赖,确保每个非主属性完全函数依赖于主键。
-
C. 非主属性对主键的传递函数依赖问题
- 解析:第三范式(3NF)主要解决的是非主属性对主键的传递函数依赖问题,即一个非主属性依赖于另一个非主属性,而后者依赖于主键。
-
C. 主属性对码的依赖
- 解析:BCNF比3NF更严格,在于它还要求主属性(即参与组成主键的属性)不能对主键的任何部分存在依赖,这超出了3NF的要求。
-
D. 1NF, 2NF和3NF
- 解析:如果一个关系模式满足BCNF,那么它一定也满足1NF、2NF和3NF,因为BCNF是在这些范式的基础上进一步加强约束的范式。
-
C. 减少数据冗余
- 解析:提升数据库设计的范式级别,通常意味着通过消除数据冗余来优化数据库结构,这有助于减少存储空间和维护成本。
-
C. 主属性对主键有部分依赖
- 解析:如果一个关系模式处于3NF但不处于BCNF,可能的原因是存在主属性(组成候选键的属性)对码(主键)的部分依赖或传递依赖,BCNF要求消除这种依赖。
-
B. 将复合属性分解成多个简单属性
- 解析:要将一个表设计成第一范式(1NF),必须确保表中的每个字段都是原子的,不能被进一步分解,因此需要将复合属性分解成多个简单属性。
-
C. 3NF
- 解析:第三范式(3NF)要求一个表中不应存在非主属性对另一非主属性的依赖,即消除了传递依赖。
三、真题