Heim >Datenbank >MySQL-Tutorial >Kann ein Fremdschlüssel gleichzeitig auf mehrere Primärschlüssel verweisen?
In diesem Beispiel wird eine häufige Herausforderung beim Datenbankdesign untersucht: das Erstellen einer Fremdschlüsselbeziehung, bei der eine einzelne Tabelle auf Primärschlüssel aus mehreren anderen Tabellen verweisen muss. Das spezifische Szenario beinhaltet, dass die Tabelle deductions
mit den Tabellen employees_ce
und employees_sn
verknüpft werden muss.
Die Frage ist, ob ein Fremdschlüssel in deductions
gleichzeitig direkt auf Primärschlüssel in employees_ce
und employees_sn
verweisen kann. Die Antwort lautet: nicht direkt, sondern in einer standardmäßigen relationalen Datenbank. Ein einzelner Fremdschlüssel kann nur auf einen einzelnen Primärschlüssel verweisen.
Die vorgeschlagene Lösung nutzt ein gut strukturiertes Vererbungsmodell, um dieses Problem zu lösen.
Die Tabellen employees
, employees_ce
und employees_sn
stellen eine Vererbungshierarchie dar. employees
ist die Basistabelle, wobei employees_ce
und employees_sn
als spezialisierte Tabellen davon erben.
Datenbankstruktur:
<code class="language-sql">employees (id INT PRIMARY KEY, name VARCHAR(255)) employees_ce (id INT PRIMARY KEY, ce_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id)) employees_sn (id INT PRIMARY KEY, sn_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
Lösung:
Anstelle eines direkten Links zu employees_ce
und employees_sn
sollte die deductions
-Tabelle auf die gemeinsame übergeordnete Tabelle employees
:
<code class="language-sql">deductions (id INT PRIMARY KEY, employee_id INT, deduction_amount DECIMAL(10,2), ..., FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
Dieser Ansatz stellt die referenzielle Integrität sicher und vermeidet Redundanz. Das employee_id
in deductions
verweist auf den Mitarbeiterdatensatz in employees
, unabhängig davon, ob dieser Mitarbeiter zusätzliche Informationen in employees_ce
oder employees_sn
hat. Dieses Design verwaltet die Beziehung effizient und sorgt für die Datenkonsistenz.
Das obige ist der detaillierte Inhalt vonKann ein Fremdschlüssel gleichzeitig auf mehrere Primärschlüssel verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!