簡體   English   中英

在MongoDB中建模多對多關系

[英]Modelling many-to-many relationships in MongoDB

我在為學校應用程序設計構架時遇到困難。

特別是,我正在嘗試使用他們所屬的課程和教程來模擬不同類型的用戶(例如,講師,助教和學生)之間的關系。

這是我的要求:

  1. 每門課程將有一對多的教程;
  2. 每門課程將由一對多的講師講授;
  3. 每門課程將有一對多的學生;
  4. 每個教程將有一對多的助教;
  5. 每位講師將教授一對多的課程;
  6. 每個助教在一對多的課程中可能有一對多的教程;
  7. 每個學生將參加一對多的課程;
  8. 每個學生在其所注冊的課程中可能屬於一個教程;

到目前為止,以下是我針對用戶,課程和教程集合的架構。

var CourseSchema = new mongoose.Schema({
    name: { type: String, required: true },
    code: { type: String,  required: true },
    tutorials: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tutorial' }], // 1
    instructors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], // 2
    students: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] // 3
});

var TutorialSchema = new mongoose.Schema({
    number: { type: String, required: true },
    teachingAsst: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] // 4
});

var UserSchema = new mongoose.Schema({
    email: { type: String, lowercase: true },
    password: String,
    name: {
        first: { type: String, lowercase: true },
        last: { type: String, lowercase: true }
    },
    roles: [String] // instrutor, teachingAsst, student
};

問題出在我的5到8的要求上-更重要的是從用戶到其他模型的關系。 建模這些關系的好方法是什么?

我想到的一種方法是,例如要求5是向User模式添加一個字段

    instructor: {
        courses: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Course' }]
    }

但是,當我執行第6項要求時,也會發生問題,類似地,因為它會使查詢復雜化(例如“在用戶是助教的課程中查找所有教程”)。

    teachingAsst: {
        courses: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Course' }]
        tutorials: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tutorial' }]
    }

就您而言,設計是多對多的關系。 因此,您有兩種解決方法。

  1. 參考文件
  2. 嵌入式文件

嵌入式方法將具有難以更新和刪除的重復數據,這是因為由於單個查詢,讀取操作將非常有效。

如果是參考方法,您的數據將被貶低。 因此,更新和刪除操作將很容易,因為讀取操作將對數據庫產生多次命中。

因此,根據您的應用程序要求,您必須確定適當的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM