Можно ли смоделировать отображения «один ко многим» в Yugabyte YCQL? - PullRequest
1 голос
/ 28 января 2020

Например,

key          | value
-------------+-------
primary_key1 | v1
primary_key1 | v2

Допустимо ли указанное выше, если один и тот же ключ имеет несколько значений? Или нужно иметь явный ключ кластеризации? Если у меня есть таблица с 2 столбцами, может ли значение быть ключом кластеризации?

1 Ответ

2 голосов
/ 28 января 2020

Первичный ключ должен быть уникальным. Это то, как вы отличаете guish рядов друг от друга. Вы можете использовать для значения столбец коллекции (карта, набор, список):

cqlsh> create table david.test(key TEXT, value SET<TEXT>, PRIMARY KEY(key));
cqlsh> insert into david.test(key,value) VALUES ('primary_key1', {'v1','v2'});
cqlsh> select * from david.test;

 key          | value
--------------+--------------
 primary_key1 | {'v1', 'v2'}

Другой способ - добавить ключ кластеризации . key будет столбцом раздела, а value будет ключом кластеризации (который изменит первичный ключ на (key,value)):

cqlsh> create table david.test(key TEXT, value TEXT, PRIMARY KEY((key), value)) WITH CLUSTERING ORDER BY (value DESC);
cqlsh> insert into david.test(key,value) values('primary_key1', 'v1');
cqlsh> insert into david.test(key,value) values('primary_key1', 'v2');
cqlsh> select * from david.test;

 key          | value
--------------+-------
 primary_key1 |    v2
 primary_key1 |    v1

Здесь key - это partition value. primary key (ключ, значение);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...