使用一个表的外键作为另一个表中的主键是否有任何一般的设计考虑因素(好/坏/中性)?
例如,假设以下表格是电影目录的一部分:
titles
------
id
episodes
--------
title_id (PK/FK)
剧集显然可以同时使用id和title_id来完成,其中id将是PK,title_ids将是唯一的,但由于title _id已经是唯一的了,而且从技术上讲,它可以识别剧集,那么仅仅将其用作PK会有什么需要考虑的吗?一般来说呢?你对此有什么设计考虑?
谢谢你的想法!
问题的答案基本上是对"共享主键"技术的描述。因此,我用单个标记共享主键替换了关于主键和外键的两个标记。
共享主键是一种设计,其中一个表的PK也是引用另一个表PK的FK。正如共享主键的标记wiki所示,这对于一对一关系很有用,无论它们是强制性的还是可选的。这些关系有时被称为IS-A关系,如"汽车就是车辆"。车辆和汽车之间的关系也称为类/子类或类型/子类型关系。
与任何设计技术一样,它也有其优点和成本。
编辑回复评论:
共享主键的最大好处是它强制关系的1对1性质。在数据库中强制执行该规则通常比确保所有应用程序代码都遵循该规则更有效率。
第二个好处是使两个表之间的连接变得简单快捷。它很快(对于某些数据库系统),因为优化器使用为支持PK而构建的索引来加快连接。
第三个好处是第三个表可以引用具有相同FK的这两个表
代价是在两个表中添加一个新条目需要一些编程。主表中的PK必须复制到辅助表中,系统通常不会为您执行此操作。此外,加入虽然很快,但不是免费的。