数据库设计-将整个对象保存给用户还是对象的ID?

时间:2019-02-16 15:34:09

标签: mongodb database-design

这里使用MongoDB的

database noob,在我的程序中,我有用户,而我程序的核心是这些显示的路线图。因此,每个用户都可以创建路线图,保存其他路线图,等等...每个用户都有一个名为saveRoadmaps和createdRoadmaps的字段,应存储路线图。我的问题是,我应该只将路线图_ids存储在savedRoadmap和createdRoadmaps字段中还是整个路线图中?

我之所以这样问,是因为感觉只保存路线图的_id可以节省存储空间,但是当我必须先获取用户的数据,然后使用中的路线图ID来获取路线图时,可能不会派上用场用户的saveRoadmap / createdRoadmap字段,而不是仅提取用户,并且saveRoadmap字段将已经在其中包含了路线图。

顺便说一句,那里有没有读出来的甜美简短的数据库设计,如果您知道的话,请直接给我看!

对于用户,我希望它具有名称,电子邮件,密码,课程说明,以及saveRoadmaps和createdRoadmaps。用户可以创建无限的路线图,还可以节省他或她想要的钱。对于路线图,我希望它具有名称,类别,time_completion,作者,日期和路线图对象,其中将包含将使用d3显示的实际json字符串。现在是我的用户和路线图架构:


    const RoadmapSchema = new Schema({
  author: {
    type: String,
    require: false
  },
  name: {
    type: String,
    require: true
  },
  category: {
    type: String,
    require: true
  },
  time_completion: {
    type: Number,
    require: true
  },
  date: {
    type: Date,
    default: Date.now
  },
  roadmap: {
    type: "object",
    require: true
  }
});

和用户架构:

    const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  },
  savedRoadmap: {
    type: "object",
    default: []
  },
  createdRoadmap: {
    type: "object",
    default: []
  }
});

我的问题是,在用户架构的savedRoadmap和createdRoadmap字段中,我应该只包含路线图的_id还是应该包含代表路线图的整个json字符串? < / p>

1 个答案:

答案 0 :(得分:1)

根据usersroadmaps之间关系的基数,可以使用3种不同的数据建模技术来设计路线图系统。

通常,您需要基于根据应用程序预期的查询对数据模型进行归一化

  • 很少使用:如果基数是一对,并且不需要在父对象的上下文之外访问嵌入式对象,则嵌入N面
  • 一对多:如果基数是一对多或由于任何原因N边对象应该独立存在,请使用对N边对象的引用数组>
  • 一对数:如果基数为一对数,则在N侧对象中使用对一侧的引用
  

顺便说一句,那里有没有任何甜美而简短的数据库设计,   如果您知道的话,请把我带给一些!

Rules of Thumb for MongoDB Schema Design: Part 1