Heim >Datenbank >MySQL-Tutorial >Kann ein Fremdschlüssel gleichzeitig auf mehrere Primärschlüssel verweisen?

Kann ein Fremdschlüssel gleichzeitig auf mehrere Primärschlüssel verweisen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-11 10:21:43176Durchsuche

Can a Foreign Key Reference Multiple Primary Keys Simultaneously?

Umgang mit komplexen Fremdschlüsselbeziehungen im Datenbankdesign

Szenario

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.

Das Problem und seine Lösung

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.

Vererbungsbasierter Ansatz

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:

verweisen
<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!

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