Maison >base de données >tutoriel mysql >Comment maintenir l'intégrité référentielle avec des sous-types exclusifs et non exclusifs dans SQL ?

Comment maintenir l'intégrité référentielle avec des sous-types exclusifs et non exclusifs dans SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 15:56:43767parcourir

How to Maintain Referential Integrity with Exclusive and Non-Exclusive Subtypes in SQL?

Intégrité référentielle des sous-types avec contraintes

Sous-types exclusifs

  • Implémenter une colonne "Discriminateur" dans le type de base pour indiquer quelle ligne de sous-type existe pour cela.
  • Utilisez un SQL CHECK CONTRAINTE pour garantir une plage de discriminateur valide (par exemple, pour le capteur : IN ("B", "C", "D")).
  • Le PK du type de base garantit l'unicité et le discriminateur empêche les lignes de sous-type en double.
  • Une CONTRAINTE CHECK dans le sous-type appelle une fonction définie par l'utilisateur (UDF) pour vérifier l'existence du discriminateur PK dans la base type.
  • Cela garantit qu'un seul sous-type valide existe pour chaque PK.
  • Appliquer la règle "chaque type de base doit avoir au moins un sous-type" avec le code transactionnel.

Sous-types non exclusifs

  • Aucun discriminateur n'est requis.
  • L'existence d'un sous-type est vérifiée par une vérification d'existence sur la table des sous-types.
  • Les contraintes habituelles PRIMARY KEY, FOREIGN KEY et Range CHECK prennent en charge de manière adéquate les sous-types non exclusifs.

Prévention des mises à jour de discriminateurs non valides dans les sous-types exclusifs (abordé en réponse à commentaire)

  • Utilisez les normes d'architecture ouverte avec les transactions SQL ACID.
  • Interdire les mises à jour SQL directes de la base de données.
  • Imposer l'insertion du sous-type de type de base dans un seul Transaction.
  • SUPPRIMER explicitement le sous-type précédent avant de mettre à jour son discriminateur.
  • Accorder Autorisation EXEC uniquement pour l'utilisateur ROLES pour l'exécution de ces transactions.

Cela garantit que la colonne Discriminator est protégée contre les mises à jour non valides, préservant ainsi l'intégrité de la base de 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!

Déclaration:
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