现在的位置: 首页 > 综合 > 正文

数据库设计中的范式和反范式

2014年09月29日 ⁄ 综合 ⁄ 共 744字 ⁄ 字号 评论关闭

范式是关系数据库理论的基础,范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。

下面介绍三种常用的范式。

第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项。
即实体中的某个属性不能有多个值或者不能有重复的属性。例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。
即所有非关键字段都完全依赖于任意一组候选关键字。例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

即不存在非关键字段对任一候选关键字段的传递函数依赖。例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。

反范式:就是跟范式所要求的正好相反

按照范式的规范设计出来的表,等级越高的范式设计出来的表越多。表的数量越多,当我们去查询一些数据,必然要去多表中去查询数据,这样查询的时间要比在一张表中查询中所用的时间要高很多。也就是说我们所用的范式越高,对数据操作的性能越低。这时可以考虑使用“反范式”。反范式允许适当的数据的冗余,用这个冗余去换取更短的操作数据时间。虽然带来了冗余,但是可以提高数据库的读取速度,也就是常用的空间换时间,尤其是在海量数据检索的时候。

抱歉!评论已关闭.