私はNoSqlを試していますが、探索中に参照データを処理する方法については頭を悩めることはできません。 (私は伝統的なデータベースに慣れていますが、表形式です)教えてください。現在、学生は学校に登録することができ、後で要件を満たすことができます。そこで、学校は学生を探して、どの要件を満たしているかを確認します。NoSqlを参照データに照会する
伝統的なデータベースでは、私は何かをするでしょう。
+---------+ +---------------+ +--------------------+ +---------+
| School | | Requirement | | StudentRequirement | | Student |
+---------+ +---------------+ +--------------------+ +---------+
| Id (PK) | | Id (PK) | | Id (PK) | | Id (PK) |
| Name | | Name | | StudentId (FK) | | Name |
+---------+ | SchoolId (FK) | | RequirementId (FK) | +---------+
+---------------+ | HasComply |
+--------------------+
私は4つのエンティティを作成し、そしてRequirement
はStudent
に多対多の関係を持っています。だから私は編集または削除するかどうかRequirement
私はちょうど中間のテーブルを見ることができます。
のようなフロー何か:私のコード内のどこかに続いて
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
、新しい要件が、私はMongoDBのを使用していNoSQLの中で、私の場合は、今すぐ
// IfNewRequirement
// AddNewRequirementToStudent
を作成された場合、 doc型データストア。私はどこかのデータがインラインであるべきだと読んでいます。以下のような何か:
{
Id: 1,
School: 'Top1 Foo School',
Requirements:
[
{ Id: 1, Name: 'Req1' },
{ Id: 2, Name: 'Req2' }
],
Students:
[
{
Id: 1,
Name: 'Student1',
Requirements:
[
{ Id: 1, Name: 'Req1', HasComply: false },
{ Id: 2, Name: 'Req2', HasComply: true },
]
}
]
},
{
Id: 2,
School: 'Top1 Bar School',
Requirements: [],
Students: []
}
私の文書のルートは上記School
、同じ流れになります。
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
// IfNewRequirement
// AddNewRequirementToStudent
しかし、たとえば、の場合には、学校がRequirement
の名前を編集したり削除することにしましたa Requirement
。
どうすればよいですか?すべての学生をループし、要件を編集/削除する必要がありますか?あるいは、私はそれをすべて間違ってやっているかもしれない。
お知らせください。
私はあなたを正しく理解しているかどうか教えてください。あなたは「学校」と「学生」の2つのコレクションを作成しました。余分な往復がないように、学校の詳細を各生徒に埋め込んでください。今度は、「要件」が追加/更新/削除された場合、すべての学生と学校の記録を繰り返す必要があります。正しい?ちなみに、視覚的な関係のために努力を重ねてくれてありがとうございます –
@BoyPasmoはい正しいです!どういたしまして! – profesor79
また、視覚的な表現に気付きました。あなたは 'requirements'を' student'に埋め込みました。余分な往復のためのものですか?あなたがこれをC#クラスで表現するのであれば。 'publicクラスStudent {public int Id {get;セット; }パブリック文字列名{get;セット; }パブリックストリングSchoolName {get;セット; }パブリックICollection <要件>要件{get;セット; }} 'これはデザインの匂いではありませんか?あるいは、ある種の設定やマッピングがあらかじめありますか? –