学习记录之三大范式

前言

前段时间面试,被人问到创建mysql的时候的三大范式是什么?

当时就在想:三大范式?什么鬼?我怎么没听过(毕竟不是科班出身),我创建数据库的时候,不就是一个通过主键相互关联嘛,三大范式什么鬼?

最后面试结束后,才去看了看相关的知识,这时候才明白,原来自己创建表的时候,就已经使用到了三大范式,只不过自己不晓得而已,giao~,那么现在就看看三大范式是什么东西吧!

1、首先要知道三大范式是什么?

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

通过上面的文字可以知道,是为了让设计出来的数据库更加合理,冗余更小

2、其次就是“三大范式的内容”

第一范式:
当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:
如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:
设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。

看到上面的三条范式,是不是一脸懵逼,我是谁?,我在哪?我干嘛?这是什么东西?下面,我给你翻译一下!

第一范式:
就是属性不可分割。属性是什么?就是表中的字段。

第二范式:
就是要有主键,要求其他字段都依赖于主键。

第三范式:
就是要消除传递依赖,方便理解,可以看做是“消除冗余”。

这样是不是看着就稍微清晰点了,接下来就举一些栗子看看。

3、三大范式详细解释

第一范式:属性不可分割。

首先看反例:

编号姓名性别年龄联系电话地址
1张三111571111111河南省开封市朝阳区某某小区
2李四22157222222广州省 广东市白云区天明路某某号
3王五33157333333河南省郑州市二七区大学路
4李六441574444444河南省郑州市新郑市薛店北街

下面是改正后的:

编号姓名性别年龄联系电话省份城市详细地址
1张三111571111111河南开封朝阳区某某小区
2李四22157222222广州广东白云区天明路某某号
3王五33157333333河南郑州二七区大学路
4李六441574444444河南郑州新郑市薛店北街

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能

第二范式:要有主键,要求其他字段都依赖于主键。

首先看反例:
学生表:

学号姓名性别年龄班主任班主任年龄班主任性别
20210101张三11张邻34
20210102李四22张邻34
20210103王五33张邻34
20210104李六44刘鹏45

下面是改正后的:
学生表:

编号姓名性别年龄
20210101张三11
20210102李四22
20210103王五33
20210104李六44

学生教师关系表:

编号学号教师编号
1202101011
2202101021
3202101031
4202101042

教师表:

编号姓名年龄性别
1张邻34
2刘鹏45

以上就是一个满足范式二的例子,是不是感觉:就这?就这?就这?

第三范式:消除传递依赖,方便理解,可以看做是“消除冗余”。

改正前:
学生表:

编号姓名性别年龄系编号系名称系主任
20210101张三111计算机信息系张邻
20210102李四221计算机信息系张邻
20210103王五331计算机信息系张邻
20210104李六442中文系王麻子

系表:

编号系名称系主任系简介
1计算机信息系张邻计算机系成立于。。。。
2中文系王麻子中文系成立于。。。。

以上信息中的系名称,系主任都属于冗余数据,
下面是改正后的:
学生表:

编号姓名性别年龄系编号
20210101张三111
20210102李四221
20210103王五331
20210104李六442

系表:

编号系名称系主任系简介
1计算机信息系张邻计算机系成立于。。。。
2中文系王麻子中文系成立于。。。。
以上就是三大范式,其实我们在设计数据库的时候已经用到了,只不过我们自己不知道而已
上面关于三大范式的知识和理解,如果有什么不对的地方,希望大家可以指出来,谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值