Rumah >pangkalan data >tutorial mysql >Mengapa Postgres Membuang Ralat 'Tiada Kekangan Unik Padanan Kunci Diberi' Semasa Mencipta Kunci Asing?
Memahami Ralat Integriti Rujukan Postgres
Apabila membina struktur pangkalan data dalam Postgres (versi 9.1 atau lebih baru), anda mungkin menghadapi ralat ini:
<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>
Ralat ini timbul daripada penguatkuasaan integriti rujukan Postgres, satu aspek penting dalam ketekalan pangkalan data. Jom pecahkan punca dan penyelesaiannya.
Integriti Rujukan dan Kunci Asing
Integriti rujukan memastikan ketekalan data merentas jadual yang berkaitan. Hubungan utama asing mewujudkan hubungan antara jadual. Sebagai contoh, jika jadual bar
mempunyai kunci asing foo_fk
merujuk kepada lajur name
dalam jadual foo
, integriti rujukan memberi mandat bahawa setiap nilai foo_fk
dalam bar
mesti sepadan dengan nilai name
sedia ada dalam foo
.
Peranan Kekangan Unik
Untuk menegakkan integriti rujukan, Postgres memerlukan kekangan unik pada lajur yang dirujuk (name
dalam jadual foo
). Kekangan ini menjamin bahawa setiap nilai name
dalam foo
adalah unik, membolehkan Postgres mengenal pasti baris yang dirujuk dengan jelas.
Punca Ralat: Hilang Kekangan Unik
Mesej ralat menunjukkan kekangan unik yang hilang pada lajur yang dirujuk oleh kunci asing. Jika lajur name
dalam foo
tidak mempunyai kekangan unik, Postgres tidak boleh memautkan nilai foo_fk
dengan pasti dalam bar
ke baris tertentu dalam foo
, mengakibatkan ralat.
Menyelesaikan Ralat: Menambah Kekangan Unik
Penyelesaian adalah mudah: tambahkan kekangan unik pada lajur yang dirujuk. Dalam SQL, ini dilakukan menggunakan perintah ALTER TABLE
dan ADD CONSTRAINT
:
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>
Tambahan ini menguatkuasakan keunikan untuk lajur name
dalam foo
, memenuhi keperluan Postgres untuk integriti rujukan dan membolehkan hubungan kunci asing berfungsi dengan betul. Selepas menambah kekangan, percubaan untuk mencipta hubungan kunci asing sepatutnya berjaya.
Atas ialah kandungan terperinci Mengapa Postgres Membuang Ralat 'Tiada Kekangan Unik Padanan Kunci Diberi' Semasa Mencipta Kunci Asing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!