MySql学习笔记12——数据库设计三范式

news2024/10/7 14:22:15

数据库设计三范式

第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。

第二范式:建立在第一范式之上,要求所有非主键字段必须完全依赖主键,不能部分依赖

第三范式:建立在第二范式之上,要求所有非主键字段必须直接依赖主键,不要产生传递依赖

按照三范式设计数据库,可以避免表中数据的冗余,造成空间不必要的浪费。

三种基本关系:

image-20220718200454745

第一范式

必须有主键,并且每一个字段都是原子性不可再分。

	学生编号 	学生姓名 		联系方式
	------------------------------------------
	1001		张三		zs@gmail.com,1359999999
	1002		李四		ls@gmail.com,13699999999
	1001		王五		ww@163.net,13488888888

不满足第一范式:没有主键,并且联系方式可再分

修改:

	学生编号(pk) 		学生姓名	  邮箱地址		   联系电话
	---------------------------------------------------------
	1001				张三		zs@gmail.com	1359999999
	1002				李四		ls@gmail.com	13699999999
	1003				王五		ww@163.net		13488888888

第二范式

要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

	学生编号 		学生姓名  教师编号   教师姓名
-----------------------------------------------------
	1001			张三		001		王老师
	1002			李四		002		赵老师
	1003			王五		001		王老师
	1001			张三		002		赵老师

不满足第一范式:

	学生编号+教师编号(pk)		     学生姓名  		 教师姓名
	----------------------------------------------------
	1001			001				张三			王老师
	1002			002				李四			赵老师
	1003			001				王五			王老师
	1001			002				张三			赵老师

但是由于复合主键,导致部分依赖主键:“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。数据冗余了。空间浪费了。“张三”重复了,“王老师”重复了。

对于这种多对多关系,我们采取“建立三张表,关系表两外键”的方式

		学生表
		学生编号(pk)			学生名字
		------------------------------------
		1001					张三
		1002					李四
		1003					王五
		
		教师表
		教师编号(pk)		教师姓名
		--------------------------------------
		001					王老师
		002					赵老师

		学生教师关系表
		id(pk)				  学生编号(fk)			    教师编号(fk)
		------------------------------------------------------------
		1						1001						001
		2						1002						002
		3						1003						001
		4						1001						002

第三范式

要求所有非主键字典必须直接依赖主键,不要产生传递依赖。

	  学生编号(PK)        学生姓名   班级编号       班级名称
	---------------------------------------------------------
		1001				张三		01			一年一班
		1002				李四		02			一年二班
		1003				王五		03			一年三班
		1004				赵六		03			一年三班

一年一班依赖01,01依赖1001,产生了传递依赖。

对于这种一对多的关系,我们采取建立两张表,多的表加外键

		班级表:一
		班级编号(pk)				班级名称
		----------------------------------------
		01								一年一班
		02								一年二班
		03								一年三班

		学生表:多

		学生编号(PK)      学生姓名     班级编号(fk)
		-------------------------------------------
		1001				张三			01			
		1002				李四			02			
		1003				王五			03			
		1004				赵六			03	

总结

  • 一对多

    两张表,多的表加外键

  • 多对多

    三张表,关系表两个外键

  • 一对一

    对于一些巨大的表,需要对表进行拆分,拆成两张表,外键唯一

数据库设计三范式是理论上的。

实践和理论有的时候有偏差。

最终的目的都是为了满足客户的需求,有的时候会拿冗余换执行速度。

因为在sql当中,表和表之间连接次数越多,效率越低。(笛卡尔积)

有的时候可能会存在冗余,但是为了减少表的连接次数,这样做也是合理的,并且对于开发人员来说,sql语句的编写难度也会降低。

面试的时候把这句话说上:他就不会认为你是初级程序员了!

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

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

相关文章

分享2款微课录制软件,保证让你满意!

“录微课用什么软件呀,真的服了,平台自带的录屏画质太差了,完全看不清讲的内容,而且音质也不是很好,大家有没有微课录制的软件推荐,谢谢啦” 随着教育方式的转型和技术的发展,微课程成为了一种…

虚拟机(三)VMware Workstation 桥接模式下无法上网

目录 一、背景二、解决方式方式一:关闭防火墙方式二:查看桥接模式下的物理网卡是否对应正确方式三:查看物理主机的网络属性 一、背景 今天在使用 VMware Workstation 里面安装的 Windows 虚拟机的时候,发现虽然在 NAT 模式下可以…

2023年9月NPDP产品经理国际认证报名,当然弘博创新

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

C#,数值计算——NRf1(UniVarRealValueFun)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class NRf1 : UniVarRealValueFun { public RealValueFun y1; public RealValueFun y2; public NRf2 f2; public NRf1(RealValueFun y1, RealValueFun y2, RealValueFun z1,…

IMAU鸿蒙北向开发-2023年9月4日学习日志

1 HarmonyOS 1.1 南向设备开发与北向应用开发 上北下南,上层应用开发叫北向,底层设备开发叫南向。 北向:指的纯应用软件开发,基于官方提供的系统SDK进行应用开发,HarmonyOS 目前支持使用java、js、 ets、c、c进行开发…

丢失msvcp110.dll是什么意思?msvcp110.dll丢失的解决方法

当您在使用电脑时,可能会遇到这样的提示:“由于缺少msvcp110.dll文件,无法启动此程序。”那么,丢失msvcp110.dll到底是什么意思呢?又该如何解决这个问题呢?接下来,我将为您详细解答。 丢失msvcp…

笔记本家庭版本win11上win+r,运行cmd默认没有管理员权限,如何调整为有管理员权限的

华为matebookeGo 笔记本之前有段时间不知怎么回事,打开运行框,没有了那一行“使用管理权限创建此任务”,而且cmd也不再是默认的管理员下的,这很不方便,虽然每次winr ,输入cmd后可以按ctrlshitenter以管理员权限运行&am…

八路DI八路DO,开关量远程IO模块,Modbus TCP数据采集模块 YL90-RJ45

特点: ● 八路开关量输入,八路开关量输出 ● DI状态变化自动发送状态数据,可以捕获脉冲 ● 采用Socket自由协议编程简单、轻松应用 ● 开关量毫秒级响应速度适应多种场合 ● 内置网页功能,可以通过网页查询与控制 ● 同时也…

微型计算机原理知识点总结(一)

目录 一.微型计算机 二.微型计算机系统 1.微型计算机硬件系统 冯诺依曼体系结构 总线 (1)微处理器(CPU) 运算器 控制器 内部寄存器 (2)存储器 1.基本概念 2.内存的操作 3.内存的分类 (3)I/O接口与输入/输出设备 2.微型计算机软件系统 (1)系统软件 操作系统 …

SpringBoot实现发送邮件功能

平时注册或者登录一个网站时,可能收到过邮件用来发送验证码等,邮件在项目中经常会被用到,比如邮件发送通知,比如通过邮件注册,认证,找回密码,系统报警通知,报表信息等。 发送邮件用…

第一次做接口测试用例

一、简介 在开始接口测试之前,我们想一下,接口测试的流程是什么?说到这里,有些人就会产生好奇和疑问,心里mmp:接口测试要什么流程哈???不就是参考接口文档,直…

金蝶云星空对接打通赛意SMOM委外退料单接口与保存ASN数据接口

金蝶云星空对接打通赛意SMOM委外退料单接口与保存ASN数据接口 对接源平台:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff…

数据结构(一)Trie字符串统计

目录 代码 (一)输入cat son[p][u],p表示儿子,u表示第几个儿子 0的根的节点编号为idx -------------------------------------------------------- 根是0的有个儿子c,编号为1的节点有个子节点为a,a的编号是2&#xf…

SegNeXt学习记录(一):配置环境 测试代码

安装配置MMSegmentation环境 为了验证 MMSegmentation 和所需的环境是否安装正确,我们可以运行示例 python 代码来初始化分段器并推断演示图像: from mmseg.apis import inference_segmentor, init_segmentor import mmcvconfig_file configs/pspnet/…

一辆新能源汽车的诞生之旅:比亚迪常州工厂探营

作为在新能源汽车领域首屈一指的国产品牌,比亚迪近年来可以说是捷报频传,高奏凯歌。 以比亚迪常州工厂为例,据介绍该工厂当初规划设计时定下的生产目标,是年产量能够达到20万辆。然而在2023年上半年,该工厂光是主要销往…

美元的吸血鬼攻击

今日荐读:9.3教链内参《摩根大通认为SEC将被迫批准现货ETF》。刘教链Pro《为什么我写了PGP》。 * * * 刘教链 原创 * * * 自2022年3月16日美联储议息会议后决定开始加息25bp以来,今天(2023.9.4)已经是本轮加息周期的第537天。在…

网络编程面试题

计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就…

全栈监控,可视化整个堆栈

IT 管理员能够监## 标题控终端设备已有一段时间了,但随着现代基础架构和向混合云架构的转型,端到端可见性至关重要,混合云环境的行为可能不可预测,因此传统技术通常是不够的。传统基础结构监视方法的最大缺点是缺乏对环境特定部分…

Pandas DataFrame 数据存储格式比较

Pandas 支持多种存储格式,在本文中将对不同类型存储格式下的Pandas Dataframe的读取速度、写入速度和大小的进行测试对比。 创建测试Dataframe 首先创建一个包含不同类型数据的测试Pandas Dataframe。 import pandas as pdimport randomimport stringimport numpy …

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位(Flags)3.2、序号(sequence number)3.3、确认号(acknowledgement number) 四、状态…