По определению первичный ключ должен быть уникальным. Но это не значит, что вы не можете достичь своих целей. Вам просто нужно изменить свой подход/терминологию.
Прежде всего, если вы ослабите свою цель, чтобы имя + фамилия были первичным ключом, вы можете сделать следующее:
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}
Таким образом, все возвращается к тому, что вам действительно нужно выполнить. Надеемся, приведенные выше примеры натолкнут вас на некоторые идеи.
person
Tupshin Harper
schedule
14.02.2014