Maison  >  Article  >  base de données  >  Quand le référencement circulaire dans SQL est-il acceptable ?

Quand le référencement circulaire dans SQL est-il acceptable ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-25 13:03:15555parcourir

When is Circular Referencing in SQL Acceptable?

Le référencement circulaire dans SQL est-il acceptable ?

Dans la conception de bases de données, une préoccupation courante surgit lorsqu'on traite des tables qui font référence les unes aux autres dans un de manière circulaire. Pour comprendre ce concept, examinons un exemple de base de données :

CREATE TABLE products (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  NAME varchar(255) NOT NULL,
  ...
  DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL,
  FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID)
);

CREATE TABLE products_pictures (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  IMG_PATH varchar(255) NOT NULL,
  PRODUCT_ID int(10) unsigned NOT NULL,
  FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID)
);

Dans ce scénario, la table products a une colonne DEFAULT_PICTURE_ID qui fait référence à la table products_pictures, tandis que la table products_pictures a une colonne PRODUCT_ID qui fait référence à la table products_pictures. tableau des produits. Cela crée une référence circulaire.

Conséquences du référencement circulaire

Le référencement circulaire dans SQL peut entraîner des problèmes, en particulier si les références sont déclarées comme NOT NULL. L'insertion ou la mise à jour d'enregistrements dans une telle conception devient problématique en raison de la situation de l'œuf et de la poule : quelle table doit être mise à jour en premier ? De plus, la suppression d'enregistrements peut entraîner des violations de l'intégrité référentielle.

Alternatives acceptables

Il existe plusieurs approches pour résoudre le problème du référencement circulaire dans SQL.

  • Rendre une clé étrangère nullable : Cette option implique de rendre l'une des clés étrangères nullable, vous permettant d'insérer des enregistrements dans une table sans faire référence à l’autre. Cependant, il est essentiel de garantir l'intégrité des données en mettant en œuvre des contraintes pour éviter les enregistrements orphelins.
  • Utiliser une table de jointure séparée : Une autre alternative consiste à créer une table de jointure distincte qui associe les deux tables via un nouveau jeu de clés étrangères. Cette approche élimine le référencement circulaire et vous permet de définir des clés étrangères NOT NULL.
  • Envisagez d'utiliser des contraintes reportables : Dans certains systèmes de bases de données, tels que PostgreSQL et Oracle, des contraintes reportables peuvent être utilisées pour retarder l'application de la clé étrangère jusqu'à ce qu'une transaction soit validée. Cependant, cette fonctionnalité n'est pas prise en charge dans MySQL.

Conclusion :

Bien que le référencement circulaire dans SQL puisse être tentant pour la modélisation des relations, il peut introduire des complications et problèmes de performances. Opter pour l'une des alternatives les plus appropriées, telles que les clés étrangères nullables, les tables de jointure ou les contraintes reportables, est recommandé pour une conception de base de données fiable et maintenable.

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