"我身高1.76, 体重85kg"与"我体重85kg, 身高1.76"有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在我的DBDiff程序(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好.
INSERT INTO tablename VALUES (...)
只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯. 比方在多表关联时, 选择列时不加表名就不是个好习惯. 去年参加年会时, 淘宝的朋友曾提及以前就遇到过这样的问题, 在一个不太重要的系统中, 关联的两个表一开始所有字段名都不同, 后来有一天在一个表上加了和另一个表中某列同名的列, 这时应用出问题了.
SELECT A.COL1, B.COL2, ... FROM A, B WHERE ...
很多都是简单的事, 如果一直坚持了就很好, 如果不坚持, 有时就是很坏的事. 要让一个人坚持, 那还比较容易, 要让一个队伍坚持, 就有些难了, 让一个IT业流动性较大的队伍坚持, 就更难了.
留言 (4)
不错,我也要求我们开发人员在写INSERT语句的时候要加上字段名,这样在做调整表结构的时候程序在插入数据不至于出错。
Posted by fire9 | Mar 4, 2008 9:40 AM
51job的朋友开始用我的dbdiff程序了.
Posted by anysql | Mar 4, 2008 10:16 AM
好代码该依靠规范,而不是习惯,好习惯也会因为人的不同而不统一。
INSERT INTO tablename VALUES (...)这种代码,peer review的时候就该退回去重写了,绝对不能进production。
Posted by 蛋白粉 | Mar 4, 2008 5:14 PM
规范还是习惯,很难说了,规范久了就是习惯了。
Posted by anysql | Mar 4, 2008 6:37 PM