你还记得数据库三范式吗?

Posted 一只努力学习的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你还记得数据库三范式吗?相关的知识,希望对你有一定的参考价值。

前言

“学长,SqlServer数据库三范式可以简单帮我理解一下吗?”。

学妹的一句话把我问蒙了,因为三范式的概念早就丢到外太空去了。

但是呢,我不能直接说我忘记了,为了不影响在学妹心目中的形象(你懂的),我还特意去百度查了一下。

然后整理了一下,大家如果有和我一样忘记了的可以看一下(概念+举例),浅显易懂。

数据库三范式

  1. 第一范式(1NF):第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
  2. 第二范式(2NF):第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一的区分。
  3. 第三范式(3NF):满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;

第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖;

第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖。

1. 必须保证数据库设计的合理性

  • 数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率
  • 数据库的设计主要包含了设计表结构和表之间的联系

2. 如何是合理的数据库

  • 结构合理
  • 冗余较小
  • 尽量避免插入删除修改异常

3. 如何才能保证数据库设计水平

  • 遵循一定的规则
  • 在关系型数据库中这种规则就称为范式

4. 什么是范式(NF,NormalForm)

  • 范式是符合某一种设计要求的总结
  • 要想设计一个结构合理的关系型数据库,必须满足一定的范式
  • 各个范式是依次嵌套包含的
  • 范式超高,设计质量超高,在现实设计中也越难实现
  • 一般数据库设计,只要达到第三范式,即可避免异常的出现

 

举例说明

第一范式(概念+举例)

1. 要求

  • 最基本的范式
  • 数据库表每一列都是不可分割的基本数据,同一列中不能有多个值
  • 简单说就是要确保每列保持原子性
  • 第一范式的合理遵循需要根据系统的实际需求来定

2. 示例

第二范式(概念+举例)

1. 要求

  • 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)
  • 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

2. 示例

 

在上面第一范式示例表中的数据看出,这不符合第二范式,所以进行拆分如下,

 

第一张主键相关为(学号、课程名称),第二张表为(学号),它们都是完全依赖的,因此符合第二范式。

 

         

第三范式(概念+举例)

1. 要求

  • 确保数据表中的每一列数据都和主键直接相关,而不能间接相关
  • 属性不依赖于其他非主属性(消除依赖)

 2. 示例

注意看第二范式的学生表:存在系主任依赖于系名 (系名---> 系主任),所以不符合第三范式,继续进行拆分如下:

    

总结

我们看到,第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。
我们为没有与表的主键关联的所有信息建立了一张新表。
每张新表保存了来自源表的信息和它们所依赖的主键。 


数据库设计规范化能让我们更好地适应变化,使你能够改变业务规则、需求和数据而不需要重新构造整个系统。

参考文献

三范式:百度百科

三大范式:https://zhuanlan.zhihu.com/p/28528655

数据库设计三大范式:https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html#undefined

 

 
欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取
作者:熊泽-学习中的苦与乐
公众号:熊泽有话说
出处: https://www.cnblogs.com/xiongze520/p/15433197.html
您可以随意转载、摘录,但请在文章内注明作者和原文链接。  

 

 

 

姑娘你是在玩火啊...

两个月...

八篇博客...

你还记得大明湖畔的ML吗...

你还记得大明湖畔的hadoop吗...

你还记得大明湖畔的leetcode吗...

你还记得大明湖畔的千里码吗...

你还记得大明湖畔的sed、awk、grep吗...

你还记得大明湖畔的数据量太大内存放不下吗...

你还记得大明湖畔的Mathout吗...

你还记得大明湖畔的R吗...

你还记得大明湖畔的自制编程语言吗...

你还记得大明湖畔的龙书吗...

你还记得大明湖畔的编程之美、编程珠玑、剑指offer、程序员面试金典吗...

你还记得大明湖畔的TCP/IP、多线程、第二范式吗...

..............................................

脸已经被扇成猪头...

I‘m back...

认真脸...

两个月说长不长,说短不短...

两个月可以做很多有用的事,当然也可以做很多没用的事...

做正确的事,做让自己有所成长的事...

我要开启学霸模式...

挡我者死...

........................................

 

以上是关于你还记得数据库三范式吗?的主要内容,如果未能解决你的问题,请参考以下文章

姑娘你是在玩火啊...

数据结构,你还记得吗(下)

数据结构,你还记得吗(中)

编程范式--对象范式,这不是原来的配方了

正则表达式,你还记得多少?

这几个经典的基础排序算法,你还记得吗?