Istnieją dwie tabele:
- Użytkownik
- Adres
Użytkownik zawiera odniesienie do adresu.
Adres zawiera kolumny CreatedBy i ModifiedBy, które są odniesieniem do użytkownika.
Jak zaprojektować tę bazę danych, aby uniknąć cyklicznej zależności?
database-design
Shashi
źródło
źródło
Odpowiedzi:
Zamiast szukać wskazówek i sztuczek (w tym odroczonych ograniczeń) sugerowałbym, aby po prostu zaprojektować wyjście z tej „blokady referencyjnej” - spróbuj więc czegoś takiego:
Fakty
(UserID)
istnieje.(AddressID)
został utworzony przez użytkownika(UserID)
.(AddressID)
został stworzony na Date(DateCreated)
.(AddressID)
był ostatnio modyfikowany przez użytkownika(UserID)
na Date(ModifiedOn)
.(UserID)
przebywa pod adresem(AddressID)
od daty(ValidFrom)
.Ograniczenia
Each
Adres został utworzony przezexactly one
użytkownika .It is possible that more than one
Adres został utworzony przezthe same
użytkownika .Each
Adres został stworzony naexactly one
Date .It is possible that more than one
Adres został stworzony nathe same
Date .For each
Adresand
Data ,that
adres został zmodyfikowany przezat most one
użytkownika nathat
Date .For each
Userand
Data ,that
Instrukcja mieszkaat most one
Adres odthat
Date .Logiczny
Jeśli chodzi o adres obowiązkowy, sprawdź, czy na warstwie aplikacji i zawiń instrukcje ładowania w transakcji - w ten sposób otrzymasz wszystko lub nic.
źródło
Nie masz wyboru, ale musisz utworzyć zależność cykliczną w 2 operacjach, jak poniżej, ponieważ jedna tabela nie istnieje podczas tworzenia pierwszej.
Jeśli chcesz uniknąć cyklicznej zależności. Następnie musisz usunąć jedno ograniczenie ODNIESIENIA lub możesz dodać odwołanie KASUJ i AKTUALIZUJ w jeden sposób. Możesz również zaimplementować TRIGGER, jeśli twoja logika jest nieco złożona.
źródło