Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rethinkdb 数据库中的复合主键_Rethinkdb - Fatal编程技术网

Rethinkdb 数据库中的复合主键

Rethinkdb 数据库中的复合主键,rethinkdb,Rethinkdb,我可以在数据库中创建复合主键吗?例如,如果我有一个带有下一个文档结构的表{authorsId:'371df80c-2efd-48f9-ac37-3edcdb152fb1',postsId:'905e0c92-adcb-4095-98df-fa08ca71b900'}如何在authorsId和postsId上同时创建主键。或者,如果我不能做到这一点,我应该如何在三个表中使用多对多关系。我是否使用一个字段作为主键,第二个字段作为辅助索引?主键只能位于一列上,但您可以将postsId和authorsI

我可以在数据库中创建复合主键吗?例如,如果我有一个带有下一个文档结构的表
{authorsId:'371df80c-2efd-48f9-ac37-3edcdb152fb1',postsId:'905e0c92-adcb-4095-98df-fa08ca71b900'}
如何在
authorsId
postsId
上同时创建主键。或者,如果我不能做到这一点,我应该如何在三个表中使用多对多关系。我是否使用一个字段作为主键,第二个字段作为辅助索引?

主键只能位于一列上,但您可以将
postsId
authorsId
放入数组中,并将其用作主键值

有关更多信息,请参见此处:

编辑


主键仍然只是一个字段,但您可以使用[postsId,authorsId]作为该列的值并实现相同的效果。(从注释添加回答案)。

重新思考DB主键用于单个列,您可以将其更改为任何字段,而不是默认的
id
。调用
tableCreate
时,可以为
primaryKey
传递一个字符串,以将该列用作主键

不能在多个列上创建主键。不过,您可以在多列上创建辅助索引。但是,RejectDB没有唯一的索引效果

如果要进行多对多关系,请使用3个表,您可以这样做:

表T1:id,字段

表T2:id,字段2

透视表p:t1\U id、t2\U id

然后您可以使用
eqJoin
连接数据,或
concatMap/getAll
。例如:

r.table("P").eq_join("t1_id", r.table("T1"))
  .zip()
  .eq_join("t2_id", r.table("T2"))
  .zip()
基本上,从数据透视表开始,将数据与第一个表联接,然后继续与第二个表联接


您可以在这里阅读有关数据表联接的更多信息。

当我将其放入数组时,出现异常:
预期的类型字符串,但找到了数组。
这里是查询
r.db('Rbac')。tableCreate('Test',{primaryKey:['id1',id2']})
啊,让我重新表述我的答案,它让人困惑。主键仍然只是一个字段,但您可以使用
[postsId,authorsId]
作为该列的值并实现相同的结果。@abilash:
r.db('Rbac')。tableCreate('Test',{primaryKey:['id1',id2']}
给了我一个
预期的类型字符串,但在DB 2.3.4中的
中找到了数组。我想答案是这样的
r.db('test')。tableCreate('mytable',{primaryKey:'myprimary'})
然后在执行读取、插入或更新时
r.db('test')。table('mytable')。insert({myprimary:['id1value',id2value'],othervalue:'something'})
r.db('test table('mytable')。update({myprimary:['id1value',id2value'],othervalue:'newthing'))
r.db('test').table('mytable').get(['id1value','id2value'])
。在data Explorer上测试感谢反馈,我还有一个答案-primaryKey在RejectionDB中不也是唯一的吗?对不起,我在上一篇评论中是“问题”而不是“答案”,我对下一个建议感到困惑-当我们创建透视表时,我们需要设置主键(t1\u id或t2\u id)但是主键是唯一的,并且pivot表中的存储值存在问题,这是否意味着我们需要第三列?主键是唯一的。在透视表上,它没有任何约束来保证[t1\u id,t2\u id]的唯一性。这些限制来自于数据库的分发,如1716版。因此,这取决于您的应用程序来处理。例如:当您将记录插入数据透视表时,可以使用额外的主
id
字段和value=“${t1\u id}${t2\u id”来防止重复。所以,是的,我们必须在应用程序内部处理这个独特的问题。