构造mongoDB对象数据库

时间:2014-03-30 20:25:48

标签: mongodb database-design object-oriented-database database

我不知道如何在mongoDB中构建这个数据库。 entity relational model recipe database

由于我的关系数据库背景,我认为数据库的结构如下:
2个系列:

  1. 用户
    • 基本道具,包括_id
  2. 食谱
    • 相关信息,如标题,成分等。
    • 对用户文档的引用
  3. 如果我只是将_id从用户(或使用正确的DBRef)扔到uploaded_by字段中以获取配方,则很难进行类似连接的操作。 具体来说,我需要获取所有食谱的用户名。我将返回一个具有以下格式的对象数组:

    {title:'chocolate chip cookies',
    desc:'yummy soft cookies',
    uploaded_by:'john doe'}
    

    为此,我是否必须对每个配方进行查询以根据引用查找用户名,然后返回带有用户名的自定义对象以及其他信息?这听起来太昂贵,让我觉得我应该坚持关系数据库。有没有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

克里斯,

你的想法就是我的建议。

mongodb的强大功能来自于非规范化数据(与规范化数据相比,其目标是最小化冗余)。当您向mongo查询数据时,您只想查询数据库一次,并获取所需的所有内容。如果您需要将数据分布在多个集合中(至少没有我知道的有效方式),那么在mongodb中无法做到这一点。我认为你应该考虑有一个" uploaded_by" 食谱集合中的字段,其中包含上传者的格式化名字/姓氏(如您所述)。您还需要为每个用户(例如,uploaded_recipes)提供一个字段,其中包含每个用户上传的食谱的标识符(或标识符集合)。这样,您就不需要对数据执行连接。这将是" mongodb方式"设置数据库。

要回答持久性问题,需要以不同方式处理处理用户名称更改的过程。实现对用户文档的更改的过程还必须更新" uploaded_by"用户上传的每个食谱的字段(您遍历该用户的uploaded_recipes字段)。这里的想法是,您为插入过程增加了复杂性,以简化和改进对数据库的查询。