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

Was ist der beste Weg, um eine "Teilmenge"-Beziehung mit Integritätsbedingungen zu erzwingen

Eines der Probleme mit SQL ist die schlechte Unterstützung für Integritätsbeschränkungen, insbesondere referenzielle Beschränkungen.

Aus praktischen Gründen kann Ihr Problem nicht mit SQL-Einschränkungen gelöst werden, es sei denn, Sie deaktivieren die Einschränkungen, wenn Sie eine Zeile in eine Tabelle einfügen möchten. Der Grund dafür ist, dass SQL erfordert, dass die Tabellen einzeln aktualisiert werden, und daher muss die Einschränkung verletzt werden, wenn neue Zeilen eingefügt werden. Dies ist eine grundlegende Einschränkung von SQL und alle großen DBMSs leiden darunter.

Es gibt einige Problemumgehungen, aber keine davon ist perfekt. Sie könnten DEFERRABLE-Einschränkungen verwenden, wenn Ihr DBMS sie hat (z. B. Oracle). Eine DEFERRABLE-Einschränkung ist wirklich nur eine einfache Möglichkeit, eine Einschränkung zu deaktivieren. Oder Sie könnten Trigger verwenden, was bedeutet, dass die Regel prozedural erzwungen wird und nicht durch eine richtige Datenbankeinschränkung.