我可以在我的大多数表中使用我的外键作为我的主键吗?

Posted

技术标签:

【中文标题】我可以在我的大多数表中使用我的外键作为我的主键吗?【英文标题】:Can I use my foreign key as my primary key in most of my tables? 【发布时间】:2016-08-06 09:54:49 【问题描述】:

我正在尝试创建一个在线航班预订网站的数据库结构。它只是我的一个项目。我想知道我可以使用外键作为表上的主键。

这是我的一张桌子的样子:

表名:Customer_Account 它有:Account_id (PK)、用户名和密码。

我的另一个表是:Customer_Info 它有:Account_id、名字、姓氏和其他个人信息。

我的想法是,如果我在我的 Customer_info 上使用 (Account_id) 可以吗 表作为我的主键,因为它是引用 Customer_Account 的 (Account_id) 的外键?

如果可能的话,当它是我真正需要该表的 ID 时,始终使用外键作为我的主键可以吗?

【问题讨论】:

【参考方案1】:

您的问题涉及称为“共享主键”的技术,因此我将该标签添加到您的问题中。

简而言之,答案是肯定的。当您想在两个表之间强制建立一对一的关系时,您可以将外键作为主键。这在 IS-A 关系中经常出现,这是典型的类-子类(类型-子类型)情况。

通常情况下,您可以通过将两个表合并为一个表来获得相同的结果。但是在某些情况下,子类数据差异很大,拥有两个或多个表会更令人满意。有关这种情况的讨论,请参阅“类表继承”。

【讨论】:

我会查找更多关于类表继承的信息以获取更多信息。无论如何感谢您的回答。这对我帮助很大。【参考方案2】:

这是完全可以接受的,尽管我想知道为什么你首先需要两张桌子。如果每个(甚至大多数)客户都有额外的信息,更简单的方法是只保留customer_account 表中的所有列。

【讨论】:

以上是关于我可以在我的大多数表中使用我的外键作为我的主键吗?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle一个字段的的外键可以当另一个字段的主键吗

SQL怎么在有外键的主键表中插数据

SQL怎么在有外键的主键表中插数据

OrmLite可以为除主键之外的属性指定外键吗

数据库属性可以是主键还是外键?

数据表中与主键联系的外键字段必须于主键同名吗