2014-02-13 8 views
15

Es könnte irgendwie lahm sein, aber in Cassandra hat der Primärschlüssel einzigartig zu sein? Zum Beispiel in der folgenden Tabelle:Primärschlüssel in Cassandra ist einzigartig?

CREATE TABLE users (
    name text, 
    surname text, 
    age int, 
    adress text, 
    PRIMARY KEY(name, surname) 
); 

Wenn also ist es möglich, in meiner Datenbank 2 Personen in meiner Datenbank mit dem gleichen Namen und Nachnamen, aber unterschiedlichem Alter zu haben? Das bedeutet, dass der gleiche Primärschlüssel.

Antwort

7

Ja, der Primärschlüssel muss eindeutig sein. Sonst gäbe es keine Möglichkeit zu wissen, welche Zeile zurückgegeben werden soll, wenn Sie mit einem doppelten Schlüssel abfragen.

In Ihrem Fall können Sie zwei Zeilen mit demselben Namen oder mit demselben Nachnamen, aber nicht beide haben.

+0

gut .. um fair zu sein, könnte es beide Werte zurückgeben, wenn es Duplikate gab :) – Chip

3

Der Primärschlüssel ist einzigartig. Mit Ihrem Datenmodell können Sie nur ein Alter pro (Name, Vorname) Kombination haben.

8

Per Definition muss der Primärschlüssel eindeutig sein. Aber das bedeutet nicht, dass Sie Ihre Ziele nicht erreichen können. Sie müssen nur Ihre Vorgehensweise/Terminologie ändern.

Vor allem, wenn Sie Ihr Ziel Entspannung der mit der Name + Nachname einen Primärschlüssel, können Sie folgendes tun:

CREATE TABLE users (name text, surname text, age int, address text, PRIMARY KEY((name, surname),age)); 
insert into users (name,surname,age,address) values ('name1','surname1',10,'address1'); 
insert into users (name,surname,age,address) values ('name1','surname1',30,'address2'); 
select * from users where name='name1' and surname='surname1'; 

name | surname | age | address 
-------+----------+-----+---------- 
name1 | surname1 | 10 | address1 
name1 | surname1 | 30 | address2 

Wenn auf der anderen Seite, dass die sicherstellen wollte Die Adresse wird ebenfalls freigegeben. Dann möchten Sie wahrscheinlich nur eine Sammlung von Altersgruppen im Benutzerdatensatz speichern. Das könnte erreicht werden durch:

CREATE TABLE users2 (name text, surname text, age set<int>, address text, PRIMARY KEY(name, surname)); 
insert into users2 (name,surname,age,address) values ('name1','surname1',{10,30},'address2'); 
select * from users2 where name='name1' and surname='surname1'; 

name | surname | address | age 
-------+----------+----------+---------- 
name1 | surname1 | address2 | {10, 30} 

So kommt es zurück, was Sie tatsächlich erreichen müssen. Hoffentlich geben die obigen Beispiele Ihnen einige Ideen.

+1

Was ist der Unterschied zwischen 'PRIMARY KEY ((Name, Vorname), Alter)' und 'PRIMÄR KEY (Name, Vorname, Alter) ' –

+0

@PrakashPandey Das sind [zusammengesetzte Schlüssel] (http://docs.datastax.com/en/cql/3.1/cql/cql_reference/refCompositePk.html). Wie auf dem angegebenen Link angegeben: Ein zusammengesetzter Partitionsschlüssel ist ein Partitionsschlüssel, der aus mehreren Spalten besteht. Sie verwenden einen zusätzlichen Satz von Klammern, um Spalten einzufügen, die den zusammengesetzten Partitionsschlüssel bilden. Die Spalten innerhalb der Primärschlüsseldefinition, aber außerhalb der verschachtelten Klammern sind Clusterspalten. Diese Spalten bilden logische Sätze innerhalb einer Partition, um den Abruf zu erleichtern. – mjcs