Интересно, как некоторые из более опытных (или кто-то с лучшей идеей, чем у меня) будут решать мой конкретный сценарий моделирования ...
У меня есть типичный сценарий "Категория -> Подкатегория -> TertiarySubCategory"и я не уверен, правильно ли я это планирую.Я сопоставляю это непосредственно с маршрутом MVC, так как ворон, кажется, вполне подойдет для этого.В последней категории (которая может быть на первом, 2-м или 3-м уровнях будет список элементов, связанных только с этим уровнем категории. Таким образом, мы можем иметь что-то вроде:
Категория одного уровня:'/ Политика /'
Категория второго уровня: «Политика / Люди» или «Политика / Веб-сайты»
Категория трехуровневая: «Спорт / Pro / волейбол» или «Спорт / колледж /»Футбол '
В традиционной СУБД это легко сделать с помощью первичных / внешних ключей + нескольких соединений ... так что, интересно, как бы я справился с 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/");
Или мне следует создать элемент списка элементов спискаФактический класс категории? Каждый элемент будет иметь список своих собственных комментариев ... это означает, что все хранится в одном документе в 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();
..... теперь, когда я вытащу основной котт.е. - "/ спорт / про / волейбол /" у меня всеg Мне нужно уже под ним
var items = session.Query<Category>()
.Where(x => x.URI == "/sports/pro/volleyball/");
{............. и т. д. ...............}
Теперь здесь я могу просто перебрать коллекцию Предметов и ее коллекцию комментариев .... Использует ли это нетерпеливую загрузку?Что если бы у меня было миллион комментариев под одной категорией?Когда я загружу основную категорию, она также загрузит все миллион комментариев!?!?
Буду признателен за любую помощь, которую вы можете оказать.Извините, если этот пример / вопрос неясен ... Я постараюсь уточнить что-нибудь, если вам это нужно.Еще раз спасибо!