数据库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的示例:
将数据分解成两个表:
- 学生表(学生编号, 姓名, 学生电话)
+-----------+---------+---------+
| 学生编号 | 姓名 | 学生电话 |
+-----------+---------+---------+
| 001 | 张三 | 123456 |
| 002 | 李四 | 987654 |
+-----------+---------+---------+
- 成绩表(学生编号, 课程, 成绩)
+-----------+---------+---------+
| 学生编号 | 课程 | 成绩 |
+-----------+---------+---------+
| 001 | 数学 | 90 |
| 001 | 语文 | 85 |
| 002 | 英语 | 88 |
+-----------+---------+---------+
- 现在每个非主属性(如学生电话)都完全依赖于主键。
3. 第三范式(3NF)—— 消除传递依赖
要求:在符合2NF的基础上,所有非主属性必须直接依赖于主键,而不能通过其他非主属性间接依赖主键。
不符合3NF的示例:
学生表
+-----------+---------+-------------+---------+
| 学生编号 | 姓名 | 班级 | 班主任 |
+-----------+---------+-------------+---------+
| 001 | 张三 | 101 | 王老师 |
| 002 | 李四 | 102 | 李老师 |
+-----------+---------+-------------+---------+
- 这里
班主任是通过班级依赖于学生编号,而不是直接依赖主键(学生编号),这是传递依赖。
符合3NF的示例:
将数据分解成两个表:
- 学生表(学生编号, 姓名, 班级)
+-----------+---------+-------------+
| 学生编号 | 姓名 | 班级 |
+-----------+---------+-------------+
| 001 | 张三 | 101 |
| 002 | 李四 | 102 |
+-----------+---------+-------------+
- 班级表(班级, 班主任)
+-------------+---------+
| 班级 | 班主任 |
+-------------+---------+
| 101 | 王老师 |
| 102 | 李老师 |
+-------------+---------+
- 现在,班主任直接依赖于班级,不再有传递依赖。
4. BCNF(Boyce-Codd范式,第四范式)—— 处理多值依赖和候选键
要求:在符合3NF的基础上,每个非主属性必须依赖于候选键的超集,即任何候选键都能唯一确定表中的所有属性。
不符合BCNF的示例:
教师课程表
+-----------+---------+---------+
| 教师编号 | 课程 | 教室 |
+-----------+---------+---------+
| T001 | 数学 | A101 |
| T001 | 语文 | A102 |
| T002 | 英语 | A101 |
+-----------+---------+---------+
- 在这个表中,主键是
教师编号 + 课程,但是教室可以由课程唯一确定(每门课程都在同一个教室上课),这破坏了 BCNF 规范。
符合BCNF的示例:
分解成两个表:
- 教师课程表(教师编号, 课程)
+-----------+---------+
| 教师编号 | 课程 |
+-----------+---------+
| T001 | 数学 |
| T001 | 语文 |
| T002 | 英语 |
+-----------+---------+
- 课程教室表(课程, 教室)
+---------+---------+
| 课程 | 教室 |
+---------+---------+
| 数学 | 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功能,它使用了一组XML标签来帮助我们根据不同条件生成动态SQL。动态SQL的设计让开发者可以根据业务需求,灵活地构建SQL查询语句。以下是MyBatis动态SQL标签的总结。 动态SQL标签说明特点<if>条件判断语句&…...
出处不详 取数游戏
目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环,规则如下: 第一名玩家随意选取数字;第二名玩家从与第一名玩家相邻的两个数字中选择一个;而后依次在…...
拉取ros2_control_demos存储库
目录 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 方法 2: 使用 vcs 工具管理多个存储库 区别总结 rosdep 和 APT 的关系 网络问题 安装依赖 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 下载存储库: mkdir -p ~/ros2_ws/src cd ~/ros…...
Apache Doris Flink Connector 24.0.0 版本正式发布
亲爱的社区伙伴们,Apache Doris Flink Connector 24.0.0 版本已于 2024 年 9 月 5 日正式发布。该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。此外,整库同步所依赖的 FlinkCDC,也需升级…...
语音控制小夜灯的实现方案介绍
语音控制小夜灯的实现方案组成部分 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。 硬件组装涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先,使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处,同时将语音声控模…...
万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!
《万龙觉醒》是一款策略类手游,选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能,玩家可以更加轻松地管理游戏进程,优化操作体验。以下是VMOS云手机的三大核心功能,帮助你更好地掌控《万龙觉醒》战局。 V…...
【English】长难句翻译
这里写目录标题 技巧知识点1. 定语从句 和 状从区别2. 定从 修饰词3. who 和 whom 区别4. 除了定从、状从,还有啥?5. 怎么在长难句快速定位到主谓宾而不被各种从句中的动词影响判断6. 没有,的那种一大堆从句连起来的长难句怎么办7. 时态怎么放在翻译里总结技巧 知识点 1. 定语…...
npm login 或者 npm publish 超时timeout
场景:空闲时间想自己尝试下npm发布包,毕竟这东西可以不用,但不能不会 步骤很简单 1.npm login 2.npm publish 这里有个坑。。。因为想发布到npm上,所以这里的镜像源要换回https://registry.npmjs.org,不能使用淘宝镜像…...
Python的openpyxl使用記錄(包含合併單元格,圖片下載和圖片插入,設置邊框,設置背景顏色)
背景 因為公司最近要求我做一份自動化導出報告,內容有點多,為了省事,我選用了python,後面估計要自建在線辦公系統,這個後續再講 需要的庫 openpyxl 和Pandas 開始 Execl導入 from openpyxl import load_workbook …...
基于springboot+vue实现的在线商城系统
系统主要功能: (1)商品管理模块:实现了商品的基本信息录入、图片上传、状态管理等相关功能。 (2)商品分类模块:实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 (3&…...
fastjson漏洞--以运维角度进行修复
文章目录 前言一、漏洞详情二、修复过程1.通过脚本方式修复1.1.脚本修复原理1.2.脚本演示1.3.执行脚本 2. 手动升级包2.1.修复步骤2.2.遇到的问题 前言 该漏洞是三个月前由安全团队扫描出来的,主要影响是: FastJSON是阿里巴巴的开源JSON解析库,它可以解…...
82页精品PPT | 构建数字化工厂的智能制造-数字化智能制造
新模式、新技术 、新制造的挑战 中国制造业正处于转型升级的关键时期,面临着多方面的挑战。创新能力不足导致产品同质化严重,缺乏核心竞争力;质量管理水平参差不齐,影响着产品的可靠性和安全性;品牌价值不高ÿ…...
Python的10个日期和时间操作的实用技巧
在Python中,处理日期和时间是一项常见且重要的任务。datetime模块提供了丰富的功能来执行这些操作。以下是10个日期和时间操作的实用技巧及其代码演示: 1. 获取当前日期和时间 from datetime import datetimenow datetime.now() print(f"当前日期…...
关于大模型在产品开发中所面临的问题,利用大模型技术解决很简单!
“ 具体问题具体分析,大模型技术没有统一的解决方案 ” 有人说2024年是大模型应用的元年,而大模型在未来的发展潜力毋庸置疑,这也就意味着人工智能技术是下一个风口,因此各种各样基于大模型技术的创业公司如雨后春笋般涌现。 从…...
SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)
文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道,用ResponseBody注解标注的接口,默认返回给页面的是json数据。 其实,也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…...
BUUCTF 之Basic 1(BUU LFI COURSE 1)
1、启动靶场,会生成一个URL地址,打开给的URL地址,会看到一个如下界面 可以看到是一个PHP文件,非常的简单,就几行代码,判断一下是否有一个GET的参数,并且是file名字,如果是并且加载&a…...
Android 蓝牙三方和动态权限三方
记录一下最近用到的简单的框架 蓝牙 FastBle:Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多个…...
点餐|基于java的电子点餐系统小程序(源码+数据库+文档)
电子点餐系统|小程序|在线点餐 目录 基于java的电子点餐系统小程序 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: …...
MIT6.S081 Lab11实战:手把手教你实现E1000网卡驱动的关键函数(附避坑指南)
MIT6.S081 Lab11实战:从零实现E1000网卡驱动的核心逻辑 在操作系统开发领域,网络驱动是连接内核与物理世界的关键桥梁。MIT6.S081课程的Lab11将带领我们深入xv6内核,亲手实现Intel E1000网卡驱动的核心功能。这个实验不仅考验我们对DMA、环形…...
GT IP跑Aurora 64B66B协议:从变速箱到加扰的实战避坑指南
GT IP实现Aurora 64B66B协议:从变速箱到加扰的工程实践全解析 在高速串行通信领域,Xilinx的GT系列IP核配合Aurora 64B66B协议已成为许多硬件工程师的首选方案。这种组合能够提供高达数十Gbps的数据传输速率,广泛应用于数据中心互连、高性能计…...
质子交换膜燃料电池三维模型创建与流场仿真教程
质子交换膜燃料电池三维模型创建和fluent流场仿真教程。 单电池,单电池带冷却水通道,电堆,电堆带冷却通道三维流场仿真,后处理压力分布,温度分布,流线轨迹,氢气氧气浓度分布等。质子交换膜燃料电…...
从黑盒到白盒:基于GB28181/RTSP全栈源码交付的AI视频平台OEM与低代码集成实战
引言:掌握核心代码,重塑交付价值链 对于系统集成商(SI)和独立软件开发商(ISV)而言,依赖厂商的“黑盒”产品无异于将命运交予他人。功能定制周期长、接口开放受限、Logo无法替换、私有协议无法打…...
LuatOS扩展库API——【airlbs 】airlbs 定位服务
LuatOS 是物联网终端开发的常用工具,为轻量级嵌入式 Lua 脚本运行框架兼实时系统,基于 Lua 5.3 深度优化,适配 4G-Cat.1、MCU 等物联网终端硬件。其以 Lua 脚本开发,采用协程多任务架构,配套完善开发资源,含…...
手把手教你给RK3588开发板添加RTL8188EUS USB无线网卡驱动(附完整配置流程)
RK3588开发板实战:RTL8188EUS无线网卡驱动移植全指南 在嵌入式开发领域,为特定硬件平台添加第三方外设驱动是开发者常遇到的挑战。本文将详细介绍如何在Rockchip RK3588开发板上为RTL8188EUS USB无线网卡移植驱动,从环境准备到功能验证&#…...
ChatTTS一键启动:从零搭建语音合成服务的实战指南
语音合成服务在现代应用中扮演着越来越重要的角色。它被广泛应用于智能客服、有声读物生成和视频内容配音等场景。通过将文本转化为自然流畅的语音,极大地提升了人机交互的体验和应用的可访问性。 然而,对于希望快速部署ChatTTS这类先进语音合成模型的开…...
LFM2.5-1.2B-Thinking-GGUF开源大模型:低成本GPU算力高效利用实践指南
LFM2.5-1.2B-Thinking-GGUF开源大模型:低成本GPU算力高效利用实践指南 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。这个1.2B参数的模型采用GGUF格式,能够在消费级GPU甚至CPU上高效…...
探索RBMO - BiLSTM - Attention分类算法:MATLAB实现与应用
【24年5月顶刊算法】RBMO-BiLSTM-Attention分类 基于红嘴蓝鹊优化器(RBMO)-双向长短期记忆网络(BiLSTM)-注意力机制(Attention)的数据分类预测(可更换为回归/单变量/多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手 无需…...
避开Kaggle糖尿病预测的常见坑:数据预处理、特征解读与模型调优实战指南
避开Kaggle糖尿病预测的常见坑:数据预处理、特征解读与模型调优实战指南 在数据科学竞赛中,Kaggle的Pima印第安人糖尿病预测项目是许多初学者的第一个实战项目。表面上看,这似乎是一个简单的二分类问题——但当你真正开始建模时,…...
