経験豊富な人 (または私よりも優れたアイデアを持っている人) が、私の特定のモデリング シナリオにどのように取り組むのか疑問に思っています...
典型的な "Category -> SubCategory -> TertiarySubCategory" シナリオがあり、それを正しくマッピングしているかどうかわかりません。レイヴンはこれに適しているように見えるので、これを MVC ルートに直接マッピングしています。最後のカテゴリ (1 番目、2 番目、または 3 番目のレベルにある可能性があります) の下には、カテゴリのそのレベルのみに関連付けられたアイテムのリストがあります。したがって、次のようなものがあります。
単一レベルのカテゴリ: '/Politics/'
第 2 レベルのカテゴリ: 「政治/人々」または「政治/ウェブサイト」
3 段階のカテゴリ: 「スポーツ/プロ/バレーボール」または「スポーツ/大学/フットボール」
従来の RDBMS では、これは主キー/外部キー + いくつかの結合によって簡単に実現できます。
私が読んだことから、「sports/pro/volleyball」のURIまたはキー全体を、その下にあるアイテムのリストに保存する必要がありますか?
すなわち -
public class CategoryItem
{
public string FriendlyName {get;set;} // Volleyball or Pro Volleyball
public string CategoryURI {get;set;} // i.e. - "/sports/pro/volleyball/"
public string content {get;set;} // i.e. - "Who is the best Pro Volleyball Athlete?"
public List<string> Comments {get;set;}
}
// then we could store something like this:
var survey1 = new CategoryItem();
survey1.CategoryURI = "/sports/pro/volleyball/"
survey1.Content = "Who is the best female pro volleyball player?";
survey1.Comments.Add(new Comment("Misty May"));
var survey2 = new CategoryItem();
survey2.CategoryURI = "/sports/pro/volleyball/";
survey2.Content = "Who is the best male pro volleyball player?";
survey2.Comments.Add(new Comment("Some guy I don't kow");
// asuumes ravenSession was alreadyopened...
ravenSession.Store(survey1);
ravenSession.Store(survey2);
ravenSessoin.SaveChanges();
//{ ...... etc ..... }
//Then I can query by CategoryURI without needing joins (denormalization).... i.e. -
var items = session.Query<CategoryItem>()
.Where(x => x.CategoryURI == "/sports/pro/volleyball/");
それとも、実際のカテゴリ クラスのリスト アイテム メンバーを作成する必要がありますか? 各アイテムには独自のコメントのリストがあります...つまり、すべてがRaven内の単一のドキュメントに保存されます-つまり-
public class Category
{
public string FriendlyName {get;set;} // i.e. - "Volleyball" or "Pro Volleyball"
public string URI {get;set;} // i.e. - "/sports/pro/volleyball" which is the MVC path
public List<CategoryItem> Items {get;set;}
}
public class CategoryItem
{
public string Content {get;set;}
public List<string> Comments {get;set;}
}
var vballCat = new Category();
vballCat.FriendlyName = "Pro Volleyball";
vballCat.URI = "/sports/pro/volleyball/"; // equivalent to the MVC route
var catItem = new CategoryItem().
catItem.Content = "Who is the best male pro volleyball player?";
catItem.Comments.Add("Misty May");
catItem.Comments.Add("Some Guy 1");
vballCat.Items.Add(catItem);
ravenSession.Store(vballCat);
ravenSession.SaveChanges();
.....ここで、最初の猫、つまり「/sports/pro/volleyball/」を引っ張ると、必要なものはすべてその下にあります
var items = session.Query<Category>()
.Where(x => x.URI == "/sports/pro/volleyball/");
{ …………など …… }
ここで、Items コレクションを反復処理できます。これはコメントのコレクションです。これは熱心な読み込みを使用しますか? 1 つのカテゴリ アイテムに 100 万件のコメントがあった場合はどうなりますか? メイン カテゴリを読み込むと、100 万件のコメントもすべて読み込まれます!?!?
ご協力いただければ幸いです。この例/質問が不明確な場合は申し訳ありません...必要に応じて何かを明確にしようとします。再度、感謝します!