Einführung
Referenzielle Integrität ist entscheidend für die Gewährleistung der Datengenauigkeit in relationalen Datenbanken. Es garantiert, dass die Referenzen in Fremdschlüsseln gültig und mit den Primärschlüsseln konsistent sind, auf die sie verweisen. In diesem Artikel wird untersucht, wie referenzielle Integrität in Subtypen implementiert wird, ein häufiges Szenario bei der Datenmodellierung.
Exklusive Subtypen
In einer exklusiven Subtypbeziehung kann jede Basistypzeile nur Folgendes haben: eine Subtypzeile. Dies wird normalerweise mithilfe einer Diskriminatorspalte in der Basistyptabelle implementiert, die den Untertyp identifiziert.
Implementierung mithilfe einer Funktion und CHECK CONSTRAINT:
Beispiel:
-- UDF to check basetype existence CREATE FUNCTION CheckBaseTypeExists (@PrimaryKey INT, @Discriminator CHAR(1)) RETURNS BIT AS BEGIN DECLARE @Exists BIT; SELECT @Exists = CASE WHEN EXISTS (SELECT 1 FROM BaseType WHERE PrimaryKey = @PrimaryKey AND Discriminator = @Discriminator) THEN 1 ELSE 0 END; RETURN @Exists; END; -- CHECK CONSTRAINT in Subtype ALTER TABLE Subtype ADD CONSTRAINT FK_BaseType FOREIGN KEY (PrimaryKey, Discriminator) REFERENCES BaseType (PrimaryKey, Discriminator) CHECK (CheckBaseTypeExists(PrimaryKey, Discriminator) = 1);
Nicht exklusiv Untertypen
In einer nicht-exklusiven Untertypbeziehung kann eine Basistypzeile mehrere Untertypzeilen haben. Dies erfordert nicht die Verwendung einer Diskriminatorspalte.
Implementierung mit PRIMARY KEY und FOREIGN KEY:
Der PRIMARY KEY der Subtyp-Tabelle ist auch der FOREIGN KEY für die Basistyptabelle. Dadurch wird sichergestellt, dass jede Untertypzeile einer eindeutigen Basistypzeile zugeordnet ist.
Beispiel:
CREATE TABLE Subtype ( PrimaryKey INT PRIMARY KEY, ForeignKey INT REFERENCES BaseType (PrimaryKey), ... );
Durchsetzung mithilfe von Transaktionen
Es ist wichtig zu beachten, dass die beschriebenen Methoden Benutzer nicht daran hindern, die Diskriminator- oder Untertypzeilen des Basistyps direkt zu aktualisieren. Um in diesen Szenarien referenzielle Integrität durchzusetzen, sollten Transaktionen verwendet werden. Transaktionen stellen sicher, dass mehrere Vorgänge entweder als Ganzes festgeschrieben oder zurückgesetzt werden, wenn ein Vorgang fehlschlägt.
Fazit
Durch die Implementierung referenzieller Integrität in Untertypen mithilfe der beschriebenen Methoden können Sie können sicherstellen, dass die Datenbeziehungen in Ihrer Datenbank gepflegt und konsistent sind. Transaktionen spielen eine wichtige Rolle bei der Vermeidung von Dateninkonsistenzen, die durch direkte Datenmanipulation entstehen könnten.
Das obige ist der detaillierte Inhalt vonWie kann die referenzielle Integrität bei der Arbeit mit Subtypen in relationalen Datenbanken aufrechterhalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!