一、AI 讲解

数据库设计的范式是一组规则,用于指导如何组织数据库中的数据,以提高数据的逻辑一致性、减少数据冗余和提高数据操作的效率。下面我将通过几个范式的定义和示例来进行讲解。

第一范式(1NF)

定义: 数据库表中的所有字段值都是不可分割的原子值。换句话说,表的每列都是不可再分的数据项,每个字段中存储的是基本的数据项,不能再包含多个值,即实现字段的原子性。

示例:

不符合1NF的表:

学号 姓名 课程
001 张三 数学, 英语
002 李四 物理, 化学, 生物

转换为符合1NF的表:

学号 姓名 课程
001 张三 数学
001 张三 英语
002 李四 物理
002 李四 化学
002 李四 生物

第二范式(2NF)

定义: 在第一范式的基础上,非主属性完全依赖于主键。即表中的非主键字段必须完全依赖于主键,不能只依赖于主键的一部分(针对于组合主键)。

示例:

不符合2NF的表(已符合1NF):

学号 课程代码 分数 课程名称
001 MATH101 85 数学
001 ENG102 90 英语

这里“课程名称”依赖于“课程代码”,而不是完全依赖于主键(学号+课程代码)。

转换为符合2NF的表:

学生表:

学号 课程代码 分数
001 MATH101 85
001 ENG102 90

课程表:

课程代码 课程名称
MATH101 数学
ENG102 英语

第三范式(3NF)

定义: 在第二范式的基础上,非主属性不依赖于其他非主属性,即除了主键之外的字段必须相互独立。

示例:

不符合3NF的表(已符合2NF):

学号 课程代码 分数 教师姓名 教师电话
001 MATH101 85 王老师 123456
002 ENG102 90 李老师 654321

这里“教师电话”依赖于“教师姓名”,而不是依赖于主键。

转换为符合3NF的表:

学生课程表:

学号 课程代码 分数
001 MATH101 85
002 ENG102 90

教师表:

教师姓名 教师电话
王老师 123456
李老师 654321

以上就是数据库设计中的三个基本范式,通过这些范式的应用,可以有效地规范数据库设计,减少数据冗余,提高数据的一致性和可维护性。接下来,我会出几道相关的选择题。

二、AI 出题

  1. 下列哪项描述符合第一范式(1NF)的要求?
    A. 表中的每个字段都可以有重复的值
    B. 表中的每个字段值都是可分割的
    C. 表中的每个字段值都是不可分割的原子值
    D. 表中可以存在重复的记录

  2. 在数据库范式中,如果一个表要满足第二范式(2NF),它首先必须满足:
    A. 第三范式(3NF)
    B. 第一范式(1NF)
    C. BCNF
    D. 第四范式(4NF)

  3. 关于第三范式(3NF)的描述,下列哪项是正确的?
    A. 非主属性可以依赖于其他非主属性
    B. 任何非主属性都不能依赖于其他非主属性
    C. 只要满足了2NF就自然满足3NF
    D. 主键中的每个键都可以依赖于非主属性

  4. 假设有一个学生选课系统的数据库表,其中包含“学号”、“课程名称”和“成绩”三个字段。为了使这个表达到第一范式(1NF),必须保证:
    A. 每个学生只能选一门课
    B. “课程名称”字段中可以包含多个课程名称
    C. “成绩”字段中不能包含多个成绩值
    D. “学号”字段必须是唯一的

  5. 以下哪个例子不符合第二范式(2NF)?
    A. 学生表,其中包括学生ID、姓名和年龄
    B. 课程表,其中包括课程ID、课程名称和学分
    C. 成绩表,其中包括学生ID、课程ID、分数和课程名称
    D. 教师表,其中包括教师ID、姓名和所授课程ID

  6. 如果一个表已经满足第三范式(3NF),下列哪项是一定成立的?
    A. 表中不可能存在任何传递依赖
    B. 表中一定存在部分依赖
    C. 表中一定存在冗余数据
    D. 表中一定包含组合主键

答案:

  1. C. 表中的每个字段值都是不可分割的原子值
  2. B. 第一范式(1NF)
  3. B. 任何非主属性都不能依赖于其他非主属性
  4. C. “成绩”字段中不能包含多个成绩值
  5. C. 成绩表,其中包括学生ID、课程ID、分数和课程名称(因为课程名称依赖于课程ID,不满足非主属性完全依赖于主键的要求)
  6. A. 表中不可能存在任何传递依赖(因为3NF要求非主属性不依赖于其他非主属性,消除了传递依赖)
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐