Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Kekangan Kunci Asing Merujuk Lajur Bukan Utama Utama?
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:
Jadi, dalam skema yang diberikan, menggunakan kekangan unik pada AnotherID dalam jadual1 akan membenarkan penciptaan kekangan kunci asing."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."
<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!