在mongodb中保持关系json

时间:2017-02-11 23:30:06

标签: mongodb

如果我有3个表,如表1,表2,表3具有一对多关系,表1具有40000记录,表2具有400000,表3具有4000000记录。 表2通过id列与表1相关 表3通过id列

与表1相关

以更加规范化的方式将文档保存在mongo db中是否更好,即

Table 1 
{
   _id: "joe",
   name: "Joe Bookreader"
}

Table 2
{
   table1_id: "joe",
   street: "123 Fake Street",
   city: "Faketon",
   state: "MA",
   zip: "12345"
}

或者应该以非规范化的方式提供更好的性能,例如

{
   _id: "joe",
   name: "Joe Bookreader",
   address: {
              street: "123 Fake Street",
              city: "Faketon",
              state: "MA",
              zip: "12345"
            }
}

2 个答案:

答案 0 :(得分:0)

性能实际上取决于您打算如何使用/查询数据。但mongo不是一个关系数据库,所以你不应该这么想。一般而言,最好将所有相关数据保存在一个文档中。

话虽如此,表1只是一个名字并没有多大意义。我会将addressese与名称一起存储。

答案 1 :(得分:0)

MongoDB是一个对象存储,因此基于对象的表示形式通常比规范化表示形式要好。

这里有两个注意事项:

  1. 访问模式确定存储模式。如果一个人及其地址始终一起访问,则最好将它们存储在一起。

  2. 可以嵌套
  3. 1:1或1:N关系。 M:N关系应存储在“规范化”对象中。在您的示例中,M:N表示一个地址属于多个人,而一个人具有多个地址。请记住,这不是MongoDB设计的数据结构类型,因此有点反模式。