Rumah >pangkalan data >tutorial mysql >Bilakah Anda Harus Menggunakan Kunci Asing pada Lajur Bukan Kunci Utama?
Kekangan Kunci Asing dan Lajur Bukan Utama Utama
Pangkalan data perhubungan menggunakan kekangan utama asing untuk menegakkan integriti rujukan antara jadual. Walaupun kunci asing biasanya merujuk kepada kunci utama, terdapat keadaan yang memerlukan rujukan lajur bukan kunci utama.
Ilustrasi Senario
Mari kita periksa dua jadual, table1
dan table2
:
<code class="language-sql">CREATE TABLE table1 ( ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, AnotherID INT NOT NULL, SomeData VARCHAR(100) NOT NULL ); CREATE TABLE table2 ( ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, AnotherID INT NOT NULL, MoreData VARCHAR(30) NOT NULL, CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID) );</code>
Di sini, perhubungan kunci asing dikehendaki antara table2
dan table1
menggunakan lajur AnotherID
, yang bukan kunci utama dalam table1
.
Menubuhkan Kunci Asing kepada Kunci Bukan Utama
Walaupun kurang kerap, mencipta kunci asing yang merujuk kepada lajur bukan kunci utama boleh dilaksanakan. Walau bagaimanapun, kekangan unik mesti dikuatkuasakan pada lajur bukan kunci utama:
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
Kekangan unik ini menjamin keunikan AnotherID
nilai dalam table1
, membolehkan penggunaannya sebagai sasaran utama asing.
Alternatif Disyorkan
Sebaik-baiknya, kunci asing harus merujuk kepada kunci utama untuk integriti rujukan yang lebih kukuh. Jika boleh, reka bentuk semula skema pangkalan data anda untuk menggunakan lajur table1
sebagai sasaran kunci asing dalam ID
. Ini menghapuskan keperluan untuk mengurus kekangan unik pada lajur bukan kunci utama.table2
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan Kunci Asing pada Lajur Bukan Kunci Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!