编辑:
我刚开始学习Ruby on Rails,在Pragmatic的《敏捷开发》书中有一句话:Rails确实不太适合每个表都有数字主键。它对列的名称不太挑剔。
当我学习Doctrine时,也读到了类似的话。
第二次编辑:
请也查看这个链接。我越来越困惑这件事情了: Composite primary keys versus unique object ID field 从上面的链接中得知:
*主键应该是恒定和无意义的;非代理键通常一个或两个要求失败,最终会出现问题。
如果键不是常量,则将来会出现更新问题,这可能会变得相当复杂。 如果键没有意义,则更有可能改变,即不是常量;请参见上文
以一个简单而常见的例子来说:存货项目表。可能会诱人将项目编号(SKU编号、条形码、零件代码或其他)作为主键,但是一年后所有项目号都改变了,你就需要解决整个数据库更新的问题……
编辑:还有一个比哲学更实际的问题。在许多情况下,您会找到特定的行,然后更新它或再次找到它(或两者兼而有之)。对于复合键,需要跟踪更多的数据,并在重新查找或更新(或删除)的WHERE从句中应用更多的约束条件。而且,在此期间,其中一个键段可能已经发生了变化!使用代理键时,始终只需保留一个值(代理ID),并且根据定义,它不会改变,这大大简化了情况。