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

EF4.1:É possível ter relação zero-ou-um para zero-ou-um (0..1 a 0..1)?


Não, não é possível e duvido que funcione no SQL Server. A relação de banco de dados requer que uma extremidade se torne dependente. Isso significa que ele faz referência à chave primária (PK) de uma extremidade principal - chamamos essa chave estrangeira (FK). Se falamos de relação um-para-um, o FK deve ser marcado como único para que apenas um registro na tabela dependente possa referenciar um determinado registro da tabela principal. A única relação válida neste caso é 0..1 - 1 onde o principal pode existir sem dependente, mas o dependente pode existir apenas quando relacionado ao principal existente porque seu valor FK deve ser definido como o valor PK do principal. Teoricamente, o FK pode ser anulável, mas depende da maneira como o banco de dados implementa restrições exclusivas. Se o banco de dados contar nulo como outro valor exclusivo, apenas um registro dependente pode ter FK definido como nulo (acho que este é um caso de servidor SQL).

No EF isso é ainda mais complicado porque o EF não suporta restrições exclusivas e por isso você pode construir uma relação um-para-um somente quando FK na entidade dependente também é seu PK (=não há como defini-lo como nulo). Se você não puder definir FK como nulo, não poderá tê-lo anulável e, por causa dessa entidade principal, deve existir, caso contrário, a integridade referencial lançará um erro.

A melhor solução para você é considerar Request como entidade principal e Result como dependente. A solicitação deve ser criada primeiro e deve ser mantida no banco de dados enquanto o Result . Result deve ter o mesmo valor de PK (a coluna não pode ser incrementada automaticamente) que o Request correspondente (e PK deve ser FK para Request ).