例如,我可以使用相同的序列在两个单独的表上生成主键吗?
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。
是的,你可以做到这一点,它的工作原理。
想象一下它的工作原理是这样的:您有一个虚拟的第三父表(我们可以将其称为 User),Registered 和 Apply 表都有一个引用 User(id)的 FK。因此,您无需维护 User 表即可获得几乎所有功能。
如果稍后您想添加具有相似设计和可能不同的额外列的第三(或第四)表,它也非常简单。您只需
nextval('user_id_seq'::regclass)
在他们的主键定义中添加。一个缺点是,如果您需要两个表中的 ID 进行某些查询,则必须执行申请人和已注册的 UNION。
另一个缺点是某些 ORM 可能难以处理这种设计。