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
Each
La dirección fue creada por elexactly one
usuario .It is possible that more than one
La dirección fue creada por elthe same
usuario .Each
Dirección fue creada enexactly one
Fecha .It is possible that more than one
Dirección fue creada enthe same
Fecha .For each
Direcciónand
Fecha , lathat
dirección fue modificada por elat most one
usuario en lathat
fecha .For each
and
Fecha del usuario , elthat
usuario reside en laat most one
dirección desde lathat
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.
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