2011-08-25 6 views
1

Je suis très novice en ce qui concerne NoSQL et j'essaie d'en faire le tour. À titre d'exemple, j'essaie de concevoir un schéma pour un blog simple qui a des auteurs qui ont des messages, qui ont des commentaires. Comme si:MongoDB: Conception de schéma efficace avec des documents intégrés

Author 
name : String, 
email : String, 
posts : [Post] 

Post 
title : String, 
body : String, 
comments : [Comment] 

Comment 
commenter : String, 
comment : String 

Cela semble être le moyen le plus normalisé pour concevoir le schéma. Cela fonctionne très bien quand je veux obtenir une liste des publications d'un auteur, mais je rencontre des problèmes lorsque j'essaie d'interroger un article par son titre. Ceci renvoie l'objet auteur et tous les messages de cet auteur. Je peux alors rechercher les messages pour celui que je veux, mais cela semble inefficace.

Quelle est la manière la plus efficace de gérer ce type de schéma? Devrais-je seulement avoir un objet Posts et faire de l'auteur un champ (ou un doc incorporé) dans l'objet Post? Ou peut-être qu'il est préférable de stocker les données dans plusieurs endroits?

J'ai passé tant d'années à essayer de normaliser les bases de données relationnelles que je n'arrive pas à penser de la manière NoSQL. Tout avis sera le bienvenu.

Répondre

0
Post 
title: String 
author: String 
comment: String 
posted: Date 

Author 
name: String 
email: String 

Si le « noyau » de votre modèle est ici le poteau alors pourquoi ne pas faire ainsi, numéro un. Vous pouvez rechercher des publications par titre, par auteur et par date.

0

La dénormalisation ne signifie pas que les clés étrangères sont interdites.

Je pense que vous devriez certainement avoir une référence à votre auteur par Id. Cependant, et c'est là que la dénormalisation arrive, vous voulez stocker le nom de l'auteur dans le Authoret dans les objets Post. De cette façon, vous n'avez pas besoin de rejoindre les collections Author et Post.

Post 
    title: string 
    body: string 
    authorName: string 
    authorId: [id of author] 
    comments: list of [Comment] 
    created: date 
    modified: date 

Author 
    name: string 
    email: string 

Comment 
    subject: string 
    body: string 
    author: string (if you want anon comments) 
Questions connexes