先报身高? 还是体重?

    "我身高1.76, 体重85kg"与"我体重85kg, 身高1.76"有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在我的DBDiff程序(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好.

INSERT INTO tablename VALUES (...)

    只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯. 比方在多表关联时, 选择列时不加表名就不是个好习惯. 去年参加年会时, 淘宝的朋友曾提及以前就遇到过这样的问题, 在一个不太重要的系统中, 关联的两个表一开始所有字段名都不同, 后来有一天在一个表上加了和另一个表中某列同名的列, 这时应用出问题了.

SELECT A.COL1, B.COL2, ... FROM A, B WHERE ...

    很多都是简单的事, 如果一直坚持了就很好, 如果不坚持, 有时就是很坏的事. 要让一个人坚持, 那还比较容易, 要让一个队伍坚持, 就有些难了, 让一个IT业流动性较大的队伍坚持, 就更难了.

留言 (4)

不错,我也要求我们开发人员在写INSERT语句的时候要加上字段名,这样在做调整表结构的时候程序在插入数据不至于出错。

51job的朋友开始用我的dbdiff程序了.

好代码该依靠规范,而不是习惯,好习惯也会因为人的不同而不统一。
INSERT INTO tablename VALUES (...)这种代码,peer review的时候就该退回去重写了,绝对不能进production。

规范还是习惯,很难说了,规范久了就是习惯了。

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Most of them are less than 30.
  • 他们中大多数不到30岁.
  • I guess he's about 30.
  • 我猜他大概30岁.
  • She's going to be 15 next month.
  • 下个月她就满15了.
  • They'll have a party for their 10th wedding anniversary.
  • 他们将为结婚十周年开个晚会.
  • He's still a boy after all.
  • 他毕竟还只是个孩子.