3NF讲解
3NF讲解
3NF(第三范式)是数据库设计中的一种规范化方法,目的是消除数据冗余和避免数据异常。它帮助数据库保持高效,灵活和一致性。理解3NF的关键点在于它依赖于前两个范式(1NF和2NF)的基础。
1. 第一范式(1NF):确保数据表格中的每一列都具有原子性。
- 原子性:每个单元格只存储单一的值,不能由重复的值或多值。
示例:一个表格中,存储每个订单的商品数据,不应存储多个商品名称在同一列。
| 订单号 | 商品名称 |
|---|---|
| 001 | 苹果,香蕉 |
| 002 | 橙子,苹果 |
改进后(1NF):
| 订单号 | 商品名称 |
|---|---|
| 001 | 苹果 |
| 001 | 香蕉 |
| 002 | 橙子 |
| 002 | 苹果 |
2. 第二范式(2NF):在1NF的基础上,确保所有非主属性完全依赖于主键。
- 完全依赖:即所有非主键列应该完全依赖于主键列,而不是部分依赖。也就是说,主键是复合键时,非主键字段不能只依赖于主键的其中一部分。
示例:假设有一个表格,存储学生成绩信息,表中同时包含了学生的基本信息和成绩信息。
| 学生ID | 课程ID | 学生姓名 | 课程名称 | 成绩 |
|---|---|---|---|---|
| 1001 | 101 | 张三 | 数学 | 95 |
| 1001 | 102 | 张三 | 语文 | 88 |
| 1002 | 101 | 李四 | 数学 | 90 |
这个表中,学生姓名和课程名称与主键(学生ID, 课程ID)部分依赖,不符合2NF。
改进后(2NF):
-
学生表(只包含学生基本信息)
学生ID 学生姓名 1001 张三 1002 李四 -
课程表(只包含课程基本信息)
课程ID 课程名称 101 数学 102 语文 -
成绩表(包含成绩)
学生ID 课程ID 成绩 1001 101 95 1001 102 88 1002 101 90
3. 第三范式(3NF):在2NF的基础上,确保不存在传递依赖。
- 传递依赖:如果A -> B,B -> C,那么A -> C就是传递依赖。3NF要求消除这种依赖。
示例:在2NF的基础上,如果某表中有学生ID、学生姓名、学生所在系等信息,且学生姓名决定学生所在系(即,学生姓名 -> 所在系),那么就存在传递依赖(学生ID -> 学生姓名 -> 所在系)。
改进后(3NF):
-
学生表(只包含学生基本信息)
学生ID 学生姓名 1001 张三 1002 李四 -
系表(只包含系的基本信息)
系ID 系名称 001 计算机 002 物理 -
学生-系表(包含学生与所在系的关系)
学生ID 系ID 1001 001 1002 002 -
成绩表(不变)
学生ID 课程ID 成绩 1001 101 95 1001 102 88 1002 101 90
通过这些调整,表中的数据不再存在冗余,且便于维护与查询。
总结:
- 1NF:每个单元格包含单一数据。
- 2NF:消除部分依赖,确保每个非主属性完全依赖于主键。
- 3NF:消除传递依赖,确保每个非主属性只依赖于主键,不通过其他非主属性。
3NF的核心目的是减少数据冗余和避免数据不一致性,同时也能提升数据库的维护性。
相关文章:
3NF讲解
3NF讲解 3NF(第三范式)是数据库设计中的一种规范化方法,目的是消除数据冗余和避免数据异常。它帮助数据库保持高效,灵活和一致性。理解3NF的关键点在于它依赖于前两个范式(1NF和2NF)的基础。 1. 第一范式…...
Spring Boot框架下的单元测试
1. 什么是单元测试 1.1 基本定义 单元测试(Unit Test) 是对软件开发中最小可测单位(例如一个方法或者一个类)进行验证的一种测试方式。在 Java 后端的 Spring Boot 项目中,单元测试通常会借助 JUnit、Mockito 等框架对代码中核心逻辑进行快…...
AI测试工程师成长指南:以DeepSeek模型训练为例
目录 引言:AI测试工程师的使命与挑战成长日记:从测试小白到AI测试专家核心能力:AI测试工程师的必备素养知识体系:技术栈与技能图谱AI测试工具全景:以DeepSeek为核心的工具链实战训练模式:以DeepSeek模型迭…...
【数据结构】_队列的结构与实现
目录 1. 队列的概念和结构 2. 队列的应用 3. 队列的实现 3.1 队列实现的底层结构选择 3.2 结构体设计 3.2.1 仅为链表结点设计结构体 3.2.2 为链表再设计一个结构体 3.3 Queue.h 3.4 Queue.c 3.5 Test_Queue.c 注:部分方法实现细节 1. 队列的概念和结构 …...
机器学习--2.多元线性回归
多元线性回归 1、基本概念 1.1、连续值 1.2、离散值 1.3、简单线性回归 1.4、最优解 1.5、多元线性回归 2、正规方程 2.1、最小二乘法 2.2、多元一次方程举例 2.3、矩阵转置公式与求导公式 2.4、推导正规方程0的解 2.5、凸函数判定 成年人最大的自律就是:…...
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文档: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 对比: 在 MySQL 中,处理时间相关的数据类型主要有以下几种:DATE、TIME、…...
朴素贝叶斯原理
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么…...
k8s中,一.pod污点,二.pod容器污点容忍策略,三.pod优先级(PriorityClass类)
一.pod污点:污点是让节点与pod产生排斥的一类规则污点标签的命令1.查看污点标签kubectl describe nodes 节点名2.设置污点标签kubectl taint node 节点名 key值value值:污点标签种类3.删除污点标签kubectl taint node 节点名 key值value值:污点标签种类-4.污点标签种类驱逐:NoE…...
【重生之学习C语言----水仙花篇】
目录 编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...
两步构建 AI 总结助手,实现智能文档摘要
在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。…...
承压金字塔(蓝桥杯17C)
文件读取,与写入:C 文件和流 | 菜鸟教程 #include <iostream> #include <fstream> #include <string> using namespace std; double sum[30][30]; int main() {ifstream infile("C:\\Users\\xutianci\\OneDrive\\Desktop\\TMOCC\…...
day33-数据同步rsync
一、Rsync本地模式和远程模式 纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B 也就是模拟cp的用法 很简单 1.安装 yum install rsync -y 2.命令语法,分几个模式 - 本地模式 rsync 参数 源路径 目标路径 rsync -xxxxx /var…...
Android 实现首页Tab切换并且支持懒加载功能详解
目录 1. 添加依赖2. 布局文件3. 创建 Fragment4. 创建适配器5. 在 MainActivity 中设置 TabLayout 和 ViewPager2 1. 添加依赖 在 build.gradle 文件中添加以下依赖: implementation androidx.viewpager2:viewpager2:1.1.0-beta01 implementation com.google.andr…...
[Android] 360行车记录仪谷歌版
[Android] 360行车记录仪谷歌版 链接:https://pan.xunlei.com/s/VOIQYq-jmW8Jpb8y3EIA3YdtA1?pwd3abw# 新买的360行车记录仪,配套软件让安装360智慧生活软件,二百多兆,各种功能齐全、忒齐全,好多用不到,…...
基于Redis分布式锁
1. 获取锁的过程 使用SETNX命令:SETNX(SET if Not eXists)是一个原子操作,它会在指定的key不存在时,将key的值设置为给定的value,并返回1;如果key已经存在,则不做任何操作࿰…...
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
在 Spring Boot 项目中,有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时,ConditionalOnProperty 注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载,使得我们的程序更具灵活性。 本…...
canny边缘检测
Canny边缘检测算法是一种广泛使用的边缘检测方法,由John F.Canny在1986年提出。它被认为是边缘检测的“黄金标准”,因为它在检测边缘的同时能够很好地抑制噪声,并且能够精确地定位边缘。Canny算法通过一系列步骤来实现鲁棒的边缘检测…...
团建 蓝桥杯省a 15
问题描述 小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 nn 和 mm 的树,树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点,从根到这个叶结点的路径上经过的所…...
【逻辑学导论】1.6 有效性和真实性
当一个演绎论证成功地将结论和前提必然地联系起来,它是有效的。有效性是针对论证的各命题之间的关系而言的。一个论证是有效的,当且仅当它不可能有真前提和假结论,当且仅当其结论是从其前提逻辑必然地推导出来的。因此,有效性永远…...
IDEA 中集成 Maven,配置环境、创建以及导入项目
目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...
SQLite3嵌入式开发实战:从零构建一个轻量级学生管理系统(C语言版)
SQLite3嵌入式开发实战:从零构建一个轻量级学生管理系统(C语言版) 在嵌入式系统开发中,数据存储和管理一直是开发者需要面对的核心问题之一。传统文件系统虽然简单,但缺乏结构化查询能力;而大型数据库又过…...
高效安全的网页资源提取方案:猫抓开源工具的技术实现与专业应用
高效安全的网页资源提取方案:猫抓开源工具的技术实现与专业应用 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代ÿ…...
大麦网自动抢票脚本:告别手速焦虑,轻松抢到心仪票务
大麦网自动抢票脚本:告别手速焦虑,轻松抢到心仪票务 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为抢不到演唱会门票而烦恼吗?每次…...
运维自动化新思路:使用Pixel Script Temple生成系统监控拓扑像素图
运维自动化新思路:使用Pixel Script Temple生成系统监控拓扑像素图 1. 引言:运维可视化的痛点与创新方案 每天早晨,运维工程师小李都要花1-2小时手动整理服务器状态报告。他需要从多个监控系统导出数据,在PPT中绘制网络拓扑图&a…...
告别枯燥Loading!聊聊Android骨架屏的‘心理战术’与设计取舍
告别枯燥Loading!Android骨架屏的UX心理学与架构设计博弈 当用户盯着那个旋转的小圆圈超过3秒时,他们的耐心就像沙漏里的沙子一样快速流失。但有趣的是,如果换成骨架屏——那些跳动的灰色块——同样的3秒等待却变得可以接受。这不是魔法&…...
Mermaid Live Editor:5分钟掌握专业图表制作的在线实时编辑器
Mermaid Live Editor:5分钟掌握专业图表制作的在线实时编辑器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…...
文华财经与博易大师双轨期货多空变色线指标实战解析
1. 双轨期货多空变色线指标是什么? 如果你经常使用文华财经或博易大师进行期货交易,一定对主图上的各种技术指标不陌生。今天要介绍的这个双轨期货多空变色线指标,可以说是趋势交易者的"秘密武器"。简单来说,它就像给K线…...
Arduino串口乱码?波特率选9600还是115200?一次讲清串口通信的配置与避坑指南
Arduino串口通信终极指南:从波特率选择到实战避坑 当你第一次在Arduino串口监视器看到一堆乱码时,那种挫败感我深有体会。串口通信作为Arduino与外界对话的核心通道,其稳定性直接影响项目成败。本文将带你深入串口通信的底层逻辑,…...
用ZYNQ PS-SPI给Flash测个速:华邦W25Q80在25MHz时钟下的真实读写性能报告
ZYNQ PS-SPI Flash性能深度评测:华邦W25Q80在25MHz时钟下的极限挖掘 当我们需要在嵌入式系统中选择一款Flash存储器时,数据手册上的理论参数往往无法反映真实应用场景下的性能表现。本文将基于Xilinx ZYNQ平台的PS-SPI接口,对华邦W25Q80 Flas…...
终极指南:一键解决iPhone USB网络共享驱动问题
终极指南:一键解决iPhone USB网络共享驱动问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap…...
