Contoh ini meneroka cabaran reka bentuk pangkalan data biasa: mewujudkan hubungan kunci asing yang mana satu jadual perlu merujuk kunci utama daripada berbilang jadual lain. Senario khusus melibatkan jadual deductions
yang perlu dipautkan ke kedua-dua jadual employees_ce
dan employees_sn
.
Persoalannya ialah sama ada kunci asing dalam deductions
boleh merujuk terus kekunci primer dalam kedua-dua employees_ce
dan employees_sn
secara serentak. Jawapannya ialah: tidak secara langsung, dalam pangkalan data hubungan standard. Satu kunci asing hanya boleh merujuk satu kunci utama.
Penyelesaian yang dicadangkan memanfaatkan model warisan yang tersusun dengan baik untuk menyelesaikan masalah ini.
Jadual employees
, employees_ce
dan employees_sn
mewakili hierarki warisan. employees
ialah jadual asas, dengan employees_ce
dan employees_sn
sebagai jadual khusus yang diwarisi daripadanya.
Struktur Pangkalan Data:
<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>
Penyelesaian:
Daripada pautan terus ke employees_ce
dan employees_sn
, jadual deductions
hendaklah merujuk kepada jadual induk biasa, 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>
Pendekatan ini memastikan integriti rujukan dan mengelakkan lebihan. employee_id
dalam deductions
memaut ke rekod pekerja dalam employees
, tidak kira sama ada pekerja tersebut mempunyai maklumat tambahan dalam employees_ce
atau employees_sn
. Reka bentuk ini mengurus perhubungan dengan cekap dan mengekalkan ketekalan data.
Atas ialah kandungan terperinci Bolehkah Kunci Asing Rujukan Berbilang Kunci Utama Secara serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!