我想我必须遗漏一些基本的东西。
我的表定义是:
CREATE TABLE IF NOT EXISTS bundle_components (
bundle_id uuid,
component_type text,
component_id uuid,
PRIMARY KEY (bundle_id, component_type)
);
CREATE INDEX ON bundle_components(component_type);
CREATE INDEX ON bundle_components(component_id);
但是,我似乎最终只得到每个唯一component_id
和bundle_id
组合的单 component_type
。我的印象是该表会有很宽的行,所以如果它们具有相同的component_ids
和bundle_id
组合,我会有多个component_type
。
这就是行动中的问题。 INSERT
的两个component_id
语句具有不同的值,导致单个条目(前一个条目被覆盖):
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 6558981e-1d89-43c3-a1fc-b2cf45119bcc);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 6558981e-1d89-43c3-a1fc-b2cf45119bcc
(2 rows)
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 7fcf4402-c8b3-41ed-a524-b1b546511635);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 7fcf4402-c8b3-41ed-a524-b1b546511635
有人可以告诉我我在这里做错了吗?
答案 0 :(得分:2)
您的主键是(bundle_id, component_type)
,因此您只能拥有(bundle_id, component_type)
的1个唯一组合。
您可能想要做的是将component_id添加到主键((bundle_id, component_type, component_id)
),这将允许您拥有具有相同bundle_id和component_type的多个组件。有了这个改变,我得到以下输出:
cqlsh:test> select * from bundle_components ;
bundle_id | component_id | component_type
--------------------------------------+--------------------------------------+----------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 6558981e-1d89-43c3-a1fc-b2cf45119bcc | script
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 7fcf4402-c8b3-41ed-a524-b1b546511635 | script
根据您希望如何查询数据,您可以更改component_id和component_type的排序,但我猜您想通过bundle_id, component_type
而不是bundle_id, component_id
来查询数据{{1}}