Ada banyak kebingungan di sekitar ini, saya akan mencoba membuatnya sesederhana mungkin.
Kunci utama adalah konsep umum untuk menunjukkan satu atau lebih kolom yang digunakan untuk mengambil data dari Tabel.
Kunci utama mungkin SEDERHANA dan bahkan dinyatakan sebaris:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Itu berarti dibuat oleh satu kolom.
Tetapi kunci utama juga bisa menjadi KOMPOSIT (alias SENYAWA ), dihasilkan dari lebih banyak kolom.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
Dalam situasi kunci primer KOMPOSIT , "bagian pertama" dari kunci tersebut disebut PARTITION KEY (dalam contoh ini key_part_one adalah kunci partisi) dan bagian kedua dari kunci adalah CLUSTERING KEY (dalam contoh ini key_part_two )
Harap perhatikan bahwa baik kunci partisi dan pengelompokan dapat dibuat oleh lebih banyak kolom , berikut caranya:
create table stackoverflow_multiple (
k_part_one text,
k_part_two int,
k_clust_one text,
k_clust_two int,
k_clust_three uuid,
data text,
PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)
);
Di belakang nama-nama ini ...
- The Partisi Key bertanggung jawab untuk distribusi data di node Anda.
- The Clustering Key bertanggung jawab untuk memilah data dalam partisi.
- The Primary Key adalah setara dengan Key partisi dalam satu tabel-bidang-key (yaitu Simple ).
- The Composite / Compound Key hanya sembarang tombol multi-kolom
Informasi penggunaan lebih lanjut: DOKUMENTASI DATASTAX
Penggunaan kecil dan contoh konten KUNCI
SEDERHANA :
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
konten tabel
key | data
----+------
han | solo
KUNCI KOMPOSIT / SENYAWAAN dapat mengambil "baris lebar" (yaitu Anda dapat melakukan kueri hanya dengan kunci partisi, bahkan jika Anda memiliki kunci pengelompokan yang ditentukan)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
konten tabel
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Tetapi Anda dapat melakukan kueri dengan semua kunci (baik partisi dan pengelompokan) ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
output permintaan
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
Catatan penting: kunci partisi adalah penentu minimum yang diperlukan untuk melakukan kueri menggunakan a where clause
. Jika Anda memiliki kunci partisi komposit, seperti berikut ini
misalnya: PRIMARY KEY((col1, col2), col10, col4))
Anda dapat melakukan kueri hanya dengan melewati setidaknya col1 dan col2, ini adalah 2 kolom yang menentukan kunci partisi. Aturan "umum" untuk membuat kueri adalah Anda harus melewati setidaknya semua kolom kunci partisi, lalu Anda dapat menambahkan secara opsional setiap kunci pengelompokan sesuai urutan yang ditetapkan.
jadi kueri yang valid adalah ( tidak termasuk indeks sekunder )
- col1 dan col2
- col1 dan col2 dan col10
- col1 dan col2 dan col10 dan col 4
Tidak valid:
- col1 dan col2 dan col4
- apa pun yang tidak mengandung col1 dan col2
Semoga ini membantu.