前言
为什么要写这篇文章呢,从去年年底开始,就和很多做技术的朋友交流过,从数据库设计到数据库架构各个方面的内容。有一些朋友执着于ORM,执着于所谓的数据库设计,却忘记了一切技术是要为业务服务这个基石。当然这文章里也有一些自己的理解,想向大家表达。
范式是什么
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
范式的原理
范式的说明
我对范式的理解
一个严格恪守数据库设计范式来进行数据库设计的人,必定是个傻球;
一个没有研究过数据库设计范式就进行数据库设计的人,必定也是个傻球;
在现代数据库设计中,尤其是web 2.0的系统中的数据库设计,我可以断言,大多数都是违反2NF、3NF的,少数设计甚至是违反1NF的。数据库设计范式只是对数据库惯用设计的一些说明,并不能定性为标准。
而从数据库的发展来看,以MySQL举例,随着MySQL实现越来越多的功能,它的宣传材料上会越来越多的出现以前被MySQL所摒弃的复杂设计理念,并且宣称这是MySQL所独创或一贯倡导的。这是一个数据库系统发展所必然经历的过程。而这却会给MySQL的使用者以极大的误导,从而忽视了是否新特性是业务所真正需要的。
数据库设计不是一种编程语言这么简单,与面向对象、面向过程无关。数据库设计代表的是一种与应用开发语言完全不同的思想。现在绝大多数的程序,无论任何人采用什么方式进行程序开发,其最终还是会回归到对数据库的操作上(当然如果你的程序只是个教学演示则不在此范围内)。
数据库发展
各种缓存方案,说到底是以key为基础的数据解决方案,而数据库与应用层之间的中间件,为了实现逻辑的简单和高性能,更多的也会是基于key的实现。比如我所使用过的腾讯的TTC。
从下面的列表可以看出当前SNS的网站对于高并发、高性能的数据库解决方案有多么渴求,Facebook贡献了Cassandra、Linkedin贡献了Voldemort、mixi.jp贡献了Tokyo Cabinet和Tokoy Tyrant、green.jp贡献了Flare、甚至包括Google的BigTable。
总结
写到这里,我发现单单是这些新的数据库解决方案就有太多可写的内容,而这些已经超过了本文所要说明的主要内容,而现在所写的内容就全当是个引子吧,我写的很意犹未尽。后面会就反范式设计实例,内存缓存方案、NoSQL数据库等逐渐展开。
PS:这篇文章写的很杂乱,尤其是后面两端,见谅!