数据库范式经常用到的第一范式----第二范式------第三范式
下面来分别讲解一下三个范式:
第一范式:
定义:设R为任一给定关系,如果R中每个列与行的交点处的取值都是不可再分的基本元素,则R为第一范式。
总结:具有原子性 字段不可再分 ,否则就不是关系数据库(对每个字段的要求)
举例:
此表不是第一范式
根据实际需求设计的字段值不可再分解。比如“部门”和“角色”在需求中都较常用,应该分开两个字段。
修改之后:
第二范式:
定义:
设R为任一给定关系,若为第一范式,非主属性完全函数依赖于候选关键字,则为第二范式。
总结: 一行只干一件事 (对于每行的要求)
举例:
第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表
一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。订单表和商品表不能设计在一张表里,应该分开两个表,再加一个多对多的商品id和订单id关联表。(一个表只描述一件事情)
修改之后:确保表中的每列都和主键相关
扫描二维码关注公众号,回复:
8585303 查看本文章
第三范式:
定义:设R为任一给定关系,若为第二范式,每一个非主属性都不传递函数依赖于候选关键字,则为第三范式。
总结:每列都与主键有直接关系,不存在传递依赖 (对于每张表的要求)
举例:
例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户id即可(外键),而不能有其他的客户信息。因为其他的客户信息直接关联于用户id,而不是直接与订单id直接相关。
订单表中的用户信息不直接设计字段,设计一个用户id字段再外键关联用户表即可。
修改之后: