嗨,我是mongodb的新手。我正在使用java。
我的关系表中有4个表Tenant,system,authorization。
像这样。
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。
在授权表中,System_ID引用System tabel System_ID
我正在将我的数据库从关系转换为mongodb。我需要做的第一件事是Schema design。
我需要做的是:
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吗?帮助我为此设计架构。
答案 0 :(得分:1)
您仍在思考关系数据库。但是,MongoDB是一个面向文档的数据库。
答案 1 :(得分:1)
根据您提供的架构信息,您看起来在租户和系统之间存在多对多关系(通过JOIN表System_prop),以及系统和授权之间的一对多关系。
在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
,但该表没有Prop_Info
。那应该是A.Autho_Info
吗?因此,您可能需要仔细检查这些查询。
以下是有关MongoDB中架构设计的一些额外资源,值得一读:
http://www.mongodb.org/display/DOCS/Schema+Design
最后,它取决于您的应用程序和最常见的查询您选择如何存储数据,上面的示例只是设置架构的一种方法。