ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql三大范式

2021-11-28 14:58:34  阅读:188  来源: 互联网

标签:范式 学号 依赖于 确定 mysql 主键 三大 属性


上星期,正感觉生活安逸,项目功能写的差不多了,突然学长说这周要面试我们java基础,突然就精神了起来。昨天面试过了结果也出来了,下面是学长对我的评价
在这里插入图片描述
数据库的知识忘了好多,虽然平常总是在项目中使用,但是一些基础的知识还是没记住。

数据库的三大范式:

范式的概念:

设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

满足前三个范式就能设计一个比较规范的数据库了。

设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

一、第一范式(1NF):每个列都不可以再拆分
在这里插入图片描述
上图,专业那一列下面有分出来了两个子列,显然是不符合第一范式的。

在这里插入图片描述
这才是符合第一范式的。

二、第二范式(2NF):在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

1.函数依赖:如果通过A属性(属性组),可以确定唯一B属性的值,那么B依赖于A。比如上图的姓名,完全依赖于学号
2.完全函数依赖:如果A是一个属性组,则B属性值的确定需要依赖于A属性组中的所有的属性值。属性组是指多个字段,那么比如我们要想知道一个分数,就必须依赖于学号和课程名称两个属性才能确定一个分数,其他的属性是不能确定某一个分数的
3.部分函数依赖:如果A是一个属性组,则B属性值的确定需要依赖A属性组的某一些字段即可,例如学号和课程名称为一个属性组,那么学生姓名其实就只需要学号就可以确定
4.传递函数依赖:如果A属性(属性组),可以确定唯一个B属性的值,再通过B属性的值又可以唯一确定C属性的值,例如一个学号确定一个系名,一个系名对应一个系主任
5.主键:在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性为该码的表,比如上图的学号和课程名称组成的属性组

1.函数依赖:如果通过A属性(属性组),可以确定唯一B属性的值,那么B依赖于A。比如上图的姓名,完全依赖于学号
2.完全函数依赖:如果A是一个属性组,则B属性值的确定需要依赖于A属性组中的所有的属性值。属性组是指多个字段,那么比如我们要想知道一个分数,就必须依赖于学号和专业名称两个属性才能确定一个分数,其他的属性是不能确定某一个分数的
3.部分函数依赖:如果A是一个属性组,则B属性值的确定需要依赖A属性组的某一些字段即可,例如学号和专业名称为一个属性组,那么学生姓名其实就只需要学号就可以确定
4.传递函数依赖:如果A属性(属性组),可以确定唯一个B属性的值,再通过B属性的值又可以唯一确定C属性的值,例如一个学号确定一个专业名,一个专业名对应一个专业长。
5.主键:在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性为该码的表,比如上图的学号和专业名称组成的属性组

简单来说,第二范式是在第一范式的基础上消除非主键对主键的部分依赖。
这样我们可以把表分为两个
在这里插入图片描述
在这里插入图片描述
三、第三范式(3NF):在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

在这里插入图片描述

标签:范式,学号,依赖于,确定,mysql,主键,三大,属性
来源: https://blog.csdn.net/zrllllll/article/details/121591054

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有