MySQL的三大范式

文章目录

  • 简介
  • 第一范式
  • 第二范式
  • 第三范式:

简介

在MySQL的使用中, 要根据实际灵活设计表,一般来说我们通常遵循三大范式(啥是范式:是一些约束、规范、规则, 来优化数据库表的设计和存储),三大范式之间是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上。

第一范式

第一范式:列不可再分

第一范式遵循原子性:数据表中的列数据都像原子一样不可再分
举例子理解:

姓名爱好
明星蔡徐坤打篮球
网红童锦程开法拉利SF90
程序员分才996

里面的数据还可以再分吗?

从数据中可以看出姓名列的数据可以明显分为职务和姓名,分好后:

姓名爱好职务
蔡徐坤打篮球明星
童锦程开法拉利SF90网红
分才996程序员

这样改是不是好多了。。。。

第二范式

行可以唯一区分

第二范式遵循唯一性:在第一范式的基础上,数据表的主键行的数据(或联合主键的数据)可以确定其他所有行的数据,满足主键约束。

姓名爱好职务
蔡徐坤打篮球明星
童锦程开法拉利SF90网红
分才996程序员
分才开法拉利程序员

我们开始按照第二范式开始分析:
如果以姓名作为主键,我们可以确定职务,但是无法确定爱好,就像不知道分才到底爱996还是爱开法拉利(SF90)。

所以说第二范式要求我们一张表只能干一件事
根据第二范式,我们可以将表拆分成两个表:

表1: 人员信息表 (Person)

姓名(主键)职务
蔡徐坤明星
童锦程网红
分才程序员

表2: 爱好表 (Hobby)

爱好(主键)姓名(外键)
打篮球蔡徐坤
开法拉利SF90童锦程
996分才
开法拉利分才

第三范式:

表的非主键属性不能依赖与其他表的非主属性 ,满足外键约束

在数据库设计中,第三范式是关系数据库设计规范中的一个重要概念,它要求一个关系中的所有字段都只依赖于主键,而不依赖于其他非主键字段。这样可以避免数据冗余和数据插入异常。

开始有点难度了

在这里插入图片描述

举个例子来说明第三范式的概念:

假设我们有一个学生信息表(Students),其中包含以下字段:

  • 学生ID(StudentID,主键)
  • 学生姓名(StudentName)
  • 学生年龄(StudentAge)
  • 班级(Class)
  • 班级老师(Teacher)

如果我们设计的表结构中存在这样的依赖关系:班级依赖于班级老师,即一个班级只能有一个班级老师,那么这个设计就不符合第三范式。

在这种情况下,应该将班级和班级老师分开成两个表,如下所示:

Students表

  • 学生ID(StudentID,主键)
  • 学生姓名(StudentName)
  • 学生年龄(StudentAge)
  • 班级ID(ClassID,外键,关联Classes表)

Classes表

  • 班级ID(ClassID,主键)
  • 班级(Class)
  • 班级老师(Teacher)

通过将班级和班级老师分开成两个表,我们遵循了第三范式,确保了数据的一致性和避免了数据冗余。

当然在实际生活中我们要灵活应用,不是非要硬套公式。

建了一个公众号(名字叫音耀),后续会在上面更新一些有用资源和笔记,大家有兴趣的话可以加一下谢谢了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 模型分享:3D Animation Diffusion(3D动漫)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 3D Animation Diffusion 是 Lykon 大神的 3D 动漫模型。 作者述:在迪士尼、皮…

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程,获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…

ffmpeg使用vaapi解码后的视频如何基于x11或EGL实现0-copy渲染?

技术背景 对于ffmpeg硬解码后渲染常见的做法是解码后通过av_hwframe_transfer_data方法将数据从GPU拷贝到CPU,然后做一些转换处理用opengl渲染,必然涉及到譬如类似glTexImage2D的函数将数据上传到GPU。而这样2次copy就会导致CPU的使用率变高&#xff0c…

智能物联时代下RFID技术在汽车零部件智能制造中的引领作用

RFID(Radio Frequency Identification,射频识别)技术在汽车零部件加工中有广泛的应用,其工作原理是通过无线电频率进行自动识别。在汽车零部件加工中,RFID技术可以发挥重要作用,提高生产效率、降低成本和减…

【C++ 学习】C++ 传值 传指针 传引用

C 传值 传指针 传引用 文章目录 C 传值 传指针 传引用引用const 引用指针的引用和引用的指针引用作为函数参数例子 C 函数传参主要是三种方法:传值、传指针、传引用。 说在前面: 传引用相对来说是简单一点的,也更加优雅。 明确几点&#x…

js形参传递特殊字符

在前端我们给其他页面传值或者传数据到后台的时候,字符串经常将一些特殊符号识别成字符集。这种情况下会将数据打断或者打乱,比如字符串里面包含*/&这些符号的时候就会错误。 我们可以通过将字符中的特殊字符替换成十六进制的字符,一些特…

【Linux从青铜到王者】进程信号

——————————————————————————————————————————— 信号入门 在了解信号之前有许多要理解的相关概念 我们可以先通过一个生活例子来初步认识一下信号 1.生活角度的信号 你在网上买了很多件商品,再等待不同商品快递的到来…

LeetCode hot100-4

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。我的解法可以通过,而且时间能打败99.98%的Java 思路就是找出有几个0。然后遍历数…

从事测绘地信,你需要这些插件、软件、小工具、图源...

特别声明,本篇是来自公众号GIS前沿的资源,看着比较好,特别给大家推荐。加粗样式 今天,我们又来汇总了一些工作中实用的插件、小工具、数据等等,小助手又来帮你提高工作效率了****。 因为小助手每年都会总结一次&…

15.Django总结

文章目录 1.Django创建项目的命令2.MVC,MVT的理解3.Django中间件的使用4.WSGI,uWSGI服务器 和 uwsgi协议5.nginx和uWISG 服务器之间如何配合工作的6.django开发中数据库做过什么优化7.Python中三大框架各自的应用场景8.django如何提升性能(高并发)9. 什么是restful api谈谈你的…

Verilog宏、`include<要包含的路径/文件>

Verilog宏 Verilog对宏的定义如下: define TESTEQ1 4b1101 定义的宏稍后将被引用,如下所示: 如果(请求TESTEQ1) “ifdef”和“endif”构造执行以下操作: •确定是否定义了宏。 •定义条件编译。 如果定义了…

MySQL性能优化-数据库调优有哪些维度可以选择

数据库调优的目标 简单来说,数据库调优的目的就是要让数据库运行得更快,也就是说响应的时间更快,吞吐量更大。 不过随着用户量的不断增加,以及应用程序复杂度的提升,我们很难用“更快”去定义数据库调优的目标&#…

windows常用命令总结

Windows常用命令总结如下: 系统管理与维护: shutdown:用于关闭或重新启动计算机。例如,shutdown -s -t 60 表示60秒后关机,shutdown -r -t 60 表示60秒后重启。systeminfo:显示关于计算机及其操作系统的详细…

掘根宝典之C语言if,switch,break,continue,逻辑运算符(||,,!),?:运算符

if语句 C语言中的if语句用于执行给定条件下的一部分代码。 if语句的语法如下: if (condition) {// code to be executed if condition is true }在这里,condition是一个表达式,如果为真,则执行if语句块中的代码。如果条件为假&…

蓝桥集训之重新排序

蓝桥集训之重新排序 核心思想&#xff1a;差分 利用差分 在一段区间内 最终求和得到每个位置数计算的次数然后分别从大到小排序w[i]和s[i]数组 #include<iostream>#include<algorithm>using namespace std;typedef long long LL;const int N 100010;int w[N],s…

Python并发编程:协程-gevent模块

一 gevent模块 Gevent是一个第三方库&#xff0c;可以轻松通过gevent实现并发同步或异步编程。在gevent中用到的主要模式是Greenlet&#xff0c;它是以C扩展模块形式接入Python的轻量级协程。Greenlet 全部运行在主程序操作系统进程的内部&#xff0c;但它们被协作式地调度。 …

Stable Diffusion ———LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo等版本之间关系现原理详解

前言 2021年5月&#xff0c;OpenAI发表了《扩散模型超越GANs》的文章&#xff0c;标志着扩散模型&#xff08;Diffusion Models&#xff0c;DM&#xff09;在图像生成领域开始超越传统的GAN模型&#xff0c;进一步推动了DM的应用。 然而&#xff0c;早期的DM直接作用于像素空…

cmd模式下启动mysql

1.打开cmd输入services.msc&#xff0c;找到MYSQL&#xff0c;右击属性&#xff0c;找到可执行文件路径&#xff0c;加载到环境变量。 2.打开cmd&#xff0c;启动MYSQL&#xff1a;输入net start mysql; 3.登陆MYSQL&#xff0c;需要管理权限&#xff1b; 输入&#xff1a;my…

HALCON 快速入门手册

HALCON 快速入门手册 1 什么是 HALCON HALCON 是德国 MVtec 公司开发的一套完善的标准的机器视觉算法包&#xff0c;拥有应用广泛 的机器视觉集成开发环境。它节约了产品成本&#xff0c;缩短了软件开发周期——HALCON 灵活的 架构便于机器视觉&#xff0c;医学图像和图像分析应…

Docker容器化解决方案

什么是Docker&#xff1f; Docker是一个构建在LXC之上&#xff0c;基于进程容器的轻量级VM解决方案&#xff0c;实现了一种应用程序级别的资源隔离及配额。Docker起源于PaaS提供商dotCloud 基于go语言开发&#xff0c;遵从Apache2.0开源协议。 Docker 自开源后受到广泛的关注和…