Postgresql

在postgres中使用相同序列生成主鍵的2個表

  • July 1, 2022

例如,我可以使用相同的序列在兩個單獨的表上生成主鍵嗎?

CREATE TABLE IF NOT EXISTS public."user_Registered"
(
   id integer NOT NULL DEFAULT nextval('user_id_seq'::regclass),
   email character varying COLLATE pg_catalog."default" NOT NULL,
   CONSTRAINT "PK_1" PRIMARY KEY (id),
   CONSTRAINT "UQ_1" UNIQUE (email)
)
CREATE TABLE IF NOT EXISTS public."user_Applicant"
(
   id integer NOT NULL DEFAULT nextval('user_id_seq'::regclass),
   email character varying COLLATE pg_catalog."default" NOT NULL,
   CONSTRAINT "PK_2" PRIMARY KEY (id),
   CONSTRAINT "UQ_2" UNIQUE (email)
)

在我的範例中,註冊使用者擁有的數據不僅僅是電子郵件,我無法將其儲存在同一個表中並在他們註冊時填充。所以我的計劃是將它們保存在申請表中,然後將它們移動到系統資料庫中,但我想保留 ID。

是的,你可以做到這一點,它的工作原理。

想像一下它的工作原理是這樣的:你有一個虛擬的第三父表(我們可以稱之為使用者),系統資料庫和申請表都有一個引用使用者(id)的 FK。因此,您無需維護 User 表即可獲得幾乎所有功能。

如果稍後您想添加具有相似設計和可能不同的額外列的第三(或第四)表,它也非常簡單。您只需nextval('user_id_seq'::regclass)在他們的主鍵定義中添加。

一個缺點是,如果您需要兩個表中的 ID 進行某些查詢,則必須執行申請人和已註冊的 UNION。

另一個缺點是某些 ORM 可能難以處理這種設計。

引用自:https://dba.stackexchange.com/questions/313951