3NF讲解

news/2025/2/7 8:22:59/

3NF讲解

3NF(第三范式)是数据库设计中的一种规范化方法,目的是消除数据冗余和避免数据异常。它帮助数据库保持高效,灵活和一致性。理解3NF的关键点在于它依赖于前两个范式(1NF和2NF)的基础。

1. 第一范式(1NF):确保数据表格中的每一列都具有原子性。

  • 原子性:每个单元格只存储单一的值,不能由重复的值或多值。

示例:一个表格中,存储每个订单的商品数据,不应存储多个商品名称在同一列。

订单号商品名称
001苹果,香蕉
002橙子,苹果

改进后(1NF):

订单号商品名称
001苹果
001香蕉
002橙子
002苹果

2. 第二范式(2NF):在1NF的基础上,确保所有非主属性完全依赖于主键。

  • 完全依赖:即所有非主键列应该完全依赖于主键列,而不是部分依赖。也就是说,主键是复合键时,非主键字段不能只依赖于主键的其中一部分。

示例:假设有一个表格,存储学生成绩信息,表中同时包含了学生的基本信息和成绩信息。

学生ID课程ID学生姓名课程名称成绩
1001101张三数学95
1001102张三语文88
1002101李四数学90

这个表中,学生姓名课程名称与主键(学生ID, 课程ID)部分依赖,不符合2NF。

改进后(2NF)

  • 学生表(只包含学生基本信息)

    学生ID学生姓名
    1001张三
    1002李四
  • 课程表(只包含课程基本信息)

    课程ID课程名称
    101数学
    102语文
  • 成绩表(包含成绩)

    学生ID课程ID成绩
    100110195
    100110288
    100210190

3. 第三范式(3NF):在2NF的基础上,确保不存在传递依赖。

  • 传递依赖:如果A -> B,B -> C,那么A -> C就是传递依赖。3NF要求消除这种依赖。

示例:在2NF的基础上,如果某表中有学生ID、学生姓名、学生所在系等信息,且学生姓名决定学生所在系(即,学生姓名 -> 所在系),那么就存在传递依赖(学生ID -> 学生姓名 -> 所在系)。

改进后(3NF)

  • 学生表(只包含学生基本信息)

    学生ID学生姓名
    1001张三
    1002李四
  • 系表(只包含系的基本信息)

    系ID系名称
    001计算机
    002物理
  • 学生-系表(包含学生与所在系的关系)

    学生ID系ID
    1001001
    1002002
  • 成绩表(不变)

    学生ID课程ID成绩
    100110195
    100110288
    100210190

通过这些调整,表中的数据不再存在冗余,且便于维护与查询。

总结:

  • 1NF:每个单元格包含单一数据。
  • 2NF:消除部分依赖,确保每个非主属性完全依赖于主键。
  • 3NF:消除传递依赖,确保每个非主属性只依赖于主键,不通过其他非主属性。

3NF的核心目的是减少数据冗余和避免数据不一致性,同时也能提升数据库的维护性。


http://www.ppmy.cn/news/1570023.html

相关文章

深度学习之“线性代数”

线性代数在深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量,借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。 数学对象概述 标量 标量是最简单的数学对象&#xff0…

C++底层学习预备:模板初阶

文章目录 1.编程范式2.函数模板2.1 函数模板概念2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则 3.类模板希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 进入STL库学习之前我们要先了解有关模板的…

八大排序算法细讲

目录 排序 概念 运用 常见排序算法 插入排序 直接插入排序 思想: 步骤(排升序): 代码部分: 时间复杂度: 希尔排序 思路 步骤 gap的取法 代码部分: 时间复杂度: 选择排序 直接选…

【SQL技术】不同数据库引擎 SQL 优化方案剖析

一、引言 在数据处理和分析的世界里,SQL 是不可或缺的工具。不同的数据库系统,如 MySQL、PostgreSQL(PG)、Doris 和 Hive,在架构和性能特点上存在差异,因此针对它们的 SQL 优化策略也各有不同。这些数据库中…

Linux 源码编译安装httpd 2.4,提供系统服务管理脚本并测试

第一种方式 1. 下载 Apache HTTP Server 源代码 首先,从 Apache 官网 下载最新版本的 httpd 2.4 源码,或者直接使用 wget 下载: [rootlocalhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.36.tar.gz # 解压 [rootlocalhost ~…

javaEE-8.JVM(八股文系列)

目录 一.简介 二.JVM中的内存划分 JVM的内存划分图: 堆区:​编辑 栈区:​编辑 程序计数器:​编辑 元数据区:​编辑 经典笔试题: 三,JVM的类加载机制 1.加载: 2.验证: 3.准备: 4.解析: 5.初始化: 双亲委派模型 概念: JVM的类加…

算法设计与分析三级项目--管道铺设系统

摘 要 该项目使用c算法逻辑,开发环境为VS2022,旨在通过Prim算法优化建筑物间的连接路径,以支持管线铺设规划。可以读取文本文件中的建筑物名称和距离的信息,并计算出建筑物之间的最短连接路径和总路径长度,同时以利用…

Java语法糖详解

前言 在现代编程语言的发展历程中,语法糖(Syntactic Sugar)作为一种提升代码可读性和开发效率的重要特性,已经成为语言设计的重要组成部分。Java作为一门成熟且广泛应用的编程语言,在其长期演进过程中,语法…