SQL反模式(一)

2013-02-18 19:20

SQL反模式(一)

by snoopyxdy

at 2013-02-18 11:20:50

original http://snoopyxdy.blog.163.com/blog/static/601174402013118104749386

最近看了一本2011年出版的sql反模式一书,收获颇丰做下博客记录并且打算在公司内部分享。其实我感觉翻译为sql反范式更为贴切,当然书中不仅仅有范式内容,还包含诸如sql注入,全文检索,容灾备份等很多实用性技巧,作者资历很深。

SQL反模式(一) - snoopyxdy - snoopyxdy的博客
 

1、什么是sql范式
以一种我们能够理解的方式表达这个世界中的事物,关键在于减少数据冗余,防止异常或不一致的数据,让数据支持完整性约束。

2、常见的误区
a、反范式能让数据库查询更快
不完全对,的确应用范式规范之后,查询时可能需要使用join进行获取多张表的数据,反范式能够避免这些join,但是如果系统的需求发生一些改变,或者过多的依赖程序做一些数据一致性操作,可能发生的bug或者修改所花的时间要比范式设计长很多。

b、范式就是将属性尽可能的分开存储
错,通常程序员会误解范式这个词,认为它把数据弄的更不可读或者不便于查询,而事实上真正的范式恰恰相反。

3、第一范式
第一范式的最根本要求是,该表必须是一个关系,而且这张表不能有重复组合。
我们来看如下截图:

SQL反模式(一) - snoopyxdy - snoopyxdy的博客
 

4、第二范式
第二范式除了复合主键以外,第二范式和第一范式是相同的,我们看截图:
生成表的sql语句
SQL反模式(一) - snoopyxdy - snoopyxdy的博客
 违反第二范式的截图
SQL反模式(一) - snoopyxdy - snoopyxdy的博客
 
5、第三范式
如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的
我们看截图:
SQL反模式(一) - snoopyxdy - snoopyxdy的博客
 
简单介绍完范式之后,就会是一些我们日常可能碰到的实用性内容了