Existem duas tabelas:
- Do utilizador
- Endereço
O usuário contém uma referência ao endereço.
Endereço contém as colunas CreatedBy e ModifiedBy, que são referência ao usuário.
Como faço para projetar esse banco de dados para evitar uma dependência cíclica?
database-design
Shashi
fonte
fonte
Respostas:
Em vez de procurar dicas e truques (restrições adiadas incluídas), eu sugeriria que você simplesmente desenhasse esse "bloqueio de referência" - então tente algo como isto:
Fatos
(UserID)
existe.(AddressID)
foi criado pelo usuário(UserID)
.(AddressID)
foi criado em Data(DateCreated)
.(AddressID)
foi modificado pela última vez pelo usuário(UserID)
na data(ModifiedOn)
.(UserID)
reside em Endereço(AddressID)
desde a Data(ValidFrom)
.Restrições
Each
O endereço foi criado peloexactly one
usuário .It is possible that more than one
O endereço foi criado pelothe same
usuário .Each
O endereço foi criado emexactly one
Data .It is possible that more than one
O endereço foi criado emthe same
Data .For each
and
Data do endereço , othat
endereço foi modificado peloat most one
usuário nathat
data .For each
and
Data do Usuário , othat
Usuário reside emat most one
Endereço desde athat
Data .Lógico
No que diz respeito ao endereço obrigatório, verifique se, na camada do aplicativo, envolva as instruções de carregamento em uma transação - para que você obtenha tudo ou nada.
fonte
Você não tem opção a não ser criar a dependência cíclica em 2 operações, como abaixo, porque uma tabela não existe quando você cria a primeira.
Se você deseja evitar dependência cíclica. Em seguida, é necessário remover uma restrição de REFERENCES ou adicionar uma referência DELETE e UPDATE CASCADE de uma maneira. Você também pode implementar um TRIGGER se sua lógica for um pouco complexa.
fonte