Introduction
L'intégrité référentielle est cruciale pour garantir l'exactitude des données dans les bases de données relationnelles. Il garantit que les références dans les clés étrangères sont valides et cohérentes avec les clés primaires auxquelles elles font référence. Cet article explique comment implémenter l'intégrité référentielle dans les sous-types, un scénario courant dans la modélisation des données.
Sous-types exclusifs
Dans une relation de sous-type exclusif, chaque ligne de type de base ne peut avoir que une ligne de sous-type. Ceci est généralement implémenté à l'aide d'une colonne discriminatrice dans la table de type de base qui identifie le sous-type.
Implémentation à l'aide d'une fonction et de CHECK CONSTRAINT :
Exemple :
-- 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);
Non exclusif Sous-types
Dans une relation de sous-type non exclusive, une ligne de type de base peut avoir plusieurs lignes de sous-types. Cela ne nécessite pas l'utilisation d'une colonne discriminante.
Implémentation à l'aide de PRIMARY KEY et FOREIGN KEY :
La PRIMARY KEY de la table de sous-type est également la FOREIGN KEY de la table des types de base. Cela garantit que chaque ligne de sous-type est associée à une ligne de type de base unique.
Exemple :
CREATE TABLE Subtype ( PrimaryKey INT PRIMARY KEY, ForeignKey INT REFERENCES BaseType (PrimaryKey), ... );
Application à l'aide de transactions
Il est important de noter que les méthodes décrites n'empêchent pas les utilisateurs de mettre à jour directement les lignes du discriminateur ou du sous-type du type de base. Pour appliquer l’intégrité référentielle dans ces scénarios, des transactions doivent être utilisées. Les transactions garantissent que plusieurs opérations sont soit validées dans leur ensemble, soit annulées en cas d'échec d'une opération.
Conclusion
En implémentant l'intégrité référentielle dans les sous-types à l'aide des méthodes décrites, vous peut garantir que les relations entre les données dans votre base de données sont maintenues et cohérentes. Les transactions jouent un rôle important dans la prévention des incohérences de données qui pourraient résulter d'une manipulation directe des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!