他们由于以下几个原因而劝阻他们:
- 使用起来很麻烦。每次您需要引用一个对象(或行)时,例如在Web应用程序中,例如,您都需要传递3个参数,而不仅仅是一个。
- 他们效率低下。数据库不仅需要哈希一个整数,还需要哈希一个三列的复合哈希。
- 它们导致错误:开发人员不可避免地会错误地实现主键类的equals和hashCode方法。或者它们使它可变,并一旦存储在HashSet或HashMap中就修改其值
- 他们污染了架构。如果另一个表需要引用此3列表,则它将需要3列,而不只是3列作为外键。现在,假设您采用相同的设计,并且将此3列外键作为此新表的主键的一部分,您将很快拥有4列主键,然后在下一个表中具有5列PK,依此类推等等,导致数据重复和模式变脏。
替代方法是,除其他三列外,还具有一个单列的自动生成的主键。如果要使三列的元组唯一,请使用唯一约束。



