Bagaimana cara menambahkan kunci utama komposit di postgresql?

7. Tulis pernyataan SQL untuk menambahkan kunci utama untuk kombinasi kolom location_id dan country_id

Berikut adalah struktur lokasi tabel

postgres=# \d locations

     Column     |         Type          | Modifiers
----------------+-----------------------+-----------
 location_id    | numeric(4,0)          |
 street_address | character varying(40) |
 postal_code    | character varying(12) |
 city           | character varying(30) |
 state_province | character varying(25) |
 country_id     | character varying(2)  |

Sekarang jalankan pernyataan berikut

Contoh Solusi

Kode

ALTER TABLE locations
ADD PRIMARY KEY(location_id,country_id);
_

Keluaran

Sekarang lihat struktur lokasi tabel setelah diubah

postgres=# \d locations

     Column     |         Type          | Modifiers
----------------+-----------------------+-----------
 location_id    | numeric(4,0)          | not null
 street_address | character varying(40) |
 postal_code    | character varying(12) |
 city           | character varying(30) |
 state_province | character varying(25) |
 country_id     | character varying(2)  | not null
Indexes:
    "locations_pkey" PRIMARY KEY, btree (location_id, country_id)

Punya cara lain untuk menyelesaikan solusi ini?

Sebelumnya. Tulis pernyataan SQL untuk menambahkan kunci utama ke kolom location_id di tabel lokasi
Lanjut. Tulis pernyataan SQL untuk menghapus primer yang ada dari lokasi tabel pada kombinasi kolom location_id dan country_id

Berapa tingkat kesulitan latihan ini?

Mudah Sedang Keras



Ikuti kami di Facebook dan Twitter untuk pembaruan terbaru.


  • Tren Mingguan
  • Latihan Pemrograman Dasar Java
  • Subkueri SQL
  • Latihan Database Adventureworks
  • Latihan Dasar C# Sharp
  • SQL COUNT() dengan perbedaan
  • Latihan String JavaScript
  • Validasi Formulir JavaScript HTML
  • Latihan Pengumpulan Java
  • fungsi SQL COUNT()
  • Gabung Dalam SQL
  • Latihan fungsi JavaScript
  • Tutorial Python
  • Latihan Array Python
  • Gabung Silang SQL
  • Latihan C# Sharp Array


Saya mencoba melempar beberapa SQL yang tidak valid ke PostgreSQL dan menemukan reaksinya
membingungkan

tes $ psql
psql (8. 4beta2)
Ketik "bantuan" untuk bantuan

test=# BUAT TABEL t1 (
tes(# serial id BUKAN NULL,
test(# nama teks NOT NULL,
uji(# KUNCI UTAMA (id)
tes(# );
BUAT TABEL
test=# BUAT TABEL t2 (
test(# id int BUKAN REFERENSI NULL t1,
tes(# bahasa char(3) NULL,
tes(# txt teks BUKAN NULL,
tes(# KUNCI UTAMA (id, bahasa)
tes(# );
BUAT TABEL

Inilah keluhan pertama saya. PostgreSQL menerima ini secara diam-diam alih-alih mengeluh

test=# INSERT INTO t1 (id, name) NILAI (1, 'teks 1');
MASUKKAN 0 1
test=# INSERT INTO t2 (id, language, txt) NILAI (2, NULL, 'teks 1 tanpa bahasa');
KESALAHAN. nilai null di kolom "bahasa" melanggar batasan not-null

Dan inilah keluhan kedua saya. meskipun PostgreSQL menolak dengan benar
INSERT itu hanya mengabaikan spesifikasi NULL saya

Kunci utama digunakan untuk mengidentifikasi baris secara unik dalam sebuah tabel. Itu bisa berupa satu kolom atau sekelompok kolom (komposit). Kunci utama adalah salah satu batasan yang kami tentukan untuk membatasi input dan validasi data

Kunci utama adalah kombinasi dari

  • Batasan BUKAN NULL
  • Kendala UNIK

Menentukan kunci utama

Seperti yang kita lihat pada batasan di bagian sebelumnya, Dalam pernyataan CREATE TABLE, Anda dapat menentukan kunci utama untuk kolom dengan menggunakan kata kunci PRIMARY KEY terhadap kolom unik yang diperlukan atau kombinasi kolom

Copy

Di sini kolom id_ ditandai sebagai kunci utama

Menambahkan kunci utama nanti

Jika Anda lupa menandai kolom apa pun sebagai kunci utama selama pembuatan tabel, kami juga dapat menambahkan kunci utama nanti dengan mengubah tabel menggunakan perintah berikut

Kunci utama komposit hanyalah kunci utama yang didasarkan pada dua atau lebih kolom. Ini berarti kunci asing terkait harus didasarkan pada jumlah kolom yang sama, agar cocok

Selain itu, karena kunci utama membuat batasan INDEX dan UNIQUE, memiliki kunci primer gabungan akan membuat indeks gabungan dan batasan unik gabungan

Jika Anda memiliki kunci primer 2 kolom, kolom terpisah tidak boleh unik. Demikian pula, tidak ada indeks untuk kedua kolom

Namun, Anda tidak akan dapat memiliki dua baris di mana kedua kumpulan kolom memiliki nilai yang sama. Juga, indeks akan dibuat untuk pasangan kolom

Katakanlah Anda memiliki tabel ini

Dan kemudian kita isi dengan data ini

account_numbersort_codeuser_name81795745090566Rolf Smith19876543232344Bob Smith19876543151617Anne Pun19876543909900Charlie Robert12345678005344Susan Williams

Ini tidak apa-apa, karena meskipun Bob, Anne, dan Charlie memiliki nomor rekening yang sama, kode sortir mereka berbeda (ini adalah nomor yang digunakan di perbankan Inggris untuk membedakan antara cabang bank yang memiliki rekening tersebut)

Namun ini tidak akan baik-baik saja

account_numbersort_codeuser_name19876543909900Anne Pun19876543909900Charlie Robert

Sekarang akunnya sama, dan ini tidak diizinkan di PostgreSQL

Anda secara alami dapat menambahkan lebih banyak kolom ke kunci utama komposit, untuk memasukkan nama misalnya. Tapi karena nama cukup unik, itu mungkin bukan pendekatan yang baik dalam situasi ini

Kunci asing komposit

Untuk mendefinisikan kunci asing komposit kita dapat melakukan hal serupa

Perhatikan bahwa karena kolom tabel referensi dan referensi memiliki nama yang sama (account_number dan sort_code), yang dapat disingkat menjadi ini

Pintasan itu juga dapat digunakan saat melakukan inline REFERENCES, sebagaimana dirinci dalam dokumentasi resmi

Bagaimana Anda menambahkan kunci primer komposit?

Kunci Utama Komposit .
Langkah 1. Membuat Basis Data. .
Pertanyaan. Buat sampel basis data
Langkah 2. Gunakan Basis Data. .
Pertanyaan. Gunakan Sampel
Langkah 3. Pembuatan Tabel dengan komposit primer. .
Pertanyaan. .
Langkah 4. Setelah pembuatan tabel, kita dapat membenarkan tampilan dan metadata tabel dengan bantuan kueri di bawah ini. .
Pertanyaan

Bisakah kita membuat kunci primer komposit?

Dengan kata lain, kunci kombinasi juga dapat digambarkan sebagai kunci utama yang dibuat dengan menggunakan beberapa kolom. Namun, tipe data dari kolom yang berbeda dapat berbeda satu sama lain. Anda juga dapat menggabungkan semua kunci asing untuk membuat kunci komposit di SQL .