RethinkDB中的复合主键

时间:2015-11-07 17:29:21

标签: rethinkdb

我可以在RethinkDB中创建复合主键吗?例如,如果我的表格包含下一个文档{authorsId: '371df80c-2efd-48f9-ac37-3edcdb152fb1', postsId: '905e0c92-adcb-4095-98df-fa08ca71b900'},那么如何在authorsIdpostsId上创建主键。或者,如果我不能这样做,我应该如何以三种方式使用多对多的关系。我是否使用一个字段作为主键,第二个作为二级索引?

2 个答案:

答案 0 :(得分:3)

主键只能在一列上,但您可以将postsIdauthorsId放在一个数组中,并将其用作主键值。

有关更多信息,请参阅此处: 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