gpt4 book ai didi

SQL - 外键引用不同表的主键 (Postgres)

转载 作者:行者123 更新时间:2023-11-29 13:36:28 25 4
gpt4 key购买 nike

这是一个项目。我正在为一个办公室的不同类型的记录建立一个数据库。有一个表收集了那些记录表的所有主键。所以,我需要一个引用这些表的外键。我迷路了。我问了我非常忠诚的 friend 谷歌,但我不明白一些可能的答案。

这是我想出来的(表的名称不是他们的真实姓名,只是希望它在这里是通用的)。

编辑:我正在使用 Postgres

记录表:

recordId -> references record1 id,record2 id,record2 id
docId -> identifies what kind of record it is
filingDate

记录1:

id
attribute2
attribute3

记录2:

id
attribute2
attribute3

记录3:

attribute2
attribute3

实际上,Record1、Record2 和 Record3 各有 30 多列(想象一下出生证明,例如)

RecordsTable 将显示给用户。 record1-3 仅在用户需要编辑内容时才会显示。

我想,我会让记录 1-3 引用记录表,但这对用户来说会很麻烦,因为他/她需要先在记录表中输入,而这不是记录表的目的。这只是为了显示在办公室归档的所有记录的摘要,因为一次显示所有这些是不好的。

如果有任何不清楚的地方,请告诉我,以便我可以进一步解释。提前致谢

最佳答案

好吧,我会删除 docId 列。您可以根据记录在其他表中的存在来判断记录的类型。 It's good practice not to repeat yourself.

要使 id 在三个表中保持唯一,您需要一个 identity 列。 (除非您使用的是 Oracle 或 Postgres,否则请编辑您的问题。)因此,用户必须先从 Records 表中获取记录 ID,然后才能填写详细信息。也许您可以创建一个用户界面来为他们执行此操作。

RecordsTable: id int identity, filingDate
Record1: id int foreign key references RecordsTable(id), ...
Record2: id int foreign key references RecordsTable(id), ...

您将像这样检索文档类型:

select  case
when record1.id is not null then 'Type1'
when record2.id is not null then 'Type2'
...
else 'Unknown'
end
from RecordsTable rt
left join
Record1 r1
on rt.id = r1.id
left join
Record2 r2
on rt.id = r2.id

关于SQL - 外键引用不同表的主键 (Postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com