一对多关系表把外键与另一个字段作为复合主键,多对多关系表则把两个外键作为复合主键,我一直是这样做。但最近看到一些人主张不要用复合主键,而是增加一个唯一标识的单列主键,认为能够提高效率。
但我认为,复合主键能够保证唯一性,用新增唯一标识键可能会产生重复数据,或者说避免重复数据完全依靠程序来保证。大家怎么看这个问题?应该如何抉择?

解决方案 »

  1.   

    用唯一主键吧,很简单,hibernate的复合主键一般映射为某个对象,而且还需要重写toString和equal的方法,这比起用唯一主键使用和维护上都麻烦很多
      

  2.   

    比如表user表需要col1和col2字段联合唯一
    理论上来讲要建立联合主键
    但也可以采用另外建立一个主键,而给字段col1和col2建立联合唯一约束
    如create table users(
      id varchar(50) primary key,
      col1 varchar(50),
      col2 varchar(50),
      unique(col1,col2)
      
    );