数据库的范式
这是我写博客的第一篇短文,也是关系数据库相关的第一个知识点。谈起关系型数据库,我个人喜欢先了解数据库的几范式,在关系型数据库中有6种范式,但是日常工作常见的有三种,即1NF 、2NF、3NF。后面的4NF--6NF用的比较少;学习关系型数据库必须了解数据库的范式,虽然有的同事朋友在工作过程在不知不觉的有应用到,但是不一定对其很理解,但是这个问题在面试中 经常问到,以测试你对数据库基础知识了解的踏实不踏实。因为数据库的范式在IT基础课程中把她定义得文ZuZu的,狠令人费解。今天用个人的语言理解下数据库常用的三范式。若有不正确请大家指正,谢谢!
1. 1NF即表的列的具有原子性,不可再分解,即列的信息不能分解; 也就是数据库中没有重复的列,相同的内容不会记录到两个列中。
2. 2NF表中的记录是唯一的,也就是一个表中必须有一个primary key,不能有相同的行。
3. 3NF即表中的数据不要有冗余数据,YE也就是一个表中非主键的信息不要在其他表中出现。
反3NF(或逆3NF) : 但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时尽量遵守第三 范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。 程序设计、数据库开发也象日常生活与工作一样没有千篇一律的标准,没有死的定性的东西,有时要根据实际的案例进行灵活进行反3NF。
反3NF的例子:
在如今火热的电子商城网城,如查询某一商品的点击率我们可以利用反3NF的方法,将点击率的字段从业务表中拿到商品的master table中,这样可以极大的提高查询统计速度。其实很多业务案例是可以进行反3NF的。
另外数据库的4NF、5NF或6NF在关系数据库中也有用到,但没有1NF、2NF或3NF常见,一般情况遵循前面3个NF基本可以满足日常需要,后面的几个NF可自行研究。
Thank you for your time!
REMARK: IT随笔,若转载请注明出去,谢谢!
TerryXia