SQL - 使用相同外键引用两个不同表主键的最佳实践?

问题描述 投票:0回答:1

我正在使用具有以下(简化)数据库设计的 PostgreSQL:我有一个表拍卖,每次拍卖都可以由法庭或上诉法院处理。

这样我就有了上诉法庭表(主键 = [id] ),

id 名字
C001 内华达州上诉法院
C002 加利福尼亚州上诉法院

以及表 Tribunal (主键 = [id] )。

id 名字 相关_上诉法院_id
T001 旧金山法庭 C002
T002 洛杉矶法庭 C002
T003 拉斯维加斯法庭 C001

请注意,这些都是假数据。

每个上诉法院可以组成多个法庭,从某种意义上说,上诉法院在法律体系中的重要性高于法庭。

拍卖表中的每个拍卖(主键 = [tribunal_or_court_id, auction_id] )可以由仲裁庭处理,也可以直接由上诉法院处理(如果拍卖有一些特殊的要求)。

tribunal_or_court_id 拍卖_id 描述
C001 000 拍卖#1
T002 000 拍卖#2
T002 001 拍卖#3

我需要做的是引用“tribunal_or_court_id”内的法庭和上诉法院“id”列。

我绝望地试图分别在 Auction.tribunal_or_court_id 和 Tribunal.id 和 Court.id 之间定义两个不同的外键。但它不起作用,因为通过这种方式我无法插入具有相应法庭 ID 但不相应法院 ID 的拍卖(反之亦然)...

然后,我考虑插入另一个表,其中填充了法庭和上诉法院表中的所有 id,并在拍卖中引用这个新表。但我认为这是糟糕的数据库设计。

有人已经面临过这个问题吗?在这种情况下有适用的最佳实践吗?

谢谢您的帮助。

sql postgresql foreign-keys
1个回答
0
投票

这是不可能的:

FOREIGN KEY
只能指向一张表。

因此,您可以有两列

tribunal_id
court_id
,可为空,并且这些列有两个外键。

无法为可为空的列创建

复杂的

Primary key
约束。您可以使用
UNIQUE
约束来代替。还有合成PK,或者根本没有PK,只有
UNIQUE

© www.soinside.com 2019 - 2024. All rights reserved.