我正在使用具有以下(简化)数据库设计的 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,并在拍卖中引用这个新表。但我认为这是糟糕的数据库设计。
有人已经面临过这个问题吗?在这种情况下有适用的最佳实践吗?
谢谢您的帮助。
这是不可能的:
FOREIGN KEY
只能指向一张表。
因此,您可以有两列
tribunal_id
和 court_id
,可为空,并且这些列有两个外键。
无法为可为空的列创建复杂的
Primary key
约束。您可以使用 UNIQUE
约束来代替。还有合成PK,或者根本没有PK,只有UNIQUE