【MySQL入门实战1】-数据库三大范式

news2024/11/24 22:31:28

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.概述
    • 📣 2.第一范式
    • 📣 3.第二范式
    • 📣 4.第三范式
    • 📣 小结
    • ✨ 每日一练

前言

MySQL入门实战将持续推出MySQL入门的技能和相关运维经验给大家

📣 1.概述

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则,在关系型数据库中这种规则就被称为范式。范式是符合某一种设计要求的总结。因此要设计一个结构合理的关系型数据库,就必须要满足下面这三大范式。

📣 2.第一范式

第一范式也称不可再分

数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。第一范式(1NF)主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。

表1-1
在这里插入图片描述

📢 如表1-1所示,这张表实际上就不满足1NF,因为班级这列是可以继续被拆分的。

表1-2
在这里插入图片描述
📢 如表1-2所示,这个表中不能有可以被继续拆分的列,即表中的每一个属性列都具有原子性。

📣 3.第二范式

第二范式即消除部分依赖。

第二范式(2NF)是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键,非主键列完全依赖于主键,而不能是依赖于主键的一部分,如表1-3.

表1-3
在这里插入图片描述

注意:不是所有属性字段都完全依赖联合主键的,它们或许只依赖主键中的一部分,这种部分依赖的关系是不满足2NF的,表1-3中的例子中,由于商品的名称和价格字段不依赖于商品类别的主键id,所以不符合第二范式,因此我们需要进行拆表。可以将其修改成如下表1-4 category和表1-5 goods所示的表设计,商品信息goods表通过商品类别id字段与数据表category中商品类别category_id字段进行关联。

表1-4
在这里插入图片描述

符合第二范式的category数据表的设计,如表1-4

表1-5
在这里插入图片描述

符合第二范式的goods数据表的设计,如表1-5

📣 4.第三范式

第三范式即消除部分依赖。

在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。第三范式(3NF)是需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

表1-6 不满足3NF的表
在这里插入图片描述

注意:表1-6中主键是"学号",直接依赖于"学号"的有"姓名"和"课程号"。“课程名称"直接依赖于"课程号”,间接依赖于"学号"。因此,我们需要为课程号和课程名称单独创建一个表出来,下面是结果

表1-7,符合第三范式的学生表的设计
在这里插入图片描述
表1-8,符合第三范式的课程表的设计
在这里插入图片描述

📣 小结

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看业务需求和性能,需求>性能>表结构,所以不能一味的去追求范式建立数据库关联。要尽量遵守三范式,如果不遵守,必须有足够的理由,事实上我们经常会为了性能而妥协数据库的设计。

✨ 每日一练

以下关于三个范式说法错误的是:()
A.第一范式中,数据库表中的字段都是单一属性的,不可再分。
B.第二范式中,在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
C.第三范式中,在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
D.在设计数据库结构的时候,必须遵守三范式。

❤️❤️❤️ 请在评论区留下你的答案,我会做出详细的解答。

在这里插入图片描述

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

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

相关文章

[oeasy]python0024_ 输出时间_time_模块_module_函数_function

输出时间 回忆上次内容 ​print​​函数 有个默认的 ​​end参数​ ​​end参数​​ 的值可以是任意字符串​​end参数​​ 的值会输出到结尾位置​​end参数​​ 的默认值是 ​​\n​​ 如果​​end​​是空串(​​end""​​) 意味着输出后不自动换行我可以手动在…

自制肥鲨HDO2电源延长线,支持3S~6S动力电池

自制肥鲨HDO2电源延长线,支持3S~6S动力电池1. 问题源由2. 破题思路2.1 10元大钞搞定2.2 两个毛爷爷搞定3. 解决方案4. 最终延长线产出4.1 裸照4.2 成品1. 问题源由 源由: 电池盒电源线接触不良。 肥鲨眼镜的电源盒问题由来已久,而且主要问题…

NNDL实验 知识点梳理

目录 实验内容 编程基础 机器学习基础 FNN CNN RNN 网络优化与正则化 扩展实验 建议自学实验 实验基本步骤 实验涉及知识点 知识点相关细节 更多细节 实验内容 编程基础 NNDL 实验一 numpy NNDL 实验二 pytorch 机器学习基础 NNDL 实验三 线性回归 NNDL 实验…

笔记(上):mysql-DuplicateUpdate和java的threadpool的“死锁“

今天给大家讲讲最近2个有意思的issue,分享一下我学到的 mysql DuplicateUpdate的用法要注意的点java的threadpool使用不当会造成“死锁”问题 mysql DuplicateUpdate的用法要注意的点 有个issue说遇到了一个这样的问题, 这个朋友使用我开源的job调度框…

软件包管理器yum与编辑器vim的使用

目录yum的背景yum的生态yum的本土化(换源)yum的使用查看软件包安装软件卸载软件vim的使用Vim的基本基本介绍Vim的模式切换Vim的光标定位Vim的文本复制Vim的文本编辑Vim的底行模式的操作vim的配置管理员权限(sudo)的配置yum的背景 yum的生态 在日常的生…

Node.Js基础知识

Node.Js架构 Natives modules 当前层内容由JS实现提供 应用程序可直接调用库,例如:fs、path、 http等JS语言无法直接操作底层硬件设置(–》Builtin modules 胶水层) Builtin modules 胶水层 在V8引擎下,主要是帮助…

geomtextpath | 成功让你的ggplot注释拥有傲人曲线!~

1写在前面 最近的世界杯结果的确是让人大跌眼镜🕶️, 日本队🇯🇵先后击败世界杯冠军, 德国队🇩🇪和西班牙队🇪🇸, 韩国队🇰🇷逆转葡萄牙🇵🇹, 踩着…

定时轮询-长轮询-websocket

一般网页 点击网页后,前端向后端 发送请求(使用http协议) 那么如何实现后端主动先前端发送数据,比如:网页游戏 聊天室 文件共享 扫码登入 http定时轮询 (轮询) 在前端代码中每隔一段时间向后…

宝塔面板Linux

目录 1.宝塔面板简介 2.安装与连接 3.安装软件 4.端口管理 5.宝塔面板设置 这里主要讲的是宝塔面板的主要操作,本节应与xshell与xftp共同使用 1.宝塔面板简介 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松…

第六章- Verilog HDL 高级程序设计举例【Verilog】

第六章 Verilog HDL 高级程序设计举例【Verilog】前言推荐第六章 Verilog HDL 高级程序设计举例状态机用状态机设计1101序列检测器需要定义几个状态?代码设计——端口信号声明状态寄存器次态生成逻辑设计(C1模块)输出逻辑设计(C2模块)完整代码测试结果用状态机设计1…

vSphere-ESXi

VMware-vShpere 第一步: 在VMware虚拟机上安装一台ESXI 开启虚拟机 至此,虚拟机ESXI安装完毕 第二步:使用ESXI虚拟机IP上浏览器 登录后,上传一个映像文件至ISO文件 将VM虚拟机关机 手动添加一块硬盘 然后再使用虚拟机IP进入浏览器…

python入门——基础语法

python入门——基础语法 注释 单行注释:使用# 多行注释:使用 “”" “”" type():查看数据的类型 int():转化为整数 float():转化为浮点数 str():转化为字符串 标识符不可以使用这些 …

Spring WebFlux简单使用

官网:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html 1.WebFlux介绍 Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻…

蓝桥杯嵌入式LCD屏幕

文章目录前言一、拷贝官方例程二、cubeMX配置三、LCD代码及函数分析使用四、sprintf函数总结前言 本篇文章将带大家学习LCD屏幕的操作,LCD的配置是非常复杂的,在比赛上去实现这些驱动程序基本上是不可能的,当然了比赛官方也是知道这一点的&a…

SpringMVC基础篇:MVC基础知识

第一章:SpringMVC引言 一:什么是SpringMVC 概念:SpringMVC是在Spring框架基础上衍生而来的一个MVC框架,主要解决了原有的MVC框架过程中控制器(Controller)的问题。 SpringMVC是Java开发当中最主流的web技…

了解软件测试

软件测试课程 1.1课程内容: 软件基础课程 ------设计测试用例方法 自动化课程(web自动化)------ 抢票功能 性能测试课程 ----项目性能测试 1.2 什么是测试 1.21 生活中测试的案例 坐地铁,做核酸,扫核酸码 比如当我…

[附源码]计算机毕业设计学生社团信息管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

零基础学习软件测试,掌握四点就够了

近年来越来越多的人转行到软件测试这一领域,对于很多外行的人来说,肯定对这一行业有很多不了解,对于这一职业的职责以及要求都会不清楚,那么我们今天就来梳理一下关于软件测试行业的信息。 一、软件测试的主要职责你知道吗&#x…

裸辞闭关60天,啃下这些软件测试笔记,有幸通过阿里测开岗P6面试

时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。 近段时间,我也了解到很多小伙伴不清楚作为测试工程师应该掌握什么样的核心知识?实际…

暴力算法 --- 莫队

文章目录莫队基础莫队带修改莫队树上莫队回滚莫队莫队 什么是莫队? 答:优雅的暴力!!! 基础莫队 重复的数 题目描述:给出一个长度为NNN的序列,有若干查询,每次查询区间[li,ri][l_i,…