[英]How to determine the auto-generated primary key used as a foreign key for another table
這是一個分為兩個部分的問題。 所附的是PostgreSQL數據庫表設計圖。 有四個表。 表Main
與表Submain
具有一對多關系。 表Submain
與表中的一對多關系Subsub
。 所有四個表的主鍵都是串行NOT NULL(因此它們會自動遞增)。 每個表都有多個未在此處顯示的屬性。
問題1.多個用戶將訪問此應用程序和數據庫。 當用戶訪問使用該數據庫的應用程序時,他們的某些信息將存儲在表Main
。 后續信息(由用戶提供,並且其他結果基於用戶的輸入)將存儲在表Submain
和Subsub
。 我的想法如下:
MainId
主鍵將自動生成,並且某些用戶信息將放置在表Main
。 Main
項目)將一條記錄插入到Submain
表中。 如何確定用戶的主鍵MainId
是什么,以便可以將其插入Submain.MainId [FK]
以獲得新記錄? Subsub
並且該信息將基於表Submain
信息。 同樣,如何確定Submain.Submain [PK]
以便可以將其用作Subsub.Submain [FK]
的外鍵? 問題2. Main
和Other
之間存在多對多關系(我省略了關聯表)。 但是,為了將記錄插入表Other
,需要Subsub
。 Subsub
和Other
之間將存在一對一的映射。 我需要繪制出一個一對一的關系,或者可以表Other
基於復雜的填充SELECT/JOIN
表聲明Main
降至表Subsub
? 這可能是一個不好的問題,但是我認為我需要繪制一對一的關系並將外鍵SubsubId [FK]
插入到Other
而不要嘗試復雜的SQL語句。
問題1的答案:使用修改數據的CTE,並使用RETURNING
子句返回串行PK:
WITH ins_main AS (
INSERT INTO main(col1)
VALUES ('some value 1')
RETURNING main_id
)
, ins_submain AS (
INSERT INTO submain (main_id, col2)
SELECT main_id, 'some value 2'
FROM ins_main
RETURNING submain_id
)
INSERT INTO subsub (submain_id, col3)
SELECT submain_id, 'some value 3'
FROM ins_submain;
需要Postgres 9.1或更高版本。
相關說明和鏈接的答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.