Digamos que decidimos dividir user
a tabela em duas, uma terá dados relacionados à autenticação, outra descrição básica do usuário:
user_table
user_id | name
1 | Max
2 | Alex
3 | Should not be possible
auth_table
user_id | email | password
1 | [email protected] | 123
2 | [email protected] | 321
4 | [email protected] | Should not be possible
É possível impor a existência do mesmo user_id
? Basicamente, ambas as tabelas devem ter exatamente o mesmo número de linhas e cada linha deve ter uma correspondência em ambas as tabelas.
Você pode impor seu projeto em todos os momentos
PRIMARY KEY
com restrições mútuasFOREIGN KEY
.O PK impõe
UNIQUE NOT NULL
, o FK impõe integridade referencial. Tudo feito. Fizuser_table.user_id
umaIDENTITY
coluna, e reaproveito o ID gerado na outra tabela. Mas isso é opcional. Ver:A manipulação de linhas torna-se bastante restrita. Inserir linhas pode parecer um problema de ovo de galinha, mas basta inserir nas duas tabelas na mesma instrução (usando um CTE):
violino
Veja (com links para mais):
Eu adicionei
ON DELETE CASCADE
como recurso de conveniência opcional, portanto, excluir de uma tabela exclui de ambos. Em vez disso, você pode excluir de ambas as tabelas na mesma instrução.Pode-se acrescentar
ON UPDATE CASCADE
também, mas eu não permitiria a atualização desses IDs para começar.Sim é possivel
Eu colocaria índices exclusivos em
user_id
, para que não se repita.Em seguida, use um gatilho na tabela principal, antes de inserir, para criar um registro na 2ª tabela