0
点赞
收藏
分享

微信扫一扫

数据库--三大范式--介绍/使用/实例


、​

简介

        本文用示例来介绍数据库的三大范式。

范式介绍

        范式(Normal Form):关系型数据库的规范。

        设计良好结构的数据库,可以有效减小数据冗余,减少增删改中出现的问题。深入理解数据库设计的三范式,对于设计“健壮的数据库“十分有必要。数据库三范式是设计数据库时参考的准则。

        目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在​第一范式的基础上进一步满足更多规范要求的称为第二范式​(2NF),其余范式以次类推。一般来说,数据库只需满足第三范式(3NF)就行了。

        三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,​需求 > 性能 > 表结构。所以不能一味的去追求按照范式来建表​。


范式



含义



详细描述



第一范式(1NF)



列的原子性(无重复的列)



每一列都是不可分割的原子数据项,是无重复的域,且不要产生冗余。



第二范式(2NF)



实体的属性完全依赖于主关键字



表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。



第三范式(3NF)



任何非主属性不依赖于其它非主属性



表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键),数据不能存在传递关系。

像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。


        第二范式与第三范式的本质区别:在于有没有分出两张表。

        第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询)。

示例

第一范式

例1 每一列都要不可分割

需求:已知省和市,按其分类

错误结构:(地址里包含了省、市,不容易满足需求,不符合第一范式。)

数据库--三大范式--介绍/使用/实例_数据

正确结构:(省、市、地址 分开)

数据库--三大范式--介绍/使用/实例_三大范式_02

例2 两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

错误结构:不能满足多物品的要求,还会产生冗余。不符合第一范式的。

数据库--三大范式--介绍/使用/实例_数据_03

正确结构: 

数据库--三大范式--介绍/使用/实例_三范式_04

第二范式

需求:宾馆记录客人订的房间号。

错误结构:(一个人同时订几个房间,就会出来一个订单号多条数据(联系人重复),数据冗余。

数据库--三大范式--介绍/使用/实例_数据库_05

正确结构:把房间号和客户信息拆开

数据库--三大范式--介绍/使用/实例_数据_06

数据库--三大范式--介绍/使用/实例_数据_07

这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

第三范式

像:a--> b--> c  属性之间含有这样的关系,是不符合第三范式的。


举报

相关推荐

0 条评论