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.hqwc.cn/news/513239.html

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

相关文章

激活函数Swish(ICLR 2018)

paper:Searching for Activation Functions 背景 深度网络中激活函数的选择对训练和任务表现有显著的影响。目前,最成功和最广泛使用的激活函数是校正线性单元(ReLU)。虽然各种手工设计的ReLU替代方案被提出,但由于在…

更改Linux系统(我的是centOS7)[root@localhost ~]$的字体颜色样式

打开根目录 cd ~ 编辑样式文件 vi .bashrc 出现了一串代码 在末尾加入 PS1"\[\e[37;1m\][\[\e[35;1m\]\u\[\e[37;1m\]\[\e[32;1m\]\h \[\e[34;1m\]\W\[\e[37;1m\]]\[\e[33;1m\]\$ \[\e[0m\]" 保存并退出 最后刷新一下文件 source .bashrc 然后就发现 非常完…

构建信息蓝图:概念模型与E-R图的技术解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

【JavaEE】_Spring MVC项目之使用对象传参

目录 1. 使用对象传参 2. 后端参数重命名问题 2.1 关于RequestPara注解 本专栏关于Spring MVC项目的单个及多个参数传参一文中,已经介绍过了对于不同个数的参数传参问题,原文链接如下: 【JavaEE】_Spring MVC 项目单个及多个参数传参-CSD…

安装RabbitMQ及配置Centos7 方式(2)

1、背景需求 自行搭建学习参考使用,这里采用的Centos7 方式,这已经是多年前的方式了,现在主流方式是容器化安装、部署,docker、ks8,同学们可自行去学习参考。 2、搭建环境 环境:centos7 、otp_src_21.3、…

Java ElasticSearch面试题

Java ES-ElasticSearch面试题 前言1、ElasticSearch是什么?2. 说说你们公司ES的集群架构,索引数据大小,分片有多少 ?3. ES的倒排索引是什么?4. ES是如何实现 master 选举的?5. 描述一下 ES索引文档的过程:…

H5双人五子棋小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html> <…

Cookie和session 及Web相关工具

一 Cookie &#xff08;一&#xff09;介绍 Cookie 又称为"小甜饼”。类型为"小型文本文件”&#xff0c;指某些网站为了辨别用户身份而储存在用户本地终端&#xff08;Client Side&#xff09;上的数据&#xff08;通常经过加密&#xff09;。由网景公司的前雇员…

chatgpt4.0怎么购买

chatgpt4.0怎么购买 准备&#xff1a; 准备&#xff1a; 1.chatgpt3.5账号 2.一张虚拟卡 从ChatGPT第一版发布到现在&#xff0c;还不到一年的时间中&#xff0c;可是它使用的GPT架构已经从3.5版本进化到现在的4.0版本&#xff0c;随之而来的是其能力的极大提升。下面是GPT-…

PHP+MySQL组合开发:H5页面场景秀源码系统 带完整的搭建教程

随着移动互联网的快速发展&#xff0c;H5页面因其跨平台、易传播的特性&#xff0c;在各类营销活动中扮演着越来越重要的角色。H5页面场景秀&#xff0c;指的是利用HTML5技术结合创意设计&#xff0c;展示生动、丰富的互动页面&#xff0c;它可以在网页端、移动端等多平台呈现&…

AI企业发力智慧物流 HEGERLS四向车开启新一代托盘柔性物流解决方案

不论自动仓储、智能仓储&#xff0c;解决方案都需要更加平民化&#xff0c;普惠更多企业。柔性灵活、易于部署和扩展、初期投入成本低的方案一定是其中的重点。要实现这些特点&#xff0c;最重要的是硬件要做到标准化、软件要模块化&#xff0c;让仓储设备可以即插即用。凭借柔…

C语言回顾学习

一、数据类型 1.常量 2.float浮点表示 3.字符型 4.char&#xff08;大小写&#xff09; #include <stdio.h> //根据数字输出字符--int值可以直接输出为char int main() {int value;while (1){scanf("%d",&value);if(value<65||value>122){printf(&…