当前位置:Gxlcms > 数据库问题 > 数据库范式

数据库范式

时间:2021-07-01 10:21:17 帮助过:2人阅读

在关系数据库的设计中,需要按照一些规范来设计表,这样的规范称为范式,目前有六种范式,而通常情形下达到前三范式(3NF)就会满足要求。简单理解如下。

1NF,单列数据是不可分割的,保证原子性。例如不要把年龄和性别放在同一列,而应拆成年龄和性别两列。

2NF,有主键,非主键字段应依赖主键,保证唯一性,简单理解就是一个表只说明一个对象。例如不要把帐单流水记录加到帐户表上,而应该独立为另外账单表。

3NF,非主键字段不能相互依赖,每列应当与主键有直接关系,保证数据不冗余。即学生信息表里不要记录学院的详细信息,而只需要一个学院ID。但针对数据仓库,在某些情况下会违反此范式使数据冗余以提高数据查询速度。

BCNF,巴斯-科德范式,非主键字段必须依赖于整个主键,此范式可认为是修正的3NF。主要是针对满足3NF的多主键情况,需要拆分表使非主键字段信息得以独立于一张表,这样避免在删除更新数据时影响非主键列。一般关系数据库设计达到BNCF就可以。例如:

仓库管理关系表:(仓库ID, 存储物品ID, 管理员ID, 数量)

应该拆分为

仓库管理:(仓库ID, 管理员ID)
仓库:(仓库ID, 存储物品ID, 数量)

4NF,消除多值依赖,即键外无依赖。例如:

课程代码 老师 教科书
001 Tom A
001 Tom B
001 Jim A
001 Jim B
教科书和老师都是多值属性,所以分出来
课程-老师(课程代码,老师)
课程-教科书(课程代码,教科书)

但实际应用中并无必要拆分开来。

5NF,完美范式,规范处理相互依赖的多值情况,实际应用很少达到。

数据库范式

标签:

人气教程排行