当前位置: 首页 > news >正文

数据库4个范式的说明

在数据库设计中,范式(Normal Form)用于消除冗余和异常,确保数据一致性。以下是第一范式、第二范式、第三范式和BCNF(Boyce-Codd Normal Form,即第四范式)的示例说明:

1. 第一范式(1NF)—— 消除重复数据

要求:所有字段都是原子性值,即每个字段中只能包含单一值,不能包含重复或多重数据。

不符合1NF的示例

学生表
+-----------+---------+-------------------+
| 学生编号   | 姓名    | 课程              |
+-----------+---------+-------------------+
| 001       | 张三    | 数学, 语文         |
| 002       | 李四    | 英语               |
| 003       | 王五    | 化学, 物理         |
+-----------+---------+-------------------+
  • 这里的 课程 列包含了多个值(数学和语文在同一个单元格中),这不符合1NF。

符合1NF的示例

学生表
+-----------+---------+---------+
| 学生编号   | 姓名    | 课程    |
+-----------+---------+---------+
| 001       | 张三    | 数学    |
| 001       | 张三    | 语文    |
| 002       | 李四    | 英语    |
| 003       | 王五    | 化学    |
| 003       | 王五    | 物理    |
+-----------+---------+---------+
  • 这里每个字段的值都是原子性的。

2. 第二范式(2NF)—— 消除部分依赖

要求:在符合1NF的基础上,表中的所有非主属性必须完全依赖于主键(不能有部分依赖)。

不符合2NF的示例

选课表
+-----------+---------+---------+---------+
| 学生编号   | 课程    | 成绩    | 学生电话 |
+-----------+---------+---------+---------+
| 001       | 数学    | 90      | 123456  |
| 001       | 语文    | 85      | 123456  |
| 002       | 英语    | 88      | 987654  |
+-----------+---------+---------+---------+
  • 这里主键是 学生编号 + 课程 的组合,但 学生电话 只依赖于 学生编号,而与 课程 无关,这就是部分依赖

符合2NF的示例
将数据分解成两个表:

  1. 学生表(学生编号, 姓名, 学生电话)
+-----------+---------+---------+
| 学生编号   | 姓名    | 学生电话 |
+-----------+---------+---------+
| 001       | 张三    | 123456  |
| 002       | 李四    | 987654  |
+-----------+---------+---------+
  1. 成绩表(学生编号, 课程, 成绩)
+-----------+---------+---------+
| 学生编号   | 课程    | 成绩    |
+-----------+---------+---------+
| 001       | 数学    | 90      |
| 001       | 语文    | 85      |
| 002       | 英语    | 88      |
+-----------+---------+---------+
  • 现在每个非主属性(如学生电话)都完全依赖于主键。

3. 第三范式(3NF)—— 消除传递依赖

要求:在符合2NF的基础上,所有非主属性必须直接依赖于主键,而不能通过其他非主属性间接依赖主键。

不符合3NF的示例

学生表
+-----------+---------+-------------+---------+
| 学生编号   | 姓名    | 班级        | 班主任  |
+-----------+---------+-------------+---------+
| 001       | 张三    | 101         | 王老师  |
| 002       | 李四    | 102         | 李老师  |
+-----------+---------+-------------+---------+
  • 这里 班主任 是通过 班级 依赖于 学生编号,而不是直接依赖主键(学生编号),这是传递依赖

符合3NF的示例
将数据分解成两个表:

  1. 学生表(学生编号, 姓名, 班级)
+-----------+---------+-------------+
| 学生编号   | 姓名    | 班级        |
+-----------+---------+-------------+
| 001       | 张三    | 101         |
| 002       | 李四    | 102         |
+-----------+---------+-------------+
  1. 班级表(班级, 班主任)
+-------------+---------+
| 班级        | 班主任  |
+-------------+---------+
| 101         | 王老师  |
| 102         | 李老师  |
+-------------+---------+
  • 现在,班主任直接依赖于班级,不再有传递依赖。

4. BCNF(Boyce-Codd范式,第四范式)—— 处理多值依赖和候选键

要求:在符合3NF的基础上,每个非主属性必须依赖于候选键的超集,即任何候选键都能唯一确定表中的所有属性。

不符合BCNF的示例

教师课程表
+-----------+---------+---------+
| 教师编号   | 课程    | 教室    |
+-----------+---------+---------+
| T001      | 数学    | A101    |
| T001      | 语文    | A102    |
| T002      | 英语    | A101    |
+-----------+---------+---------+
  • 在这个表中,主键是 教师编号 + 课程,但是 教室 可以由 课程 唯一确定(每门课程都在同一个教室上课),这破坏了 BCNF 规范。

符合BCNF的示例
分解成两个表:

  1. 教师课程表(教师编号, 课程)
+-----------+---------+
| 教师编号   | 课程    |
+-----------+---------+
| T001      | 数学    |
| T001      | 语文    |
| T002      | 英语    |
+-----------+---------+
  1. 课程教室表(课程, 教室)
+---------+---------+
| 课程    | 教室    |
+---------+---------+
| 数学    | A101    |
| 语文    | A102    |
| 英语    | A101    |
+---------+---------+
  • 现在每个非主属性都依赖于候选键,没有多值依赖或不合理的键依赖。

总结

  • 1NF:确保每个字段都是原子性值。
  • 2NF:消除部分依赖,所有非主属性都完全依赖于主键。
  • 3NF:消除传递依赖,所有非主属性直接依赖于主键。
  • BCNF:确保每个非主属性依赖于候选键的超集,解决候选键的多值依赖问题。

相关文章:

数据库4个范式的说明

在数据库设计中,范式(Normal Form)用于消除冗余和异常,确保数据一致性。以下是第一范式、第二范式、第三范式和BCNF(Boyce-Codd Normal Form,即第四范式)的示例说明: 1. 第一范式&a…...

Excel怎么截图?快速捕捉工作表的多种方法

大家好,这里是效率办公指南! 📸 在日常工作中,我们经常需要对Excel工作表进行截图,无论是为了记录数据、制作演示还是进行数据对比。今天,我们就来学习几种在Excel中截图的方法以及它们的快捷键。 一、使…...

MyBatis动态SQL标签总结、开发手册、高阶用法(动态SQL、OGNL、批量操作、片段重用、 SQL 组合、 执行优化、嵌套查询与延迟加载)

MyBatis提供了一个非常强大的动态SQL功能&#xff0c;它使用了一组XML标签来帮助我们根据不同条件生成动态SQL。动态SQL的设计让开发者可以根据业务需求&#xff0c;灵活地构建SQL查询语句。以下是MyBatis动态SQL标签的总结。 动态SQL标签说明特点<if>条件判断语句&…...

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环&#xff0c;规则如下&#xff1a; 第一名玩家随意选取数字&#xff1b;第二名玩家从与第一名玩家相邻的两个数字中选择一个&#xff1b;而后依次在…...

拉取ros2_control_demos存储库

目录 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 方法 2: 使用 vcs 工具管理多个存储库 区别总结 rosdep 和 APT 的关系 网络问题 安装依赖 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 下载存储库&#xff1a; mkdir -p ~/ros2_ws/src cd ~/ros…...

Apache Doris Flink Connector 24.0.0 版本正式发布

亲爱的社区伙伴们&#xff0c;Apache Doris Flink Connector 24.0.0 版本已于 2024 年 9 月 5 日正式发布。该版本新增了对 Flink 1.20 的支持&#xff0c;并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。此外&#xff0c;整库同步所依赖的 FlinkCDC&#xff0c;也需升级…...

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先&#xff0c;使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处&#xff0c;同时将语音声控模…...

万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!

《万龙觉醒》是一款策略类手游&#xff0c;选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能&#xff0c;玩家可以更加轻松地管理游戏进程&#xff0c;优化操作体验。以下是VMOS云手机的三大核心功能&#xff0c;帮助你更好地掌控《万龙觉醒》战局。 V…...

【English】长难句翻译

这里写目录标题 技巧知识点1. 定语从句 和 状从区别2. 定从 修饰词3. who 和 whom 区别4. 除了定从、状从,还有啥?5. 怎么在长难句快速定位到主谓宾而不被各种从句中的动词影响判断6. 没有,的那种一大堆从句连起来的长难句怎么办7. 时态怎么放在翻译里总结技巧 知识点 1. 定语…...

npm login 或者 npm publish 超时timeout

场景&#xff1a;空闲时间想自己尝试下npm发布包&#xff0c;毕竟这东西可以不用&#xff0c;但不能不会 步骤很简单 1.npm login 2.npm publish 这里有个坑。。。因为想发布到npm上&#xff0c;所以这里的镜像源要换回https://registry.npmjs.org&#xff0c;不能使用淘宝镜像…...

Python的openpyxl使用記錄(包含合併單元格,圖片下載和圖片插入,設置邊框,設置背景顏色)

背景 因為公司最近要求我做一份自動化導出報告&#xff0c;內容有點多&#xff0c;為了省事&#xff0c;我選用了python&#xff0c;後面估計要自建在線辦公系統&#xff0c;這個後續再講 需要的庫 openpyxl 和Pandas 開始 Execl導入 from openpyxl import load_workbook …...

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…...

fastjson漏洞--以运维角度进行修复

文章目录 前言一、漏洞详情二、修复过程1.通过脚本方式修复1.1.脚本修复原理1.2.脚本演示1.3.执行脚本 2. 手动升级包2.1.修复步骤2.2.遇到的问题 前言 该漏洞是三个月前由安全团队扫描出来的&#xff0c;主要影响是: FastJSON是阿里巴巴的开源JSON解析库&#xff0c;它可以解…...

82页精品PPT | 构建数字化工厂的智能制造-数字化智能制造

新模式、新技术 、新制造的挑战 中国制造业正处于转型升级的关键时期&#xff0c;面临着多方面的挑战。创新能力不足导致产品同质化严重&#xff0c;缺乏核心竞争力&#xff1b;质量管理水平参差不齐&#xff0c;影响着产品的可靠性和安全性&#xff1b;品牌价值不高&#xff…...

Python的10个日期和时间操作的实用技巧

在Python中&#xff0c;处理日期和时间是一项常见且重要的任务。datetime模块提供了丰富的功能来执行这些操作。以下是10个日期和时间操作的实用技巧及其代码演示&#xff1a; 1. 获取当前日期和时间 from datetime import datetimenow datetime.now() print(f"当前日期…...

关于大模型在产品开发中所面临的问题,利用大模型技术解决很简单!

“ 具体问题具体分析&#xff0c;大模型技术没有统一的解决方案 ” 有人说2024年是大模型应用的元年&#xff0c;而大模型在未来的发展潜力毋庸置疑&#xff0c;这也就意味着人工智能技术是下一个风口&#xff0c;因此各种各样基于大模型技术的创业公司如雨后春笋般涌现。 从…...

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…...

BUUCTF 之Basic 1(BUU LFI COURSE 1)

1、启动靶场&#xff0c;会生成一个URL地址&#xff0c;打开给的URL地址&#xff0c;会看到一个如下界面 可以看到是一个PHP文件&#xff0c;非常的简单&#xff0c;就几行代码&#xff0c;判断一下是否有一个GET的参数&#xff0c;并且是file名字&#xff0c;如果是并且加载&a…...

Android 蓝牙三方和动态权限三方

记录一下最近用到的简单的框架 蓝牙 FastBle&#xff1a;Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多个…...

点餐|基于java的电子点餐系统小程序(源码+数据库+文档)

电子点餐系统|小程序|在线点餐 目录 基于java的电子点餐系统小程序 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台&#xff1a; 后台&#xff1a; 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...