以前在设计数据表的主键字段时,并没有深入地考虑过这个问题。昨天在看《应用Rails进行敏捷Web开发》时,里面提到了这个问题。

书里举了一个图书的例子。对于大多数人的经验来说,可能会选择用书的ISBN编号来作为主键,因为每一种图书的ISBN编号在全世界都是唯一的。但其实这也不是绝对的,ISBN的格式也有可能在开了几个会以后发生改变。因此,最好还是由开发者自己定义一个简单的ID字段来表示主键。另外,对于常用的用户名表,我以前也是把username作为数据表的主键。虽然用户名不允许更改,而且也必须唯一,但仍然有问题。比如一个用户名是“xxx/yyy”,如果显示用户信息的页面URL是example.com/user/zzzz这种格式的,那么那种用户名就有可能出问题。因此最好还是使用数字ID而不是用户名作为主键更好些。

对于实现多对多关系的关联表,通常是使用两个表的外键组合起来作为主键。这通常也不会存在什么问题,实际上有很多确实是这个用的。但有时候关联表并不仅仅是作关联用,还可以在上面附加更多的信息。这样关联表就可以作为一个模型类实现,只要有它的现实意义。在这种情况下,也可以考虑用一个数字ID作为主键。通常这样能简化查询,提高查询速度。

 

转自:http://cn.programmingnote.com/blog/?p=98

 

用户名应该唯一   做唯一标识!加非簇索引!,对用户可见   
ID做为主键   一般用来join,对用户不可见! 

posted on 2010-04-27 15:23  craig  阅读(504)  评论(0编辑  收藏  举报
我要啦免费统计