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?
Hay dos tablas:
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?
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
Each La dirección fue creada por el exactly one usuario . It is possible that more than one La dirección fue creada por el the same usuario .
Each Dirección fue creada en exactly one Fecha . It is possible that more than one Dirección fue creada en the same Fecha .
For each Dirección and Fecha , la that dirección fue modificada por el at most one usuario en la that fecha .
For each and Fecha del usuario , el that usuario reside en la at most one dirección desde la that fecha .
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.
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.
CREATE TABLE A (A_ID INT PRIMARY KEY, B_FK INT);
CREATE TABLE B (B_ID INT PRIMARY KEY, A_FK INT REFERENCES A(A_ID));
ALTER TABLE A ADD B_FK INT;
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.