Bu konuda çok fazla karışıklık var, mümkün olduğunca basit hale getirmeye çalışacağım.
Birincil anahtar, bir Tablodan veri almak için kullanılan bir veya daha fazla sütunu gösteren genel bir kavramdır.
Birincil anahtar BASİT olabilir ve hatta satır içi olarak bildirilebilir:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Bu, tek bir sütunla yapıldığı anlamına gelir.
Ancak birincil anahtar daha fazla sütundan oluşturulan KOMPOZİT ( BİLEŞİK olarak da bilinir ) olabilir.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
Bir durumda KOMPOZİT birincil anahtar, anahtarın "ilk bölümü" olarak adlandırılan bölüm anahtar (bu örnek içerisinde key_part_one bölüm tuşu) ve anahtarın ikinci bölümü küme anahtarı (bu örnek içerisinde key_part_two )
Hem bölümleme hem de kümeleme anahtarının daha fazla sütunla yapılabileceğini lütfen unutmayın :
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)
);
Bu isimlerin arkasında ...
- Bölme Anahtarı sizin düğümleri arasında veri dağıtımından sorumludur.
- Kümelenme Anahtar bölüm içinde sıralama verileri sorumludur.
- Birincil Anahtar eşdeğerdir Bölme Key tek alan anahtar tablosundaki (yani içinde Basit ).
- Kompozit / Bileşik anahtar sadece bir çoklu kolon anahtar
Diğer kullanım bilgileri: DATASTAX DOKÜMANTASYONU
Küçük kullanım ve içerik örnekleri
BASİT ANAHTAR:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
tablo içeriği
key | data
----+------
han | solo
KOMPOZİT / KOMPOZ TUŞU "geniş satırları" alabilir (yani, tanımlanmış kümeleme anahtarları olsa bile, sadece bölüm anahtarıyla sorgulayabilirsiniz)
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';
tablo içeriği
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Ancak tüm anahtarlarla (hem bölümleme hem de kümeleme) sorgulayabilirsiniz ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
sorgu çıktısı
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
Önemli not: bölüm anahtarı, a kullanarak bir sorgu gerçekleştirmek için gereken minimum belirtecidir where clause
. Aşağıdaki gibi bir bileşik bölüm anahtarınız varsa
Örneğin: PRIMARY KEY((col1, col2), col10, col4))
Sorguyu yalnızca en az hem col1 hem de col2 ileterek gerçekleştirebilirsiniz; bunlar, bölüm anahtarını tanımlayan 2 sütundur. Sorgu yapmak için "genel" kuralı, en azından tüm bölüm anahtarı sütunlarını geçirmeniz gerektiğidir, ardından isteğe bağlı olarak her kümeleme anahtarını ayarlandıkları sırayla ekleyebilirsiniz.
geçerli sorgular ( ikincil dizinler hariç )
- col1 ve col2
- col1 ve col2 ve col10
- col1 ve col2 ve col10 ve col 4
Geçersiz:
- col1 ve col2 ve col4
- hem col1 hem de col2 içermeyen herhangi bir şey
Bu yardımcı olur umarım.