Vous vous demandez comment certains des plus expérimentés (ou toute personne ayant une meilleure idée que moi) traiterait de mon scénario de modélisation particulier ...Modélisation Question pour RavenDB (ou d'autres bases de données orientées doc)
J'ai un typique " Catégorie -> SubCategory -> TertiarySubCategory "scénario et je ne suis pas sûr si je suis mappage correctement. Je suis en train de cartographier ceci directement sur une route MVC puisque le corbeau semble se prêter bien à cela. Dans la catégorie finale (qui peut être au premier, deuxième ou troisième niveau, il y aura une liste d'éléments associés uniquement à ce niveau d'une catégorie.) Nous pourrions avoir quelque chose comme:
Catégorie de niveau unique: '/ Politique/»
Deuxième catégorie de niveau: 'Politique/gens' ou 'Politique/Sites'
Tri niveau catégorie: 'sports/Pro/volley-ball' ou 'sports/Collège/Football'
Dans un SGBDR traditionnel, c'est facile avec les clés primaires/étrangères + quelques jointures ... alors, je me demande comment je pourrais gérer avec Raven?D'après ce que j'ai lu, devrais-je stocker l'intégralité de l'URI ou de la clé 'sports/pro/volleyball' dans une liste d'éléments qui en relèvent?
à savoir -
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/");
Ou devrais-je créer une liste des articles membre de la classe de catégorie réelle? Chaque élément aurait une liste de ses propres commentaires ... ce qui signifie que tout est stocké dans un seul document au sein de Raven - à savoir -
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();
..... maintenant une fois que je tire le chat-à-dire primaire - «/sports/pro/volley-ball/»J'ai tout ce que je dois déjà il
var items = session.Query<Category>()
.Where(x => x.URI == "/sports/pro/volleyball/");
{............. etc ............... }
Maintenant, je peux juste itérer à travers la collection d'articles et c'est collection de commentaires .... est-ce que cela utilise le chargement impatient? Que faire si j'ai eu un million de commentaires sous un item de catégorie? Quand je charge la catégorie principale, est-ce qu'elle charge tous les commentaires d'un million?!?
J'apprécierais toute aide que vous pouvez fournir. Désolé si cet exemple/question n'est pas clair ... Je vais essayer de clarifier quelque chose si vous en avez besoin. Merci encore!
Ok, c'est logique. Donc, dans le deuxième exemple, disons que j'ai une catégorie avec 500 éléments chacun avec 500 - 1000 commentaires, ce qui représente un total de 250k - 500k ...Qu'est-ce que tu penses? Utilisez la première option? – bbqchickenrobot