5

DocumentDb で、データを分離して別のコレクションに保存するための最良の方法と場所は何ですか?

これまでのところ、DocumentDb を使用してデータを管理する方法の例のほとんどは単純なオブジェクトを使用していますが、実際にはほとんど使用していません。DocumentDb に Json オブジェクトとして保存する前に、複雑なクラスを処理する方法と場所を理解したいだけです。

次の例を見てみましょう。プロジェクト情報を Projects コレクションに保存しますが、プロジェクト チームのメンバーのフル ネームをプロジェクト ドキュメント内に保存したくありません。EmployeeId をプロジェクト ドキュメントに保存したいだけです。個人/従業員固有の情報を保存する別の Employees コレクションがあります。私のプロジェクト オブジェクトは次のようになります。

public class Project
{
   [JsonProperty(PropertyName="id")]
   public int ProjectId {get; set;}

   [JsonProperty(PropertyName="projectName")]
   public string ProjectName {get; set;}

   [JsonProperty(PropertyName="projectType")]
   public string ProjectType {get; set;}

   [JsonProperty(PropertyName="projectTeam")]
   public List<TeamMember> ProjectTeam {get; set}
}

私の TeamMember クラスは Employee オブジェクトから継承され、次のようになります。

public class TeamMember : Employee
{
   [JsonProperty(PropertyName="position")]
   public string Position {get; set;}
}

私の従業員クラスは次のようになります。

public class Employee
{
   [JsonProperty(PropertyName="id")]
   public int EmployeeId {get; set;}

   [JsonProperty(PropertyName="firstName")]
   public string FirstName {get; set;}

   [JsonProperty(PropertyName="lastName")]
   public string LastName {get; set;}

   [JsonProperty(PropertyName="gender")]
   public string Gender {get; set;}

   [JsonProperty(PropertyName="emailAddress")]
   public string EmailAddress {get; set;}
}

Projects コレクションに保存する前の Project ドキュメントの例を次に示します。

{
   id: 12345,
   projectName: "My first project",
   projectType: "Construction Project",
   projectTeam: [
      { id: 7777, position: "Engineer" },
      { id: 8998, position: "Project Manager" }
   ]
}

ご覧のとおり、プロジェクト情報を従業員データから切り離して、それぞれ独自のコレクションである Projects コレクションと Employees コレクションに格納しました。

なぜデータを切り離すべきなのか、あるいは切り離すべきなのかについては触れません。最速の結果を得るために、デカップリングをどこでどのように処理する必要があるかを確認したいだけです。ベスト プラクティスに従いたいので、DocumentDb を扱う専門家がこのシナリオをどのように処理するかを知りたいだけです。

これを処理する 2 つの場所を考えることができますが、これを行うためのより良い、より直接的な方法があるかどうかを理解したいと思います。

  1. C# コード内で Project クラスを JSON オブジェクトに変換し、JSON オブジェクトを DocumentDb に渡して保存することができます。
  2. または、Project オブジェクトを直接 DocumentDb の JavaScript ストアド プロシージャに渡し、DocumentDb 内の 2 つ以上のコレクションにデータを分離して格納することもできます。

知りたいことは次のとおりです。

  1. デカップリング データを処理するのに適切な場所はどれですか?
  2. どちらがより良いパフォーマンスを提供しますか?
  3. これを処理するより良い方法はありますか?POCOクラスをDocumentDbに渡すだけで、それらを処理してくれる方法について読み続けています。DocumentDb は、このより複雑なシナリオを処理できますか? もしそうなら、どのように?

私はあなたの助けに感謝します。ありがとうございました。

4

1 に答える 1