数据库范式是指设计数据库时应该满足的标准,就像在一般购物平台上一样,可能会分为皇冠、金牌、普通卖家等不同的等级。等级越高,规则越复杂。

 数据库范式可分为1NF,2NF,3NF,BCNF,4NF,5NF。同样类似于卖家规则,金牌卖家一般要由普通卖家晋升上去,数据库也是如此,必须先符合低一级范式,才有符合高一级范式的设计。

简单来说,1NF是指列不可拆分,即表中每一个字段不应该再拆分。例如,由“职工号”“姓名”“电话号码”组成的表(一个人可能有一部办公电话和一部移动电话),这时将其规范化为1NF可以将电话号码分为“办公电话”和“移动电话”两个属性,即职工(职工号,姓名,办公电话,移动电话)。

仅满足1NF的数据库可能会出现以下问题,比如说数据库冗余、插入异常、删除异常、修改异常等。

2NF则是消除非主属性对码的部分函数依赖。在解释清楚这个问题之前,需要我们先弄清楚码和非主属性的概念。不由其他属性决定的属性即是主属性,也就是码,如下表中的订单号,主属性确定,也随之确定的是非主属性,比如下表中,订单号一旦确定,用户名、省份、金额也就随之确定。这种情况下记作非主属性依赖于主属性。

通俗易懂的介绍数据库三范式

那么什么是完全依赖,什么是不完全依赖呢?如下图,主属性为学号,课名,其中姓名 、兴趣依赖于学号,成绩依赖于学号和课名。一共有两个主属性,但是,姓名、兴趣跟课名无关,因此这时候出现了不完全依赖。解决这个问题的办法是对表格进一步拆分,直至没有不完全依赖现象。

通俗易懂的介绍数据库三范式

2NF在一定程度上消除了数据冗余,但是还是存在数据删除、修改、插入异常现象。为了避免这种情况,可以在设计表的过程中使其进一步满足3NF。

3NF是指消除非主属性对码的传递依赖。

什么是传递依赖呢?继续看下面的表,其中学校取决于学号,学校类型又取决于学校,即是传递依赖,解决办法是进一步拆分表格。直至不存在传递依赖。3NF可进一步消除数据冗余,解决插入、删除、修改异常问题,但是在查询时效率变低。

通俗易懂的介绍数据库三范式



相关文章: