Es gibt viel Verwirrung darüber, ich werde versuchen, es so einfach wie möglich zu machen.
Der Primärschlüssel ist ein allgemeines Konzept, um eine oder mehrere Spalten anzuzeigen, die verwendet werden, um Daten aus einer Tabelle abzurufen.
Der Primärschlüssel kann EINFACH sein und sogar inline deklariert werden:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Das bedeutet, dass er aus einer einzigen Spalte besteht.
Aber der Primärschlüssel kann auch ZUSAMMENGESETZT (auch bekannt als VERBUNDEN) sein, der aus mehreren Spalten generiert wird.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
In einer Situation eines ZUSAMMENGESETZTEN Primärschlüssels wird der "erste Teil" des Schlüssels als STUFENAUSSCHLÜSSEL bezeichnet (in diesem Beispiel ist key_part_one der Stufenausschlüssel) und der zweite Teil des Schlüssels ist der CLUSTER-SCHLÜSSEL (in diesem Beispiel key_part_two)
Bitte beachten Sie, dass sowohl der Stufenausschlüssel als auch der Cluster-Schlüssel aus mehreren Spalten bestehen können, hier ist wie:
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)
);
Hinter diesen Bezeichnungen ...
- Der Stufenausschlüssel ist für die Datenverteilung über Ihre Knoten verantwortlich.
- Der Cluster-Schlüssel ist für die Sortierung der Daten innerhalb der Partition verantwortlich.
- Der Primärschlüssel ist äquivalent zum Stufenausschlüssel in einer Einzelfeld-Schlüsseltabelle (d. h. Einfach).
- Der Zusammengesetzte/Verbundene Schlüssel ist einfach ein beliebiger mehrspaltiger Schlüssel
Weitere Verwendungsinformationen: DATENSTAX-DOKUMENTATION
Kleine Verwendungs- und Inhaltsbeispiele
***EINFACHER*** SCHLÜSSEL:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
Tabelleninhalt
key | data
----+------
han | solo
ZUSAMMENGESCHLOSSENER/VERBUNDENER SCHLÜSSEL kann "breite Zeilen" abrufen (d. h. Sie können nur nach dem Stufenausschlüssel abfragen, auch wenn Cluster-Schlüssel definiert sind)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'Fußballspieler');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'Ex-Fußballspieler');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
Tabelleninhalt
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | Fußballspieler
ronaldo | 10 | Ex-Fußballspieler
Aber Sie können mit allen Schlüsseln (sowohl Stufen- als auch Cluster-) abfragen ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
Abfrageergebnis
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | Ex-Fußballspieler
Wichtiger Hinweis: Der Stufenausschlüssel ist der Mindestbestandteil, der benötigt wird, um eine Abfrage mit einer where-Klausel
durchzuführen. Wenn Sie einen zusammengesetzten Stufenausschlüssel haben, wie z.B. den folgenden
z.B.: PRIMARY KEY((col1, col2), col10, col4))
Sie können nur eine Abfrage durchführen, indem Sie mindestens sowohl col1 als auch col2 übergeben, dies sind die 2 Spalten, die den Stufenausschlüssel definieren. Die "allgemeine" Regel für die Abfrage besteht darin, dass Sie mindestens alle Stufenausschlüsselspalten übergeben müssen, dann können Sie optional jeden Cluster-Schlüssel in der Reihenfolge hinzufügen, in der sie festgelegt sind.
also sind die gültigen Abfragen (Ausschluss sekundärer Indizes)
- col1 und col2
- col1 und col2 und col10
- col1 und col2 und col10 und col 4
Ungültig:
- col1 und col2 und col4
- alles, was nicht sowohl col1 als auch col2 enthält