Hay dos tablas:
- Usuario
- Habla a
El usuario contiene una referencia a la Dirección.
La dirección contiene las columnas CreatedBy y ModifiedBy, que hace referencia al usuario.
¿Cómo diseño esta base de datos para evitar una dependencia cíclica?
database-design
Shashi
fuente
fuente

Respuestas:
En lugar de buscar consejos y trucos (se incluyen restricciones diferidas), le sugiero que simplemente diseñe su salida de este "bloqueo de referencia", así que intente algo como esto:
Hechos
(UserID)existe(AddressID)fue creada por el usuario(UserID).(AddressID)fue creada en Fecha(DateCreated).(AddressID)fue modificada por última vez por el usuario(UserID)en la fecha(ModifiedOn).(UserID)reside en la dirección(AddressID)desde la fecha(ValidFrom).Restricciones
EachLa dirección fue creada por elexactly oneusuario .It is possible that more than oneLa dirección fue creada por elthe sameusuario .EachDirección fue creada enexactly oneFecha .It is possible that more than oneDirección fue creada enthe sameFecha .For eachDirecciónandFecha , lathatdirección fue modificada por elat most oneusuario en lathatfecha .For eachandFecha del usuario , elthatusuario reside en laat most onedirección desde lathatfecha .Lógico
En lo que respecta a la dirección obligatoria, verifique eso en la capa de aplicación y envuelva las declaraciones de carga en una transacción, de esa manera obtendrá todo o nada.
fuente
No tiene más remedio que crear la dependencia cíclica en 2 operaciones como se muestra a continuación porque no existe una tabla cuando crea la primera.
Si desea evitar la dependencia cíclica. Luego debe eliminar una restricción REFERENCES o puede agregar una referencia DELETE y UPDATE CASCADE de una manera. También podría implementar un GATILLO si su lógica es algo compleja.
fuente