Es gibt zwei Tabellen:
- Benutzer
- Adresse
Benutzer enthält einen Verweis auf Adresse.
Adresse enthält die Spalten CreatedBy und ModifiedBy, die auf Benutzer verweisen.
Wie gestalte ich diese Datenbank, um eine zyklische Abhängigkeit zu vermeiden?
database-design
Shashi
quelle
quelle
Antworten:
Anstatt nach Tipps und Tricks zu suchen (einschließlich aufgeschobener Einschränkungen), würde ich vorschlagen, dass Sie einfach Ihren Weg aus dieser "Referenzsperre" entwerfen - versuchen Sie es also so:
Fakten
(UserID)
existiert.(AddressID)
wurde vom Benutzer erstellt(UserID)
.(AddressID)
wurde am Datum erstellt(DateCreated)
.(AddressID)
wurde zuletzt vom Benutzer(UserID)
am Datum geändert(ModifiedOn)
.(UserID)
wohnt bei Adresse(AddressID)
seit Datum(ValidFrom)
.Einschränkungen
Each
Die Adresse wurde vomexactly one
Benutzer erstellt .It is possible that more than one
Die Adresse wurde vomthe same
Benutzer erstellt .Each
Adresse wurde amexactly one
Datum erstellt .It is possible that more than one
Adresse wurde amthe same
Datum erstellt .For each
Adresseand
Datum ,that
Adresse wurde vomat most one
Benutzer amthat
Datum geändert .For each
Benutzerand
Datum ,that
Benutzer wohntat most one
Adresse seitthat
Datum .Logisch
Wenn es um die obligatorische Adresse geht, überprüfen Sie dies auf der Anwendungsebene und verpacken Sie die Ladeanweisungen in eine Transaktion. Auf diese Weise erhalten Sie alles oder nichts.
quelle
Sie haben keine andere Wahl, als die zyklische Abhängigkeit in 2 Operationen wie folgt zu erstellen, da beim Erstellen der ersten Tabelle keine Tabelle vorhanden ist.
Wenn Sie eine zyklische Abhängigkeit vermeiden möchten. Dann müssen Sie eine REFERENCES-Einschränkung entfernen oder Sie können eine DELETE- und UPDATE CASCADE-Referenz auf eine Weise hinzufügen. Sie können auch einen TRIGGER implementieren, wenn Ihre Logik etwas komplex ist.
quelle