Maison > base de données > tutoriel mysql > Comment maintenir l'intégrité référentielle lorsque vous travaillez avec des sous-types dans des bases de données relationnelles ?

Comment maintenir l'intégrité référentielle lorsque vous travaillez avec des sous-types dans des bases de données relationnelles ?

Patricia Arquette
Libérer: 2025-01-03 03:59:39
original
191 Les gens l'ont consulté

How to Maintain Referential Integrity When Working with Subtypes in Relational Databases?

Comment implémenter l'intégrité référentielle dans les sous-types

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 :

  1. Créer un « utilisateur Fonction "Définie" (UDF) qui vérifie si la combinaison de la clé primaire et de la valeur discriminante existe dans le type de base table.
  2. Implémentez une CONTRAINTE CHECK dans la table de sous-type qui appelle l'UDF pour garantir que la ligne de type de base parent existe avant d'insérer une ligne de sous-type.

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);
Copier après la connexion

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),
    ...
);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal