想知道如何一些更有經驗(或者用一個更好的想法比我的人)將解決我的特殊造型的場景......建模質疑RavenDB(或其他文檔面向數據庫)
我有一個典型的「類別 - >子類 - > TertiarySubCategory「的情況下,我不知道我是否正確地映射出來。我將這個直接映射到MVC路由,因爲烏鴉似乎很適合這個。在最後一個類別(可以是第一,第二或第三級別)下,會有一個與只有該級別的項目相關聯的項目列表。因此,我們可能會有這樣的內容:
單級別類別:'/政治/」
第二級類別: '政治/人' 或「政治/網站的
三級別分類:體育版/專業版/排球'或 '體育/大學/足球'
在傳統的RDBMS中,通過主鍵/外鍵+幾個連接很容易...所以,想知道我將如何處理Raven?
從我讀過的內容中,我應該將整個'體育/職業/排球'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/");
或者我應該創建實際的類類的列表項成員?每個項目將有它自己的評論列表...這意味着一切都存儲在其中烏鴉在一個文檔中 - 即 -
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();
.....現在我一次拉一次貓即 - 「/運動/親/排球/「我擁有我需要的一切
var items = session.Query<Category>()
.Where(x => x.URI == "/sports/pro/volleyball/");
{.............等............... }
現在,我可以迭代Items集合,它是註釋的集合....這是否使用急切的加載?如果我在一個類別項目下有一百萬條評論,該怎麼辦?當我加載主類別時,它也會加載所有100萬條評論!?!?
我希望你能提供任何幫助。對不起,如果這個例子/問題不清楚......如果你們需要的話,我會試着澄清一下。再次感謝!
好的,有道理。因此,在第二個例子中,假設我有一個500個項目的類別,每個項目有500 - 1000個註釋,總計爲250k - 500k ...你怎麼看?使用第一個選項? – bbqchickenrobot 2011-06-02 21:40:12