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
Lepaskan: 2025-01-15 09:32:46
asal
599 orang telah melayarinya

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:

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)
);
Salin selepas log masuk

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.

ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan