Postgresql
在postgres中使用相同序列生成主鍵的2個表
例如,我可以使用相同的序列在兩個單獨的表上生成主鍵嗎?
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 可能難以處理這種設計。