答案 0 :(得分:2)
这实际上取决于您正在进行的查询类型......
如果您添加额外的代理,您将最终执行两个唯一检查,而不是每个插入,更新和删除一个。这使得复合键听起来很合适。
但是,如果您不断在其他外键中引用该主键,则复合选项意味着您最终会存储两倍的信息,并且需要在加入时执行更多工作。这使得单键声音合适。
答案 1 :(得分:1)
根据Elmasri和Navathe的说法(在数据库系统基础中),您应该选择选项A,因为人工主键是不必要的,并建议您使用非规范化设计(他们的POV)。
在连接表的情况下,我碰巧同意作者。否则我认为在实践中使用人工键非常好。
我认为连接表的性能影响并不大。
答案 2 :(得分:1)
我同意@Denis,这取决于你在做什么。另一件需要考虑的事情是InnoDB将以PK顺序存储磁盘上的行。如果您正在执行id1 BETWEEN a AND b
之类的操作,这一点非常重要。移动这些读头每次约10毫秒,如果你的查询行分散,它会加起来。出于这些原因,您可以考虑进行非规范化,将所需数据放在一行中。