如何使用CQL3建模多对多关系是一个经典问题,那么应该采用哪种方式呢?假设现在有两个表:
CREATE TABLE actor (
id text PRIMARY KEY,
given text,
surname text,
)
CREATE TABLE fan (
id text PRIMARY KEY,
given text,
surname text,
)
我希望模拟这样一个事实,即演员可以有多个粉丝,每个粉丝都可以喜欢许多演员。
我首先想到的是使用 集合,像下面这样(对于粉丝也是类似的):
CREATE TABLE actor (
id text PRIMARY KEY,
given text,
surname text,
fans set<text>
)
<similarly for fan>
但是看起来它们似乎只适用于小集合,并且我没有看到一种方法可以在不完全加载两个集合的情况下检查风扇是否与演员相关。
我发现的第二种选择是制作两个映射表,每个表对应一种关系方向:
CREATE TABLE actor_fan (
text actor,
text fan,
PRIMARY KEY(actor,fan)
);
<similarly for fan_actor>
这会让我能够获取演员的粉丝列表并检查特定人是否是给定演员的粉丝吗? Cassandra有很多文档,但通常与旧版本相关,并且似乎在不同版本之间存在许多差异。