sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo crear una relación uno a uno real en SQL Server

Estoy bastante seguro de que es técnicamente imposible en SQL Server tener una relación Verdadera 1 a 1, ya que eso significaría que tendría para insertar ambos registros al mismo tiempo (de lo contrario, obtendría un error de restricción al insertar), en ambas tablas, con ambas tablas teniendo una relación de clave externa entre sí.

Dicho esto, el diseño de su base de datos descrito con una clave externa es una relación de 1 a 0..1. No hay restricción posible que requiera un registro en la tabla B. Puede tener una pseudo-relación con un disparador que crea el registro en la tablaB.

Así que hay algunas pseudosoluciones

Primero, almacene todos los datos en una sola tabla. Entonces no tendrás problemas en EF.

O En segundo lugar, su entidad debe ser lo suficientemente inteligente como para no permitir una inserción a menos que tenga un registro asociado.

O en tercer lugar, y lo más probable, tiene un problema que está tratando de resolver y nos pregunta por qué su solución no funciona en lugar del problema real que está tratando de resolver (un problema XY).

ACTUALIZAR

Para explicar en REALIDAD cómo las relaciones 1 a 1 no funcionan, utilizaré la analogía del dilema del huevo o la gallina. No tengo la intención de resolver este dilema, pero si tuviera una restricción que dice que para agregar un Huevo a la tabla Huevo, la relación del Pollo debe existir, y el pollo debe existir en la tabla, entonces no podías agregar un huevo a la mesa de huevos. Lo opuesto también es cierto. No puede agregar un Pollo a la tabla Pollo sin que la relación con el Huevo y el Huevo existan en la tabla Huevo. Por lo tanto, no se pueden hacer todos los registros en una base de datos sin romper una de las reglas/restricciones.

Base de datos nomenclatura de una relación uno a uno es engañosa. Todas las relaciones que he visto (por lo tanto, mi experiencia) serían más descriptivas como relaciones de uno a (cero o uno).