代码之家  ›  专栏  ›  技术社区  ›  Acy

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

  •  0
  • Acy  · 技术社区  · 7 年前

    数据库noob在这里使用MongoDB,在我的程序中,我有用户,我的程序的核心是我显示的这些路线图。所以,每个用户都可以创建路线图,保存其他路线图,等等。。。每个用户都有一个名为savedRoadmaps和createdRoadmaps的字段,该字段应存储路线图。我的问题是,我应该将路线图id存储在savedRoadmap和createdRoadmaps字段中还是整个路线图?

    我这么问是因为感觉只保存路线图的id可以节省存储空间,但是如果我必须先获取用户的数据,然后使用用户的savedRoadmap/createdRoadmap字段中的路线图id获取路线图,那么它可能不会派上用场,而仅仅获取用户和savedRoadmap字段就已经有了路线图。

    顺便问一下,有没有什么甜蜜和简短的数据库设计宣读,请直接给我一些,如果你知道!

    对于用户,我希望它有一个名称、电子邮件、密码、课程描述,以及savedRoadmaps和createdRoadmaps。用户可以创建无限的路线图,也可以随心所欲地节省开支。对于路线图,我希望它有一个名称、类别、完成时间、作者、日期和一个包含实际json字符串的路线图对象,我将使用d3来显示它。下面是我的用户和路线图模式:


        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字符串?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Atish    7 年前

    有3种不同的数据建模技术可用于根据 users roadmaps .

    通常,您需要基于 在应用程序中预期的查询上

    • 一对几:
    • 一对多: 如果基数是一对多,或者由于任何原因N-side对象应该独立,则使用对N-side对象的引用数组
    • :如果基数是对压扁值的一,则在N面对象中使用对一侧的引用

    顺便问一句,有没有什么甜蜜而简短的数据库设计, 如果你知道的话,请告诉我一些!

    Rules of Thumb for MongoDB Schema Design: Part 1