软考高级架构师:数据库的范式 1NF 、2NF 、3NF 和 BCNF

本文详细介绍了数据库范式,包括第一范式、第二范式、第三范式和巴斯-科德范式,阐述了各范式之间的关系以及它们如何帮助消除数据冗余和改进数据结构。同时,通过实例和真题分析了各范式的要求和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、AI 讲解

数据库范式是一系列规范条件的集合,这些规范条件定义了数据库表结构的合理性,以减少数据冗余和改善数据的逻辑结构。主要的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和巴斯-科德范式(BCNF)。每个高级范式都建立在前一个范式的基础上。

第一范式(1NF)

定义:一个表的每个列都不可再分,且每列中的数据都是原子数据项。

示例

学号姓名课程
S001张三数据库管理, 计算机网络

不满足1NF,因为“课程”这一列中含有多个课程名称,可再分。

调整后:

学号姓名课程
S001张三数据库管理
S001张三计算机网络

第二范式(2NF)

定义:在1NF的基础上,消除了非主属性对于码的部分函数依赖。

示例

学号课程成绩教师
S001数据库管理90李四
S001计算机网络85王五

假设学号+课程是主键,成绩和教师是非主属性,不存在非主属性对主键的部分依赖,因此满足2NF。

第三范式(3NF)

定义:在2NF的基础上,消除了非主属性对于码的传递函数依赖。

示例

学号课程成绩教师ID教师名
S001数据库管理90T01李四
S001计算机网络85T02王五

假设教师名依赖于教师ID,而教师ID依赖于学号+课程(主键),存在传递依赖。需要将表分解。

调整后:

学生课程表:

学号课程成绩教师ID
S001数据库管理90T01
S001计算机网络85T02

教师表:

教师ID教师名
T01李四
T02王五

BCNF(巴斯-科德范式)

定义:在3NF的基础上,消除了主属性对码的部分或传递函数依赖。

示例

假设存在一个表:

学号课程代码课程名称教师
S001C01数据库管理李四
S001C02计算机网络王五

如果“课程代码”决定了“课程名称”和“教师”,则存在主属性对主键的依赖(即课程代码对学号+课程代码的依赖),违反了BCNF。

调整后分为两个表:

学生课程表:

学号课程代码
S001C01
S001C02

课程信息表:

课程代码课程名称教师
C01数据库管理李四
C02计算机网络王五

二、AI 出题

(1)题目

  1. 下列哪项不是第一范式(1NF)的要求?

    • A. 数据表的每个列都不可以再分
    • B. 每一列的值必须是单一的数据项
    • C. 消除了所有的部分函数依赖
    • D. 确保表中的每个列的值都与主键直接相关
  2. 第二范式(2NF)是基于哪个范式之上的?

    • A. 1NF
    • B. 3NF
    • C. BCNF
    • D. 4NF
  3. 消除非主属性对码的哪种依赖是第二范式(2NF)的主要目标?

    • A. 部分函数依赖
    • B. 完全函数依赖
    • C. 传递函数依赖
    • D. 多值依赖
  4. 第三范式(3NF)主要解决什么问题?

    • A. 数据的原子性问题
    • B. 非主属性对主键的部分依赖问题
    • C. 非主属性对主键的传递函数依赖问题
    • D. 多值依赖问题
  5. 下列哪项是BCNF范式相对于3NF更严格要求的方面?

    • A. 数据项的原子性
    • B. 非主属性的依赖关系
    • C. 主属性对码的依赖
    • D. 外键约束
  6. 如果一个关系模式R满足BCNF,则一定满足:

    • A. 1NF但不一定

满足2NF

  • B. 2NF但不一定满足3NF
  • C. 3NF和2NF
  • D. 1NF, 2NF和3NF
  1. 在数据库设计中,范式的提升通常意味着什么?

    • A. 增加数据冗余
    • B. 减少查询效率
    • C. 减少数据冗余
    • D. 增加更新异常
  2. 一个关系模式处于3NF,但不在BCNF中,可能是因为:

    • A. 有非主属性部分依赖于主键
    • B. 有非主属性传递依赖于主键
    • C. 主属性对主键有部分依赖
    • D. 主属性对主键有传递依赖
  3. 要将一个表设计成第一范式(1NF),下列哪个操作是必要的?

    • A. 添加更多的行
    • B. 将复合属性分解成多个简单属性
    • C. 合并多个表
    • D. 引入外键
  4. 哪种范式要求一个表中不应存在非主属性对另一非主属性的依赖?

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

(2)答案和解析

  1. C. 消除了所有的部分函数依赖

    • 解析:第一范式(1NF)的要求是确保表中的每个字段都是不可分的原子数据项,而不是消除部分函数依赖,这是第二范式(2NF)的目标。
  2. A. 1NF

    • 解析:第二范式(2NF)是在第一范式(1NF)的基础上建立的,其目的是消除非主属性对主键的部分函数依赖。
  3. A. 部分函数依赖

    • 解析:第二范式(2NF)的主要目标是消除非主属性对码(主键)的部分函数依赖,确保每个非主属性完全函数依赖于主键。
  4. C. 非主属性对主键的传递函数依赖问题

    • 解析:第三范式(3NF)主要解决的是非主属性对主键的传递函数依赖问题,即一个非主属性依赖于另一个非主属性,而后者依赖于主键。
  5. C. 主属性对码的依赖

    • 解析:BCNF比3NF更严格,在于它还要求主属性(即参与组成主键的属性)不能对主键的任何部分存在依赖,这超出了3NF的要求。
  6. D. 1NF, 2NF和3NF

    • 解析:如果一个关系模式满足BCNF,那么它一定也满足1NF、2NF和3NF,因为BCNF是在这些范式的基础上进一步加强约束的范式。
  7. C. 减少数据冗余

    • 解析:提升数据库设计的范式级别,通常意味着通过消除数据冗余来优化数据库结构,这有助于减少存储空间和维护成本。
  8. C. 主属性对主键有部分依赖

    • 解析:如果一个关系模式处于3NF但不处于BCNF,可能的原因是存在主属性(组成候选键的属性)对码(主键)的部分依赖或传递依赖,BCNF要求消除这种依赖。
  9. B. 将复合属性分解成多个简单属性

    • 解析:要将一个表设计成第一范式(1NF),必须确保表中的每个字段都是原子的,不能被进一步分解,因此需要将复合属性分解成多个简单属性。
  10. C. 3NF

    • 解析:第三范式(3NF)要求一个表中不应存在非主属性对另一非主属性的依赖,即消除了传递依赖。

三、真题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明如月学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值