一个软件的设计,主键的产生原则是相当重要的,其系统性能与之息息相关。我自已设计过多个系统,在设计表主键的时候,用过很多种方式,现在设计的时候主要的一个原则是:性能尽可能的好,维护也尽可能的方便.
目前,常用的数据库主键设计原则是:
1):采用GUID作为主键,这种的优势就是全球唯一,无论是用数据库还是用代码,产生都很方便,维护很方便。但性能是最低的,使用的时候要注意.
2):采用数据库自动增长的方式。这种方式性能好,产生也很方便。但是维护很麻烦。一般的话,这种主键用于一些特殊的表,比如说日志表,其不需要维护.
3):采用int型作为主键,这种方式是性能好,产生也很方便,维护也方便,但是主键的不具有什么实在意义.
4):采用自定义编号,性能一般,产生方便,维护一般。 为什么说维护一般呢?比如一个erp系统里面的商品编号,如果我在系统单据里面使用过,客户要求修改其商品编号,修改点就非常多。但是它又有一个很好的优点,可以让编号非常有意义,比如单据中的单据编号,可以按单据标识+日期来制定.
总结一下,我个人的倾向设计是2,3,4结合。2用于一些特殊的表,4只用于单据,3用于基础数据。
对于3,如果有用过Hibernate,可以用Table产生主键方式,不需要人工代码干预,这样省了很多的麻烦.
这只是我的一些个人观点,欢迎讨论。