我可以在RethinkDB中创建复合主键吗?例如,如果我的表格包含下一个文档{authorsId: '371df80c-2efd-48f9-ac37-3edcdb152fb1', postsId: '905e0c92-adcb-4095-98df-fa08ca71b900'}
,那么如何在authorsId
和postsId
上创建主键。或者,如果我不能这样做,我应该如何以三种方式使用多对多的关系。我是否使用一个字段作为主键,第二个作为二级索引?
答案 0 :(得分:3)
主键只能在一列上,但您可以将postsId
和authorsId
放在一个数组中,并将其用作主键值。
有关更多信息,请参阅此处: https://www.rethinkdb.com/api/javascript/table_create/
修改强>
主键仍然只是一个字段,但您可以使用[postsId,authorsId]作为该列的值并实现相同的目标。 (从评论中添加回来回答)。
答案 1 :(得分:1)
RethinkDB主键适用于单个列,您可以将其更改为任何字段而不是默认的id
。当您致电tableCreate
时,您可以传递primaryKey
的字符串,以将该列用作主键。
您无法在多个列上创建主键。但是,您可以在多列上创建二级索引。但是,RethinkDB没有唯一的索引效果https://github.com/rethinkdb/rethinkdb/issues/1716。
如果你想做很多对很多关系,使用3个表,你可以这样做:
表T1:id,字段
表T2:id,fields2
数据透视表P:t1_id,t2_id
然后,您可以使用eqJoin
加入数据,或concatMap/getAll
。例如:
r.table("P").eq_join("t1_id", r.table("T1"))
.zip()
.eq_join("t2_id", r.table("T2"))
.zip()
基本上从数据透视表中,您将数据与第一个表连接,然后继续与第二个表连接。
您可以在此处详细了解数据表加入https://www.rethinkdb.com/docs/table-joins/#many-to-many-relations。