Eu poderia usar a mesma sequência para gerar as chaves primárias em duas tabelas separadas, por exemplo, como esta?
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)
)
No meu exemplo os usuários cadastrados têm muito mais dados do que apenas o email e não consigo armazenar isso na mesma tabela e preencher quando eles se cadastrarem. Então meu plano é salvá-los na tabela requerente e depois movê-los para a tabela cadastrada, mas quero preservar o ID.
Sim, você pode fazer isso e funciona.
Imagine que funcione mais ou menos assim: você tem uma 3ª tabela pai virtual (poderíamos chamá-la de Usuário) e ambas as tabelas Registrado e Candidato têm um FK que faz referência ao Usuário (id). Assim, você obtém quase todas as funcionalidades disso sem precisar manter a tabela User.
Se mais tarde você quiser adicionar uma 3ª (ou 4ª) tabela com design semelhante e possivelmente colunas extras diferentes, também é bastante simples. Você acabou de adicionar o
nextval('user_id_seq'::regclass)
em sua definição de chave primária.Uma desvantagem é que se você precisar dos IDs das duas tabelas para alguma consulta, terá que fazer uma UNION de Candidato e Registrado.
Outra desvantagem é que alguns ORMs podem ser problemáticos para lidar com esse design.