首页 > 解决方案 > 是否可以在 Yugabyte YCQL 中建模一对多映射?

问题描述

例如,

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

在同一个键有多个值的情况下是否允许上述情况?还是需要一个显式的集群键?如果我有一个包含 2 列的表,该值可以是集群键吗?

标签: databasedistributed-databaseyugabyte-db

解决方案


主键必须是唯一的。这是您区分行的方式。您可以使用集合列(地图、集合、列表)作为值:

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

这里,keypartition value. 是primary key(键,值);


推荐阅读