Database design MongoDB表方案设计-最佳实践。是否使用主文档(如主表rdbms中的主文档)

Database design MongoDB表方案设计-最佳实践。是否使用主文档(如主表rdbms中的主文档),database-design,mongodb,Database Design,Mongodb,背景: 在我的项目中,我正在原型化MongoDB的使用,我正在使用一些主表来存储定义,并在数据表中使用这些键。 我的几张主桌是 Class Master_Feed_Provider { int key; string feed_provider_name string address } Class Master_File_Types {int id; string type } 我的数据表是 Class Data_Feeds {int id, int file_type_key , i

背景: 在我的项目中,我正在原型化MongoDB的使用,我正在使用一些主表来存储定义,并在数据表中使用这些键。 我的几张主桌是

Class Master_Feed_Provider { int key;
string feed_provider_name 
string address }

Class Master_File_Types {int id;
string type }
我的数据表是

Class Data_Feeds {int id, 
int file_type_key , int feed_provider_key ,
DateTime time }
**这里我使用feed\u provider\u键链接来自master\u feed\u provider的详细信息

因此,我怀疑mongoDb是否支持这种设计,但我应该采用这种设计,还是应该在我的数据提要表条目中保留提要提供者和文件类型的全部详细信息,而不是仅使用键和使用联接获取信息

在我的数据表中保留完整的细节(代替唯一的键)将增加数据大小。 保留键和使用连接链接细节将导致额外的数据库操作。
那么这里哪种方法更好呢?

您应该研究如何为键使用
ObjectId

您的问题有点难以理解,但总体上MongoDB可以支持传统的关系模型,但因为数据库中没有连接,所以您必须在应用程序中进行连接,这通常意味着对数据库的多个请求

相反,您通常希望对数据进行某种程度的非规范化,并可能存储所需字段的副本,以便在较少的往返中满足请求


请参见

首先:与RDBMS不同,mongo中没有这是正确的方法。作出的每一项决定都应以常识为基础。这是描述可能的设计决策的链接:。如图所示,有两种选择: 主提要:

(一)

(二)


它基本上归结为是嵌入(子文档)还是链接(另一个集合文档)


看看每种方法的优缺点。

这篇文章很有帮助。但我仍然感到困惑,好像我在数据表中保留了所有细节(这将是重复信息),我的数据库大小将增加(我可以使用简单的键链接细节并使用连接)。如果只使用键,而我必须应用monngodb不支持的连接,我必须进行额外的db调用**我已经编辑了原稿。现在应该清楚了
masterfeeds:

{ _id: idValue,
    name: nameValue,
    masterFileTypes:[typeId1, typeId2, typeId3]}

masterFileTypes:
  { _id: idValue,
    Type: typeValue,
    masterFeeds:[mfId1, mfId2, mfId3]}
masterfeeds:
      { _id: idValue,
        name: nameValue,
        masterFileTypes: [typeId1, typeId2, typeId3]}

masterFileTypes:
  { _id: idValue,
    Type: typeValue}