Heim >Datenbank >MySQL-Tutorial >Sind zirkuläre referenzielle Einschränkungen in SQL gültig und wie können sie gelöst werden?

Sind zirkuläre referenzielle Einschränkungen in SQL gültig und wie können sie gelöst werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 16:47:15121Durchsuche

Are Circular Referential Constraints in SQL Valid, and How Can They Be Resolved?

Zirkuläre referenzielle Einschränkungen in SQL: Navigieren in Komplexitäten

Beim Datenbankdesign ist die Herstellung von Beziehungen zwischen Tabellen durch Fremdschlüsseleinschränkungen gängige Praxis. Wenn jedoch Tabellen in einer Schleife aufeinander verweisen und so eine zirkuläre Abhängigkeit entstehen, stellt sich die Frage: Ist ein solches Schema gültig?

Beispiel für einen zirkulären Verweis

Betrachten Sie das folgende Schema, bei dem zwei Tabellen products und products_pictures verweisen aufeinander:

CREATE TABLE products (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL,
  FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID) ON DELETE SET NULL ON UPDATE SET NULL
);

CREATE TABLE products_pictures (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRODUCT_ID int(10) unsigned NOT NULL,
  FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID) ON DELETE CASCADE
);

In diesem Design bezieht sich products.DEFAULT_PICTURE_ID auf products_pictures.ID und products_pictures.PRODUCT_ID verweisen zurück auf products.ID und erzeugen einen Zirkelverweis.

Gültigkeit und Implikationen

Der allgemeine Konsens unter Experten besteht darin, dass Zirkelverweise in Datenbankschemata nicht empfohlen werden . Sie können zu Komplexitäten und Inkonsistenzen bei der Durchführung von Datenbankvorgängen wie Einfügungen und Aktualisierungen führen.

Option 1: Nullbare Fremdschlüsselspalte

Um dieses Problem zu beheben, besteht eine Möglichkeit darin Lassen Sie dies nicht zu, wenn die beiden Fremdschlüsselspalten nullbar sein sollen. Dies löst das „Henne-Ei“-Problem, in welche Tabelle zuerst Daten eingefügt werden sollen. Es stellt jedoch ein Problem der Datenintegrität dar, wenn ein Produkt ein Standardbild haben kann, das zu einem anderen Produkt gehört.

Option 2: IsDefault-Spalte

Ein anderer Ansatz ist das Entfernen die Spalte DEFAULT_PICTURE_ID aus Produkten und fügen Sie eine IsDefault-Bitspalte in products_pictures hinzu. Dadurch kann nur für ein Bild pro Produkt das IsDefault-Bit gesetzt sein.

Option 3: Aufschiebbare Einschränkungen

Aufschiebbare Einschränkungen ermöglichen die spätere Überprüfung und Durchsetzung bestimmter Einschränkungen, um sie aufzulösen das Zirkelverweisproblem. Diese Option wird in MySQL nicht unterstützt.

Option 4: Separate Tabelle für Standardbilder

Um zirkuläre Abhängigkeiten zu beseitigen und die Datenintegrität sicherzustellen, sollten Sie die Erstellung einer separaten Tabelle in Betracht ziehen, z als „product_default_picture“, das die Beziehung zwischen Produkt und Standardbild speichert. Dieser Ansatz ermöglicht, dass beide Fremdschlüsselspalten nicht nullbar sind.

Zusammenfassend lässt sich sagen, dass Zirkelverweise in einigen Datenbanksystemen zwar technisch gültig sein können, von ihnen jedoch im Allgemeinen abgeraten wird. Erwägen Sie die oben dargestellten Optionen, um Zirkelverweise in Ihren MySQL-Schemas zu berücksichtigen und die Datenintegrität sicherzustellen.

Das obige ist der detaillierte Inhalt vonSind zirkuläre referenzielle Einschränkungen in SQL gültig und wie können sie gelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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