Referenzielle Integrität des Subtyps mit Einschränkungen
Exklusive Subtypen
- Implementieren Sie eine Spalte „Diskriminator“ im Basistyp um anzugeben, welche Subtypzeile dafür existiert.
- Verwenden Sie eine SQL CHECK CONSTRAINT, um einen gültigen Diskriminatorbereich sicherzustellen (z. B. für Sensor: IN („B“, „C“, „D“)).
- Der PK des Basistyps gewährleistet die Eindeutigkeit und der Diskriminator verhindert doppelte Untertypzeilen .
- Ein CHECK CONSTRAINT im Subtyp ruft eine benutzerdefinierte Funktion (UDF) auf, um die Existenz des PK-Diskriminators in der Basis zu überprüfen Typ.
- Dadurch wird sichergestellt, dass für jeden PK nur ein gültiger Untertyp vorhanden ist.
- Erzwingen Sie die Regel „Jeder Basistyp muss mindestens einen Untertyp haben“ mit Transaktionscode.
Nicht-exklusive Subtypen
- Kein Diskriminator ist erforderlich.
- Das Vorhandensein eines Subtyps wird durch eine Existenzprüfung in der Subtyptabelle überprüft.
- Die üblichen PRIMARY KEY-, FOREIGN KEY- und Range CHECK CONSTRAINTs unterstützen nicht-exklusive Subtypen angemessen.
Verhindern ungültiger Diskriminatoraktualisierungen in exklusiven Subtypen (behoben als Antwort auf Kommentar)
- Verwenden Sie offene Architekturstandards mit ACID SQL-Transaktionen.
- Verbieten Sie direkte SQL-Aktualisierungen der Datenbank.
- Erzwingen Sie das Einfügen von Basistyp-Subtypen in einem einzigen Transaktion.
- LÖSCHEN Sie den vorherigen Untertyp explizit, bevor Sie ihn aktualisieren Diskriminator.
- Gewähren Sie EXEC-Berechtigungen nur dem Benutzer ROLES zum Ausführen dieser Transaktionen.
Dadurch wird sichergestellt, dass die Discriminator-Spalte vor ungültigen Aktualisierungen geschützt ist und die Integrität der Datenbank erhalten bleibt.
Das obige ist der detaillierte Inhalt vonWie kann die referenzielle Integrität mit exklusiven und nicht-exklusiven Subtypen in SQL aufrechterhalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!