数据库主键的选择

以前在设计数据表的主键字段时,并没有深入地考虑过这个问题。昨天在看《应用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,对用户不可见! 

原文地址:https://www.cnblogs.com/craig/p/1722088.html