Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Modellierung einer Eins-zu-Konstante-Beziehung

Es ist nicht einfach, dies so zu tun, dass es solide und korrekt ist, selbst wenn mehrere Sitzungen Aktualisierungen durchführen. Sie werden sich in Schwierigkeiten bringen, wenn Sie dies mit Triggern versuchen, und die deklarativen Einschränkungen von Oracle sind nicht mächtig genug, um dies auszudrücken.

Es kann wie folgt gemacht werden:-

  1. Erstellen Sie ein materialisiertes Ansichtsprotokoll sowohl für die übergeordneten als auch für die untergeordneten Tabellen
  2. Erstellen Sie eine materialisierte Join-Ansicht, die sie miteinander verbindet und die Anzahl der untergeordneten Elemente zählt, die vom übergeordneten Element gruppiert werden. Dies muss REFRESH FAST ON COMMIT sein
  3. Beschränken Sie die Materialized-Join-Ansicht darauf, dass die Anzahl der untergeordneten Datensätze "n" (Ihre Datenbankkonstante) entsprechen muss

Sie können dann eine Reihe von Anweisungen zum Einfügen/Aktualisieren/Löschen ausführen. Wenn Sie einen Commit durchführen, wird die materialisierte Ansicht aktualisiert, und wenn die Bedingung nicht erfüllt ist, erhalten Sie an dieser Stelle einen Constraint-Violation-Fehler.

Ein zusätzlicher Trick besteht darin, nur Zeilen in die materialisierte Ansicht aufzunehmen, die die Einschränkung nicht erfüllen (HAVING count(ChildId) <> 5), damit Sie keinen Speicherplatz verschwenden.