Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Kekangan Kunci Asing Merujuk Lajur Bukan Utama Utama?

Bagaimana untuk Mencipta Kekangan Kunci Asing Merujuk Lajur Bukan Utama Utama?

Barbara Streisand
Barbara Streisandasal
2025-01-15 09:32:46540semak imbas

How to Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

Merujuk kepada kunci bukan utama dalam kekangan kunci asing

Mengekalkan integriti rujukan apabila memautkan jadual melalui kunci asing adalah keperluan biasa. Walau bagaimanapun, keadaan ini berlaku apabila jadual yang dirujuk oleh kunci asing tidak mempunyai kunci utama yang sepadan dengan lajur yang dirujuk.

Penerangan masalah:

Pertimbangkan skema pangkalan data berikut:

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

Matlamat di sini adalah untuk menguatkuasakan kekangan kunci asing antara table2.AnotherID dan table1.AnotherID. Walau bagaimanapun, ID ialah kunci utama table1 dan AnotherID tidak.

Penyelesaian:

Untuk mencipta kekangan kunci asing yang merujuk kepada kunci bukan utama, lajur yang dirujuk mesti mempunyai kekangan unik digunakan padanya. Menurut Buku Dalam Talian Microsoft:

"Kekangan KUNCI ASING tidak perlu dipautkan hanya kepada kekangan KUNCI UTAMA dalam jadual lain; ia juga boleh ditakrifkan sebagai lajur yang merujuk kepada kekangan UNIK dalam jadual lain."

Jadi, dalam skema yang diberikan, menggunakan kekangan unik pada AnotherID dalam jadual1 akan membenarkan penciptaan kekangan kunci asing.

<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa jika calon utama alternatif wujud, menggunakan ini selalunya pendekatan yang lebih sesuai.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Kekangan Kunci Asing Merujuk Lajur Bukan Utama Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn