Die Herausforderung: Komplexe Datenbankstrukturen erfordern oft Eins-zu-eins-Beziehungen. Ein Szenario mit einer zentralen Storage
-Tabelle, die sowohl mit Van
- als auch mit Warehouse
-Tabellen verknüpft ist, veranschaulicht diese Herausforderung. Wie können wir diese Beziehungen effektiv aufbauen und aufrechterhalten und so die Datenintegrität gewährleisten?
Vererbungsstrategien im Datenbankdesign:
Es gibt mehrere Ansätze zur Darstellung der Vererbung in Datenbanken:
Optimale Lösung: Vererbung von Klassentabellen und Durchsetzung auf Anwendungsebene
Für die Szenarios Storage
, Van
und Warehouse
wird die Methode „Klassentabellenvererbung“ bevorzugt. Um jedoch sowohl das Vorhandensein als auch die Exklusivität von Beziehungen untergeordneter Entitäten durchzusetzen, sind Prüfungen auf Anwendungsebene erforderlich:
Storage
Datensatz für jeden Van
oder Warehouse
Datensatz.Storage
Datensatz nur mit einem Van
ODER einem Warehouse
Datensatz verknüpft ist, niemals mit beiden.Während Fremdschlüsseleinschränkungen hilfreich sein können, erfordert das Erreichen vollständiger Exklusivität möglicherweise gespeicherte Prozeduren und Logik auf Anwendungsebene, um direkte, potenziell widersprüchliche Tabellenaktualisierungen durch Clients zu verhindern. Das Fehlen verzögerter Einschränkungen in Microsoft SQL Server erschwert rein einschränkungsbasierte Lösungen.
Alternative: Durchsetzung von Exklusivität ohne aufgeschobene Einschränkungen
Eine alternative Methode vermeidet verzögerte Einschränkungen durch Hinzufügen einer STORAGE_TYPE
-Spalte:
STORAGE_TYPE
Spalte, die auf 0 gesetzt ist.STORAGE_TYPE
Spalte, die auf 1 gesetzt ist.Eindeutige Einschränkungen werden dann auf die Kombination (STORAGE_ID
, STORAGE_TYPE
) angewendet:
<code class="language-sql">CREATE TABLE VAN ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(0 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) ); CREATE TABLE WAREHOUSE ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(1 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) );</code>
Dieser Ansatz garantiert, dass ein einzelnes STORAGE_ID
nur entweder mit einem Van
oder einem Warehouse
verknüpft werden kann, wodurch die Exklusivität der Eins-zu-Eins-Beziehung gestärkt wird. Die Anwesenheit erfordert jedoch noch eine Überprüfung auf Anwendungsebene.
Das obige ist der detaillierte Inhalt vonWie können Eins-zu-Eins-Beziehungen im Datenbankdesign mit Vererbung effektiv hergestellt und durchgesetzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!