2009-11-02 4 views
0

Lorsque je pose cette question sur stackoverflow, je peux y ajouter des balises. Donc, dans DDD, j'aurais une question de classe qui a en quelque sorte des balises. Une façon de le modéliser serait avec une liste d'étiquettes, puisqu'une étiquette n'est pas vraiment une entité (ou est-ce?).Balises mapping dans NHiberbate

public class Question 
{ 
    // ... 

    public List<string> Tags; 
} 

Dans la base de données, cependant, j'aurais probablement ces trois tables:

Question: QuestionID, Title, Content 
Tag: TagID, Title 
QuestionTag: QuestionID, TagID 

Serait-ce possible dans une perspective NHibernate? Serait-il recommandé? Comment le feriez-vous?

Répondre

1

Cela dépend:

  • comment vous créez/changer/balises suppression
  • comment vous interrogez des balises et des questions par les balises
  • combien d'articles que vous avez et si vous avez besoin désespérément des trucs de performance

Vous pouvez:

  • mappe les tags en tant qu'entité, avec un identifiant, qui est réutilisé. Il y aura une classe distincte (Tag) et deux tables, une table Tag et une table QuestionToTag (et une table XxxToTag supplémentaire pour chaque propriétaire de tag s'il y en a d'autres).
  • mapper les tags sous la forme d'une liste de chaînes qui ne sont pas réutilisées. Vous n'avez besoin d'aucune classe spéciale et vous avez une table supplémentaire pour chaque propriétaire de balise (QuestionTags).
  • mapper les étiquettes comme une seule chaîne avec séparés par un certain caractère, par exemple. une virgule ou un espace. Il n'y a pas de classe et pas de table pour ça.

Vous ne pouvez pas avoir d'étiquettes dans une liste de chaînes qui sont réutilisées pour plusieurs questions. Si elles doivent être réutilisées, elles doivent être des entités.

Chaque solution que j'ai proposée a ses avantages et ses inconvénients. Cela dépend de ce qui est le plus important pour vous de dire quelle est la meilleure solution.

0

Alors que ce que vous décrivez est possible, vous pouvez considérer Tag comme une entité. Considérez la situation dans laquelle vous souhaitez afficher une liste de questions pour un tag particulier. Il en résultera donc une relation plusieurs à plusieurs entre l'entité Tag et l'entité Question. La structure de la base de données finira à peu près comme vous l'envisagez.