web-dev-qa-db-ja.com

MongoDBを使用してリレーショナルデータベースを作成できますか?

MongoDBを使った学生管理システムを作ります。学生用のテーブルと出席記録用のテーブルを用意します。下の写真のように、出席者のテーブルに鍵を置いて生徒のテーブルにアクセスできますか?どうやって?

diagram of a relational database

28
İlker Dağlı

MongoDBの背後にある考え方は、リレーショナルデータを排除する(または少なくとも最小限に抑える)ことです。出席データを各生徒の記録に直接埋め込むことを検討しましたか?これは実際にはMongoDBの推奨設計パターンであり、パフォーマンスとスケーラビリティが大幅に向上します。

非常にリレーショナルで正規化されたデータが本当に必要な場合は、MongoDBの使用を再検討する必要があります。

35

答えは、データの使用方法によって異なります。出席表を埋め込むか、リンクするかの2つのオプションがあります。これらのアプローチの詳細については、ここで詳しく説明します。 http://www.mongodb.org/display/DOCS/Schema+Design

一般的なユースケースでは、おそらくこの特定のコレクションを埋め込むので、各生徒のレコードには「出席」テーブルが埋め込まれます。出席記録が学生間で共有される可能性は低く、出席データを取得するには学生情報も必要になる可能性が高いため、これは機能します。出席データの取得は次のように簡単です。

db.student.find( { login : "sean" } )
{
  login : "sean",
  first : "Sean", 
  last : "Hodges",
  attendance : [
    { class : "Maths", when : Date("2011-09-19T04:00:10.112Z") },
    { class : "Science", when : Date("2011-09-20T14:36:06.958Z") }
  ]
}
19
seanhodges

はい。厳格なルールはありません。データを埋め込むか、参照することの長所と短所を調べる必要があります。このビデオは間違いなく役立ちます( https://www.youtube.com/watch?v=-o_VGpJP-Q0&t=21s )。この例では、人の電話番号はめったに変更されないため、電話番号属性は(ドキュメントデータベースの)同じテーブルにある必要があります。

1
Prince Owen