想知道一些更有经验的人(或任何比我有更好想法的人)将如何处理我的特定建模场景......
我有一个典型的“Category -> SubCategory -> TertiarySubCategory”场景,我不确定我是否正确映射它。我将它直接映射到 MVC 路由,因为 raven 似乎很适合这个。在最终类别下(可以在第一、第二或第三级别,将有一个仅与该类别级别相关联的项目列表。所以,我们可能有类似的内容:
单级类别:'/政治/'
第二级类别:“政治/人”或“政治/网站”
三级类别:“体育/职业/排球”或“体育/大学/足球”
在传统的 RDBMS 中,这很容易通过主键/外键 + 一些连接......所以,想知道我将如何处理 Raven?
根据我的阅读,我应该将整个“体育/职业/排球”URI 或密钥存储在属于它的项目列表中吗?
IE -
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/");
{ ............. ETC ............... }
现在在这里我可以遍历 Items 集合和它的评论集合....这是否使用急切加载?如果我在一个类别项目下有一百万条评论怎么办?当我加载主要类别时,它也会加载所有一百万条评论!?!?
我将不胜感激您能提供的任何帮助。对不起,如果这个例子/问题不清楚......如果你们需要,我会尽力澄清任何事情。再次感谢!