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!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn