簡體   English   中英

如何確定自動生成的主鍵用作另一個表的外鍵

[英]How to determine the auto-generated primary key used as a foreign key for another table

這是一個分為兩個部分的問題。 所附的是PostgreSQL數據庫表設計圖。 有四個表。 Main與表Submain具有一對多關系。 Submain與表中的一對多關系Subsub 所有四個表的主鍵都是串行NOT NULL(因此它們會自動遞增)。 每個表都有多個未在此處顯示的屬性。

PostgreSQL表設計

問題1.多個用戶將訪問此應用程序和數據庫。 當用戶訪問使用該數據庫的應用程序時,他們的某些信息將存儲在表Main 后續信息(由用戶提供,並且其他結果基於用戶的輸入)將存儲在表SubmainSubsub 我的想法如下:

  1. 用戶通過表格提交信息。
  2. MainId主鍵將自動生成,並且某些用戶信息將放置在表Main
  3. 將根據用戶的輸入( Main項目)將一條記錄插入到Submain表中。 如何確定用戶的主鍵MainId是什么,以便可以將其插入Submain.MainId [FK]以獲得新記錄?
  4. 記錄也將插入Subsub並且該信息將基於表Submain信息。 同樣,如何確定Submain.Submain [PK]以便可以將其用作Subsub.Submain [FK]的外鍵?

問題2. MainOther之間存在多對多關系(我省略了關聯表)。 但是,為了將記錄插入表Other ,需要Subsub SubsubOther之間將存在一對一的映射。 我需要繪制出一個一對一的關系,或者可以表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM