2010-11-25 7 views
3

Je développe actuellement une application basée sur le forum (question/réponse).
Utilisation de C# ASP.net MVC et MongoDB pour le stockage de données.Modélisation d'une application de forum NoSQL avec C#/ASP.net MVC

Je suis actuellement en train de regarder le modèle.
Je pensais avoir des classes séparées comme ceci: (simplifié)

public class Question 
{ 
    public string ID { get; set; } 

    public string Title { get; set; } 
    public string Body { get; set; } 
    public List<string> Tags { get; set; } 
    public DateTime DateCreated { get; set; } 

    public string ForumID { get; set; } 
} 

Réponse

public class Answer 
{ 
    public string ID { get; set; } 
    public string QuestionID { get; set; } 
    public string Body { get; set; } 
    public DateTime DateCreated { get; set; } 
} 

Mes questions est:
Comment faire pour gérer les "réponses"
Suis-je mieux d'avoir (comme dans le modèle ci-dessus) deux «entités» distinctes
Ou devrais-je avoir une liste de réponses dans mon modèle Question?

Certaines exigences que je vais avoir besoin d'être en mesure d'afficher un nombre de réponses etc ...

Cela étant stocké dans une base NoSQL, je suis conscient que je devrais dénormaliser les choses, mais comment J'insère une réponse, sans récupérer le message entier? Ce genre d'opération est-il possible en utilisant NoRM avec MongoDB?

Répondre

6

Normalement dans MongoDB, vous devez intégrer les réponses à l'intérieur de la question. 99% du temps que vous allez demander par question, donc vous pourriez aussi bien obtenir les réponses en même temps.

Certaines exigences que je vais avoir besoin d'être en mesure d'afficher un nombre de réponses ...

Si vous ramenons les réponses aux questions, ce qui est vraiment facile. Vous aurez un tableau/liste/collection avec des réponses. Donc vous allez simplement prendre la longueur.

mais comment puis-je insérer une réponse, sans récupérer le poste toute

MongoDB supporte une opération "push $" atomique. Cela signifie que vous pouvez ajouter un élément à un tableau sans charger le document du client. À partir du shell javascript, il ressemblerait à ceci:

db.questions.update({_id : your_id}, { $push : { answers : your_answer_object } });

Alors MongoDB est capable. Vous devrez vérifier avec les pilotes NoRM pour vous assurer qu'ils permettent réellement ce type de comportement (ils manquent vraiment quelque chose s'ils ne supportent pas $ push).

2

La réponse devrait faire partie de la question.

public class Question { chaîne publique ID {get; ensemble; En raison de l'absence de jointures, les bases de documents documentaires vous encouragent à stocker des instances du graphe entier dans un seul document.