這可能是一種跛腳,但在卡桑德拉的主要關鍵是獨特的? 例如,如下表所示:cassandra中的主鍵是獨一無二的?
CREATE TABLE users (
name text,
surname text,
age int,
adress text,
PRIMARY KEY(name, surname)
);
所以,如果是有可能我的數據庫中有我的數據庫中2人具有相同的名字和姓氏,但不同年齡段?這意味着相同的主鍵。
這可能是一種跛腳,但在卡桑德拉的主要關鍵是獨特的? 例如,如下表所示:cassandra中的主鍵是獨一無二的?
CREATE TABLE users (
name text,
surname text,
age int,
adress text,
PRIMARY KEY(name, surname)
);
所以,如果是有可能我的數據庫中有我的數據庫中2人具有相同的名字和姓氏,但不同年齡段?這意味着相同的主鍵。
是的主鍵必須是唯一的。否則,當您使用重複鍵進行查詢時,無法知道要返回哪個行。
在你的情況下,你可以有2行具有相同的名稱或具有相同的姓氏,但不是兩個。
主鍵是唯一的。使用您的數據模型,每個(姓名,姓氏)組合只能有一個年齡段。
根據定義,主鍵必須是唯一的。但這並不意味着你無法完成你的目標。你只需要改變你的方法/術語。
首先,如果你放鬆你的有名字+姓是一個主鍵的目標,你可以做到以下幾點:
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
如果,另一方面,你要確保地址也是共享的,那麼你可能只想在用戶記錄中存儲一系列的年齡。這可以通過以下方式實現:
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}
所以它回到了你實際需要完成的事情上。希望上面的例子給你一些想法。
'PRIMARY KEY((name,surname),age)''PRIRARY KEY(name,surname,age) ' –
@PrakashPandey這些是[組合鍵](http://docs.datastax.com/en/cql/3.1/cql/cql_reference/refCompositePk.html)。如提供的鏈接所述:組合分區鍵是由多個列組成的分區鍵。您使用一組額外的括號來包圍組成複合分區鍵的列。主鍵定義中但嵌套括號外的列是聚類列。這些列在分區內形成邏輯集以便於檢索。 – mjcs
好吧..公平的話,如果有重複,它可以返回兩個值:) – Chip