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

Mysql技术文档--设计表规范式-一次性扫盲

阿丹:

        在设计表的时候经常出现一些问题,其实自己很清楚就是因为在设计表的时候没有规范。导致后期加表的时候出现了问题。所以趁着这个假期卷一卷。同时只有在开始的时候

几大范式

在关系型数据库中,数据表设计的基本原则、规则就称为范式。

第一范式(1NF)

原文:

第一范式(1NF)数据库规范化的一种级别,它要求每个属性都是不可分的原子值,即每个属性都必须是不可分的最小数据单元。

解释/理解:

第一范式(1NF)是数据库设计的基础,它确保了每个数据表中的每个列都有唯一的含义,并且每个列都不能可分。这意味着每个字段都是最小的数据单元,不能包含其他的数据单元。例如,如果一个表中的“地址”列包含了省份、城市、街道等多个信息,那么这个表就不符合第一范式。为了满足第一范式,需要将这种多信息列拆分为多个独立的列,每个列表示一个最小、不可分的数据单元。

举例:

假设有一个名为“用户信息”的表,其中包含用户的姓名、年龄、性别、地址等信息。如果该表中的“地址”列包含了省份、城市、街道等多个信息,那么这个表就不符合第一范式。为了满足第一范式,需要将“地址”列拆分为“省份”、“城市”和“街道”三个独立的列,每个列表示一个最小、不可分的数据单元。拆分后的表如下:

用户信息表:

列名类型
姓名字符串
年龄整数
性别字符串
省份字符串
城市字符串
街道字符串

这个例子中,“地址”列被拆分为三个独立的列:“省份”、“城市”和“街道”,每个列都表示一个最小、不可分的数据单元。这样的表就满足了第一范式的要求。

第二范式(2NF)

原文:

第二范式(2NF)是数据库规范化的一种级别,它建立在第一范式的基础上,要求非主键列之间必须完全依赖于主键,而不是部分依赖。

解释/理解:

第二范式(2NF)是在第一范式的基础上进行的规范化,它要求非主键列之间必须完全依赖于主键,而不是部分依赖。在第一范式中,表中的每个列都是不可分的最小数据单元,而在第二范式中,非主键列之间必须是相互独立的,不能存在依赖关系。

举例:

假设有一个名为“订单”的表,其中包含订单号、客户号、日期、商品数量等信息。该表中有一个主键为订单号和客户号,即每个订单都有一个唯一的订单号和客户号。现在考虑一个场景,需要查询某个客户的所有订单信息。在第二范式之前的设计中,我们可能需要一个单独的“订单”表来存储订单信息,然后使用一个外键来关联“订单”表和“客户”表。这样做的缺点是会产生大量的数据冗余,因为每个订单都需要在“订单”表中单独存储一份数据,而且如果某个客户的订单数量很大,那么“客户”表中就会包含很多冗余数据。

为了解决这个问题,我们可以将“订单”表拆分为两个表:“订单信息”表和“订单详情”表,“订单信息”表中包含订单号、客户号和日期等基本信息,而“订单详情”表中则包含每个订单的商品数量等信息。这样设计的好处是避免了数据冗余,同时也能更好地满足查询需求。

通过将表拆分为两个表,我们可以更好地组织数据,减少数据冗余并提高查询效率。同时,由于每个表中的列都是不可分的最小数据单元,因此也避免了数据不一致性的问题。

第三范式(3NF)

原文:

第三范式(3NF)是数据库规范化的一种级别,它建立在第二范式的基础上,要求非主键列之间必须相互独立,不存在传递依赖关系。

解释/理解:

第三范式(3NF)是在第二范式的基础上进行的规范化,它要求非主键列之间必须相互独立,不存在传递依赖关系。在第二范式中,非主键列之间必须是相互独立的,不能存在依赖关系,而第三范式则更进一步,要求非主键列之间不能存在传递依赖关系。

举例:

假设有一个名为“员工薪资”的表,其中包含员工号、姓名、薪资、所属部门等信息。该表的主键为员工号和姓名,即每个员工都有一个唯一的员工号和姓名。现在考虑一个场景,需要查询某个部门的所有员工的薪资情况。在第二范式之前的设计中,我们可能需要一个单独的“员工薪资”表来存储员工薪资信息,然后使用一个外键来关联“员工薪资”表和“员工”表。这样做的话,会产生大量的数据冗余,因为每个员工都需要在“员工薪资”表中单独存储一份数据。而且如果某个部门的员工数量很大,那么“员工薪资”表中就会包含很多冗余数据。

为了解决这个问题,我们可以将“员工薪资”表拆分为两个表:“员工信息”表和“薪资信息”表,“员工信息”表中包含员工号、姓名和所属部门等基本信息,而“薪资信息”表中则包含每个员工的薪资信息。这样设计的好处是避免了数据冗余,同时也能更好地满足查询需求。

通过将表拆分为两个表,我们可以更好地组织数据,减少数据冗余并提高查询效率。同时,由于每个表中的列都是不可分的最小数据单元,因此也避免了数据不一致性的问题。

巴斯-科德范式(BCNF)

原文:

巴斯-科德范式(BCNF)是数据库规范化的一种级别,它要求每个非主键子集必须完全依赖于主键,而不是部分依赖。

解释/理解:

巴斯-科德范式(BCNF)是在第三范式的基础上进行的规范化,它要求每个非主键子集必须完全依赖于主键,而不是部分依赖。在第三范式中,非主键列之间不能存在传递依赖关系,而巴斯-科德范式则更加强调非主键子集与主键之间的依赖关系。

举例:

假设有一个名为“商品订单”的表,其中包含订单号、商品号、数量、客户号等信息。该表的主键为订单号和商品号,即每个订单都有一个唯一的订单号和商品号。现在考虑一个场景,需要查询某个客户的所有订单信息。在第三范式之前的设计中,我们可能需要一个单独的“商品订单”表来存储商品订单信息,然后使用一个外键来关联“商品订单”表和“客户”表。这样做的话,会产生大量的数据冗余,因为每个订单都需要在“商品订单”表中单独存储一份数据。而且如果某个客户的订单数量很大,那么“商品订单”表中就会包含很多冗余数据。

为了解决这个问题,我们可以将“商品订单”表拆分为两个表:“订单信息”表和“订单详情”表,“订单信息”表中包含订单号、客户号等基本信息,而“订单详情”表中则包含每个订单的商品号、数量等信息。这样设计的好处是避免了数据冗余,同时也能更好地满足查询需求。

通过将表拆分为两个表,我们可以更好地组织数据,减少数据冗余并提高查询效率。同时,由于每个表中的列都是不可分的最小数据单元,因此也避免了数据不一致性的问题。

第四范式(4NF)

原文:

第四范式(4NF)是数据库规范化的一种级别,它要求非主键子集之间不存在依赖关系,或者说每个非主键子集必须独立于其他非主键子集。

解释/理解:

第四范式(4NF)在巴斯-科德范式的基础上进一步强调非主键子集之间的相互独立性。在巴斯-科德范式中,每个非主键子集必须完全依赖于主键,而且相互之间没有依赖关系。而在第四范式中,进一步要求每个非主键子集之间不存在任何依赖关系,或者说每个非主键子集都是独立的,不依赖于其他非主键子集。

举例:

假设有一个名为“客户订单”的表,其中包含客户号、订单号、日期、商品号、数量等信息。该表的主键为客户号和订单号,即每个订单都有一个唯一的客户号和订单号。现在考虑一个场景,需要查询某个客户的所有订单信息,并显示每个订单的商品号和数量。在第四范式之前的设计中,我们可能需要在“客户订单”表中存储每个订单的商品号和数量,然后使用客户号和订单号作为主键来关联该表和其他表。这样做的话,会产生大量的数据冗余,因为每个订单都需要在“客户订单”表中单独存储一份数据。而且如果某个客户的订单数量很大,那么“客户订单”表中就会包含很多冗余数据。

为了解决这个问题,我们可以将“客户订单”表拆分为两个表:“订单信息”表和“订单详情”表,“订单信息”表中包含客户号、订单号、日期等基本信息,而“订单详情”表中则包含每个订单的商品号、数量等信息。这样设计的好处是避免了数据冗余,同时也能更好地满足查询需求。

通过将表拆分为两个表,我们可以更好地组织数据,减少数据冗余并提高查询效率。同时,由于每个表中的列都是不可分的最小数据单元,因此也避免了数据不一致性的问题。

第五范式(5NF,又称完美范式)

原文:

第五范式(5NF,又称完美范式)是数据库规范化的一种级别,它要求在第四范式的基础上,非主键子集之间不存在任何依赖关系,或者说每个非主键子集必须独立于其他所有非主键子集。

解释/理解:

第五范式(5NF)在第四范式的基础上进一步强调非主键子集之间的相互独立性。在第四范式中,每个非主键子集必须独立于其他非主键子集,不依赖于其他非主键子集。而在第五范式中,要求每个非主键子集之间不存在任何依赖关系,或者说每个非主键子集都是完全独立的,不依赖于其他任何非主键子集。

举例: 考虑一个订单管理系统的数据库设计。假设有一个名为“订单详情”的表,其中包含订单号、商品号、数量等信息。该表的主键为订单号和商品号,即每个订单详情都有一个唯一的订单号和商品号。现在考虑一个场景,需要查询某个客户的所有订单信息,并显示每个订单的商品号和数量。在第五范式之前的设计中,我们可能需要在“订单详情”表中存储每个订单的商品号和数量,然后使用订单号作为主键来关联该表和其他表。这样做的话,会产生大量的数据冗余,因为每个订单详情都需要在“订单详情”表中单独存储一份数据。而且如果某个客户的订单数量很大,那么“订单详情”表中就会包含很多冗余数据。

为了解决这个问题,我们可以将“订单详情”表拆分为两个表:“订单信息”表和“订单明细”表,“订单信息”表中包含订单号、日期等基本信息,而“订单明细”表中则包含每个订单的商品号、数量等信息。这样设计的好处是避免了数据冗余,同时也能更好地满足查询需求。

通过将表拆分为两个表,我们可以更好地组织数据,减少数据冗余并提高查询效率。同时,由于每个表中的列都是不可分的最小数据单元,因此也避免了数据不一致性的问题。

相关文章:

Mysql技术文档--设计表规范式-一次性扫盲

阿丹: 在设计表的时候经常出现一些问题,其实自己很清楚就是因为在设计表的时候没有规范。导致后期加表的时候出现了问题。所以趁着这个假期卷一卷。同时只有在开始的时候 几大范式 在关系型数据库中,数据表设计的基本原则、规则就称为范式。…...

python socket 传输opencv读取的图像

python socket网络编程 将ros机器人摄像头捕捉的画面在上位机实时显示,需要用到socket网络编程,提供了TCP和UDP两种方式 TCP服务器端代码: 创建TCP套接字: s socket(AF_INET, SOCK_STREAM) 创建了一个TCP套接字。SOCK_STREAM 表示这是一个TCP套接字&…...

APACHE NIFI学习之—UpdateAttribute

UpdateAttribute 描述: 通过设置属性表达式来更新属性,也可以基于属性正则匹配来删除属性 标签: attributes, modification, update, delete, Attribute Expression Language, state, 属性, 修改, 更新, 删除, 表达式 参数: 如下列表中,必填参数则…...

BIT-7文件操作和程序环境(16000字详解)

一:文件 1.1 文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明…...

冥想第九百二十八天

1.今天周三,今天晚上日语课上了好久,天气也不好, 2.项目上全力以赴的一天。 3.感谢父母,感谢朋友感谢家人,感谢不断进步的自己。...

深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)

目录 前言 环境配置 Quartz 什么是Quartz? 应用场景 核心组件 Job JobDetail Trigger CronTrigger SimpleTrigger Scheduler 任务存储 RAM JDBC 导入依赖 定时任务 销量统计 Redis检测 使用 ​编辑 注意事项 前言 在悦享校园1.0中引入了Quart…...

Lucene-MergePolicy详解

简介 该文章基于业务需求背景,因场景需求进行参数调优,下文会尽可能针对段合并策略(SegmentMergePolicy)的全参数进行说明。 主要介绍TieredMergePolicy,它是Lucene4以后的默认段的合并策略,之前采用的合并…...

数据的加解密

文章目录 分类特点业务的使用补充 分类 对称加密算法非对称加密算法 特点 对称加密算法 : 加密效率高 !加密和解密都使用同一款密钥 但是有一个问题 : 密钥如何从服务端发给客户端? (假如你直接先将密钥发给对方,要是在过程中被黑客技术破解了,那后面的消息也就泄漏了) (后…...

【Spring】更简单的读取和存储对象

更简单的读取和存储对象 一. 存储 Bean 对象1. 前置工作:配置扫描路径2. 添加注解存储 Bean 对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储&…...

【LeetCode热题100】--108.将有序数组转换为二叉搜索树

108.将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二叉搜索树的中序遍历是升序…...

Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群

十一、持久化RDB和AOF 持久化:将数据存入硬盘 11.1 RDB(Redis Database) RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 备份…...

【智能家居项目】裸机版本——设备子系统(LED Display 风扇)

🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 输入子系统中目前仅实现了按键输入,剩下的网络输入和标准输入在以后会逐步实现&am…...

[Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案

内核:Linux 6.5.5-arch1-1 Plasma 版本:5.27.8 窗口系统:Wayland 1 问题 在前些时候置入了一块显示器,接口较多,有 HDMI 接口,type-C 接口。在 X11 中可以找到外接显示器,但是卡顿明显&#xf…...

【计算机网络】高级IO之select

文章目录 1. 什么是IO?什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误?对错误码的进一步判断检测数据没有就绪时,返回做一些其他事情完整代码myt…...

如何设计一个高效的应用缓冲区【一个动态扩容的buffer类】

文章目录 前言一、为什么需要设计应用层缓冲区必须要有 output buffer目的问题output buffer的解决方案: 必须要有 input buffer总结 二、设计要点三、buffer设计思路基础函数关于iovec与readv readfd如何实现动态扩容 问题 前言 在上一个博客,我们介绍…...

图像处理初学者导引---OpenCV 方法演示项目

OpenCV 方法演示项目 项目地址:https://github.com/WangQvQ/opencv-tutorial 项目简介 这个开源项目是一个用于演示 OpenCV 方法的工具,旨在帮助初学者快速理解和掌握 OpenCV 图像处理技术。通过这个项目,你可以轻松地对图像进行各种处理&a…...

管道-匿名管道

一、管道介绍 管道(Pipe)是一种在UNIX和类UNIX系统中用于进程间通信的机制。它允许一个进程的输出直接成为另一个进程的输入,从而实现数据的流动。管道是一种轻量级的通信方式,用于协调不同进程的工作。 1. 创建和使用管道&#…...

【JavaEE基础学习打卡08】JSP之初次认识say hello!

目录 前言一、JSP技术初识1.动态页面2.JSP是什么3.JSP特点有哪些 二、JSP运行环境配置1.JDK安装2.Tomcat安装 三、编写JSP1.我的第一个JSP2.JSP执行过程3.在IDEA中开发JSP 总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高…...

使用序列到序列深度学习方法自动睡眠阶段评分

深度学习方法,用于使用单通道脑电图进行自动睡眠阶段评分。 def build_firstPart_model(input_var,keep_prob_0.5):# List to store the output of each CNNsoutput_conns []######### CNNs with small filter size at the first layer ########## Convolutionnetw…...

【算法】排序——选择排序和交换排序(快速排序)

主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...