数据库设计--三范式+实例讲解

数据库范式经常用到的第一范式----第二范式------第三范式

下面来分别讲解一下三个范式:

第一范式:


定义:设R为任一给定关系,如果R中每个列与行的交点处的取值都是不可再分的基本元素,则R为第一范式。

总结:具有原子性  字段不可再分 ,否则就不是关系数据库(对每个字段的要求)

举例:

此表不是第一范式

根据实际需求设计的字段值不可再分解。比如“部门”和“角色”在需求中都较常用,应该分开两个字段。

修改之后:

第二范式:


定义:

设R为任一给定关系,若为第一范式,非主属性完全函数依赖于候选关键字,则为第二范式。 

总结:   一行只干一件事  (对于每行的要求)

举例:

第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表

一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。订单表和商品表不能设计在一张表里,应该分开两个表,再加一个多对多的商品id和订单id关联表。(一个表只描述一件事情)

 修改之后:确保表中的每列都和主键相关

          

扫描二维码关注公众号,回复: 8585303 查看本文章

第三范式:


定义:设R为任一给定关系,若为第二范式,每一个非主属性都不传递函数依赖于候选关键字,则为第三范式。 

总结:每列都与主键有直接关系,不存在传递依赖  (对于每张表的要求)

举例:

例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户id即可(外键),而不能有其他的客户信息。因为其他的客户信息直接关联于用户id,而不是直接与订单id直接相关。

订单表中的用户信息不直接设计字段,设计一个用户id字段再外键关联用户表即可。

 修改之后:

  

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

发布了55 篇原创文章 · 获赞 38 · 访问量 3615

猜你喜欢

转载自blog.csdn.net/weixin_42678716/article/details/101312900