0

可能重复:
使用共享数据的 Mongodb 数据库模式设计

嗨,我是 mongodb 的新手。我正在使用 java。

我的关系表中有 4 个表租户、系统、授权。

像这样的东西。

Table            Fields

 Tenant           Tenant_ID(PK), Tenant_INFO
 System           System_ID(PK), System_Info
 Authorization    System_ID, Autho_Info.
 System_prop      System_ID, Prop_Info, Tenant_ID

在 System_prop 表中,Tenant_ID 是指租户表 Tenant_ID (PK),System_ID 是指系统表 System_ID。

在 Authorization 表中,System_ID 是指 System 表 System_ID

我正在将我的数据库从关系数据库切换到 mongodb。我需要做的第一件事是架构设计。

我需要做的查询是:

SELECT D.Prop_Info, D.System_ID, A.Tenant_Info From TENANT A ,System_prop D, SYSTEM B, Where D.System_ID = B.System_ID AND D.Tenant_ID = A.Tenant_ID

SELECT C.System_ID, C.auth_Info, B.System_ID FROM Authorization C, SYSTEM B WHERE C.System_ID = B.System_ID

谁能帮助我如何将这些表设计为 mongodb 中的集合?

我需要嵌入 r 使用 dbref 吗?帮助我为此设计架构。

4

2 回答 2

1

您仍在考虑关系数据库。然而,MongoDB 是一个面向文档的数据库。

  1. 通常不需要人工 ID 号,因为每个文档都会自动有一个 _id 字段,它是一个 GUID(保证全局唯一)。
  2. 关系表不应该在 MongoDB 中使用。n 型关系是用数组字段代替的。因此,当 1 个系统有 N 个它使用的授权时,您的系统文档应该有一个“授权”字段,它是它拥有的授权的对象 ID 的数组。是的,这将严重违反关系数据库的规范化规则。但是这里没有关系数据库。在 MongoDB 中,用数组表示 N 关系是很实用的,因为数组对查询语言是透明的。
于 2012-09-02T23:00:56.530 回答
1

从您提供的模式信息来看,您在 Tenant 和 System 之间存在多对多关系(通过 JOIN 表 System_prop),在 System 和 Authorization 之间存在一对多关系。

在 MongoDB 中,这两种类型的关系都可以使用数组字段来实现。这是您可以设置系统集合的方式:

{
    System_Info: ...,

    Tenant: [ 
        { 
            Tenant_Id: ..., 
            Tenant_Info: ..., 
            Prop_Info: ...
        }, 
        { 
            Tenant_Id: ..., 
            Tenant_Info: ..., 
            Prop_Info: ...
        } ],

    Authorization: [ 
        {
            Auth_Id: ..., 
            Auth_Info: ...
        }, 
        {
            Auth_Id: ..., 
            Auth_Info: ...
        } ]
}

但是,对于租户信息,您现在将获得非规范化的重复信息,即相同的租户文档出现在不同的系统文档中。确保一致性取决于您的应用程序。

至于您提到的查询:看起来缺少一些信息。对于第一个查询,您加入Tenant_Id但不从租户表中请求任何信息。第二个请求Prop_Info来自 Authorization 表,但该表没有Prop_Info. 应该是这样A.Autho_Info吗?因此,您可能需要仔细检查这些查询。

以下是一些关于 MongoDB 中模式设计的额外资源,值得一读:

http://www.mongodb.org/display/DOCS/Schema+Design

https://openshift.redhat.com/community/blogs/designing-mongodb-schemas-with-embedded-non-embedded-and-bucket-structures

最后,这取决于您的应用程序和最常见的查询您选择如何存储数据,上面的示例只是设置模式的一种方法。

于 2012-09-03T01:18:18.120 回答