数据库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的电子点餐系统小程序 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: …...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
