Heim >Datenbank >MySQL-Tutorial >Sind zirkuläre referenzielle Einschränkungen in SQL gültig und wie können sie gelöst werden?
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?
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.
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!