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

数据库设计三范式

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

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

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

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

三种基本关系:

image-20220718200454745

第一范式

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

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

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

修改:

	学生编号(pk) 		学生姓名	  邮箱地址		   联系电话---------------------------------------------------------1001				张三		zs@gmail.com	13599999991002				李四		ls@gmail.com	136999999991003				王五		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						0012						1002						0023						1003						0014						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.rhkb.cn/news/122556.html

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

相关文章

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出&#xf…

Redis之bigkey问题解读

目录 什么是bigkey? bigkey引发的问题 如何查找bigkey redis-cli --bigkeys MEMORY USAGE bigKey如何删除 渐进式删除 unlink bigKey生产调优 什么是bigkey? bigkey简单来说就是存储本身的key值空间太大,或者hash,list&…

VBA技术资料MF51:VBA_在Excel中突出显示唯一值

【分享成果,随喜正能量】世间万物,因果循环不休,你的善心善行,都可能成为你的善缘善果。每天忆佛念佛,每天都在佛菩萨的加持下生活,自然吉祥如意,法喜充满。 。 我给VBA的定义:VBA是…

「通信原理」格雷码的生成与破译

「通信原理」格雷码的生成与破译 格雷码,gray code,相邻两数之间只有一个bit发生了改变,因此相比于自然编码的二进制系统,格雷编码的更不容易出错。使用卡诺图化简布尔代数式的时候,也会用到格雷码。本文将介绍三种格…

php对接AWS S3云存储,上传S3及访问权限问题

首先先下载sdk包 https://docs.aws.amazon.com/zh_cn/sdk-for-php/v3/developer-guide/getting-started_installation.html S3创建存储桶 去安全凭证-》创建访问秘钥 创建的时候会提示,主账号创建不安全,这个时候我们需要创建一个IAM账号来创建秘钥 创…

密码学入门——环游密码世界

文章目录 参考书目一、基本概念1.1 本书主要角色1.2 加密与解密 二、对称密码与公钥密码2.1 密钥2.2 对称密码和公钥密码2.3 混合密码技术 三、其他密码技术 参考书目 图解密码技术 第三版 一、基本概念 1.1 本书主要角色 1.2 加密与解密 加密 解密 密码破译 二、对称密…

污水处理厂3D数字孪生三维可视系统降低设备风险隐患

当相对传统与保守的水务行业,与激进与开放的互联网发生碰撞之后,产生了最好的一个名词是:“智慧水务”,谈及智慧水务,自然免不了当下最具热度的技术“元宇宙”,水资源再生是我国追求高质量发展的新策略&…

基于Pytest+Allure+Excel的接口自动化测试框架

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。 Allure 是由 Java 语言开发…

C++ 模板

模板: 模板,即数据是灵魂,其余为肉身,正所谓有趣的灵魂万里挑一,所以想要模板变得完美,关键在于数据;其余不过是抄作业的框架。 模板函数: 模板函数可以自动推导出你传给他的数据类型…

1.初识爬虫

爬虫是批量模拟网络请求的程序,想百度谷歌这种搜索类网站本质上就是爬虫 使用爬虫的时候不应该对别人的网站有严重的影响,比如你爬的频率太高了,让人家的网站崩溃了。不应该爬取网页上显示不到的内容,比如有一个直播的网站&#…

算法通关村第十九关——最小路径和

LeetCode64. 给定一个包含非负整数的 m n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 输入:grid[[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径1→3→1→1→1的总和最小。 public int minPath…

16字节协议的串口通信

1.协议要求 协议为帧传输,一共16字节。主要是2字节的固定帧头 EB 90,2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头:2字节,固定值 8’HEB、8’H90 帧计数:2字节,用来说明发出去帧是…

【python爬虫】13.吃什么不会胖(爬虫实操练习)

文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人,哪怕不健身,也会和我一样注重饮食的健康,在乎自己每天摄入的食物热量。 不过,生活中应该很少有人会…

C语言入门 Day_14 for循环

目录​​​​​​​ 1.for循环 2.循环执行顺序 3.易错点 4.思维导图 前言 我们定义了一个数组以后,要使用(读取或者修改)数组元素的话,可以一个一个的读取,就前两课学的那样,代码类似这个结构。 int …

Centos7 + Apache Ranger 2.4.0 部署

一、Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 1、组件列表 # Service Name Liste…

镜像的基本命令(docker)

文章目录 前言一、docker命令介绍1、帮助命令2、显示镜像3、搜索镜像4、下载镜像5、删除镜像 总结 前言 本文主要介绍docker中与镜像相关的一些命令,是对狂神课程的一些总结,作为一个手册帮助博主和使用docker的同学们来查找和回忆。 实验环境&#xf…

C标准输入与标准输出——stdin,stdout

🔗 《C语言趣味教程》👈 猛戳订阅!!! ​—— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅&#…

植物大战僵尸植物表(二)

前言 此文章为“植物大战僵尸”专栏中的第007刊(2023年9月第六刊)。 提示: 1.用于无名版; 2.用于1代; 3.pvz指植物大战僵尸(Plants VS Zonbies)。 植物大战僵尸植物表 土豆雷窝瓜火炬树桩火爆辣椒杨…

原来Linux这么牛:称霸全球超级电脑 500 强!

还记得之前《全球超级电脑 500 强,中国拿走冠亚军》新闻?虽然昔日超级电脑强权的美国在超级计算机竞赛中落后,但不管哪国打造的超级电脑,还有一件事情值得留意喔──几乎全部都是执行以 Linux 为基础的操作系统(注&…

华为云云服务器评测|云耀云服务器实例基础使用实践

🦖我是Sam9029,一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 **🐱‍🐉🐱‍🐉恭喜你,若此文你认为写的不错,不要吝啬你的赞扬,求…