По дефиниция първичният ключ трябва да бъде уникален. Но това не означава, че не можете да постигнете целите си. Просто трябва да промените подхода/терминологията си.
Първо, ако отпуснете целта си името+фамилията да бъде първичен ключ, можете да направите следното:
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