使用外键作为主键的设计注意事项

时间:2014-10-08 18:56:35

标签: mysql design-patterns database-design shared-primary-key

使用一个表的外键作为另一个表中的主键是否有任何一般设计注意事项(好/坏/中性)?

例如,假设以下表格作为电影目录的一部分:

titles
------
 id


episodes
--------
 title_id (PK/FK)

剧集显然可以同时使用id和title_id,其中id将是PK而title_id将是UNIQUE,但由于title_id已经是唯一的,并且从技术上来说,标识了剧集,是否有任何需要考虑的内容只是用它作为PK?一般情况呢?你能看到什么样的设计考虑因素?

感谢您的想法!

1 个答案:

答案 0 :(得分:0)

您的问题的答案基本上是称为“共享主键”的技术的描述。因此,我用单标记shared-primary-key替换了关于primary-key和foreign-key的两个标签。

共享主键是一种设计,其中一个表的PK也是引用另一个表的PK的FK。正如shared-primary-key的标记wiki所示,这对于一对一关系很有用,无论它们是强制关系还是可选关系。这些关系有时被称为IS-A关系,如“汽车是车辆”。车辆和汽车之间的关系也称为类/子类或类型/子类型关系。

与任何设计技术一样,它有其优点和成本。

编辑回复评论:

共享主键的最大好处是它强制实现关系的1对1性质。在数据库中强制执行此规则通常比尝试确保所有应用程序代码都遵循规则更有效率。

第二个好处是使两个表之间的连接变得简单而快速。它很快(对于某些数据库系统),因为优化器使用为支持PK而构建的索引来加速连接。

第三个好处是第三个表可以使用相同的FK引用这两个表。

成本是在向两个表添加新条目时涉及一些编程。必须将主表中的PK复制到辅助表中,系统通常不会为您执行此操作。此外,加入虽然快,但不是免费的。

相关问题