Heim > Datenbank > MySQL-Tutorial > Wann ist Zirkelverweis in SQL akzeptabel?

Wann ist Zirkelverweis in SQL akzeptabel?

Linda Hamilton
Freigeben: 2024-11-25 13:03:15
Original
621 Leute haben es durchsucht

When is Circular Referencing in SQL Acceptable?

Ist Zirkelverweis in SQL akzeptabel?

Beim Datenbankdesign entsteht ein häufiges Problem beim Umgang mit Tabellen, die in a aufeinander verweisen kreisförmig. Um dieses Konzept zu verstehen, untersuchen wir eine Beispieldatenbank:

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)
);
Nach dem Login kopieren

In diesem Szenario verfügt die Tabelle „products“ über eine Spalte „DEFAULT_PICTURE_ID“, die auf die Tabelle „products_pictures“ verweist, während die Tabelle „products_pictures“ über eine Spalte „PRODUCT_ID“ verfügt, die auf die zurückverweist Produkttabelle. Dadurch entsteht ein Zirkelverweis.

Folgen des Zirkelverweises

Zirkelverweise in SQL können zu Problemen führen, insbesondere wenn die Verweise als NOT NULL deklariert sind. Das Einfügen oder Aktualisieren von Datensätzen in einem solchen Design wird aufgrund der Henne-Ei-Situation problematisch: Welche Tabelle sollte zuerst aktualisiert werden? Darüber hinaus kann das Löschen von Datensätzen zu Verletzungen der referenziellen Integrität führen.

Akzeptable Alternativen

Es gibt mehrere Ansätze, um Zirkelverweise in SQL zu beheben.

  • Einen Fremdschlüssel nullbar machen: Bei dieser Option wird einer der Fremdschlüssel nullbar gemacht, sodass Sie ihn einfügen können Datensätze in eine Tabelle kopieren, ohne auf die andere zu verweisen. Es ist jedoch wichtig, die Datenintegrität sicherzustellen, indem Einschränkungen implementiert werden, um verwaiste Datensätze zu verhindern.
  • Verwenden Sie eine separate Join-Tabelle: Eine andere Alternative besteht darin, eine separate Join-Tabelle zu erstellen, die die beiden Tabellen über a verknüpft neuer Satz Fremdschlüssel. Dieser Ansatz eliminiert zirkuläre Referenzen und ermöglicht Ihnen die Definition von NOT NULL-Fremdschlüsseln.
  • Erwägen Sie die Verwendung aufschiebbarer Einschränkungen: In bestimmten Datenbanksystemen wie PostgreSQL und Oracle können aufschiebbare Einschränkungen zur Verzögerung verwendet werden Durchsetzung des Fremdschlüssels, bis eine Transaktion festgeschrieben wurde. Diese Funktion wird jedoch in MySQL nicht unterstützt.

Fazit:

Zirkelverweise in SQL mögen zwar verlockend für die Modellierung von Beziehungen sein, können aber zu Komplikationen führen und Leistungsprobleme. Für ein zuverlässiges und wartbares Datenbankdesign wird empfohlen, sich für eine der geeigneteren Alternativen zu entscheiden, z. B. nullfähige Fremdschlüssel, Join-Tabellen oder aufschiebbare Einschränkungen.

Das obige ist der detaillierte Inhalt vonWann ist Zirkelverweis in SQL akzeptabel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage