Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como criar um relacionamento um-para-um real no SQL Server


Tenho certeza de que é tecnicamente impossível no SQL Server ter um relacionamento True 1 para 1, pois isso significaria que você teria para inserir os dois registros ao mesmo tempo (caso contrário, você obteria um erro de restrição na inserção), em ambas as tabelas, com ambas as tabelas tendo um relacionamento de chave estrangeira entre si.

Dito isto, seu design de banco de dados descrito com uma chave estrangeira é um relacionamento de 1 para 0..1. Não há restrição possível que exija um registro na tabela B. Você pode ter um pseudo-relacionamento com um gatilho que cria o registro na tabelaB.

Portanto, existem algumas pseudo-soluções

Primeiro, armazene todos os dados em uma única tabela. Então você não terá problemas no EF.

Ou Em segundo lugar, sua entidade deve ser inteligente o suficiente para não permitir uma inserção, a menos que tenha um registro associado.

Ou em terceiro lugar, e muito provavelmente, você tem um problema que está tentando resolver e está nos perguntando por que sua solução não funciona em vez do problema real que você está tentando resolver (um problema XY).

ATUALIZAÇÃO

Para explicar em REALIDADE como os relacionamentos 1 para 1 não funcionam, usarei a analogia do dilema da galinha ou do ovo. Eu não pretendo resolver esse dilema, mas se você tiver uma restrição que diga para adicionar um ovo à tabela Ovo, o relacionamento da Galinha deve existir, e a galinha deve existir na tabela, então você não pode adicionar um ovo à tabela de ovos. O oposto também é verdade. Você não pode adicionar uma Galinha à tabela Galinha sem a relação com o Ovo e o Ovo existente na tabela Ovo. Assim, nenhum registro pode ser feito em um banco de dados sem quebrar uma das regras/restrições.

Banco de dados nomenclatura de um relacionamento um-para-um é enganoso. Todos os relacionamentos que vi (portanto, minha experiência) seriam mais descritivos como relacionamentos de um para (zero ou um).