关系型数据库范式详解

数据库的范式就是数据库开发设计过程中的规范,由满足条件逐渐提升规范类别,有1NF到6NF级别划分,较高级别是在满足较低级别规范的情况下上升的。这种数据库的规范利于数据库的简洁、逻辑清晰明确。

第一范式 无重复的列

第一范式的要求是同一列中不能有多个值,属性不可以重复比如:

名称 类型
颜色类型 品种类型
苹果 红色 红富士
橘子 橙色 柑桔
类型这个属性可以再进行划分,所以不满足关系型数据库的概念,以上的数据库表设计可以用在非关系型的数据库中,比如Hbase中,每一列可以划分为若干的列族。

第二范式 非主属性依赖于主键

在满足第一范式的基础上,第二范式是为了每条数据可以被某列值唯一的区分,通常可以使用id来作为每一条数据的唯一标识。例如以上的表中可能包含很多种水果,加入我们使用name作为唯一的主码,而我们如果增加了多条不同的苹果数据,那么我们查询或者删除都无法定位到具体的数据,所以我们需要给每一条数据增加一个id,用来区分每一条数据。

Id 名称
颜色类型 品种类型
1 苹果 红色 红富士
2 橘子 橙色 柑桔

第三范式 属性不依赖于其它非主属性

在满足前两个范式的基础上,第三范式要求属性不依赖于其它非主属性,假设给上述表添加字段品种产地,品种特色,那么就构成了 id ->品种 ->品种产地,品种特色,就会发现品种产地以及品种特色都会依赖于品种类型,这种设计会造成后续的更改,删除等异常错误,正确的做法是新建一个品种表:

品种类型 品种产地 品种特色
红富士 土耳其 干脆
柑桔 浙江 酸甜

第四范式 不存在多对多关系

在以上的品种表中,一个品种名可以对应多个生产地,比如柑桔生产于南方多个省市,那么这里就构成了一对多的关系,而品种特色可以有多种特色,比如可以有干脆、脆甜、肉质饱满等,这里就出现了多对多的关系,故品种表不符合第四范式,解决方法就是拆分成多个表即分为 品种名:品种产地 和品种名:品种特色两张表。

你可能感兴趣的:(关系型数据库范式详解)