2009-11-02 76 views
0

当我在stackoverflow上提出这个问题时,我可以给它添加标签。所以,在DDD中,我会有一个类问题,以某种方式有标签。模型化的一种方法是使用标签列表,因为标签不是真正的实体(或者它是什么?)。NHiberbate中的标签映射

public class Question 
{ 
    // ... 

    public List<string> Tags; 
} 

在数据库中,但是,我想可能有以下三个表:

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

这将是可能从NHibernate的观点?会推荐吗?你会怎么做?

回答

1

这取决于:

  • 你如何创建/更改/删除标签
  • 如何查询由标签标签和问题
  • 你有多少条目,如果你迫切需要的性能技巧

,你可以:

  • 将标签映射为一个实体,并使用一个可重用的标识。将会有一个单独的类(Tag)和两个表格,一个Tag表格和一个QuestionToTag表格(如果还有其他标签,则每个Tag所有者都会附加一个XxxToTag表格)。
  • 将标签映射为不重用的字符串列表。您不需要特殊的课程,并且每个标签所有者(QuestionTags)都是一个额外的表格。
  • 将标签映射为由某个字符分隔的单个字符串,例如。逗号或空格。这里没有课程,也没有桌子。

您不能在重复使用几个问题的字符串列表中有标签。如果他们应该被重用,他们需要成为实体。

我提出的每个解决方案都有其优点和缺点。这取决于哪个解决方案最好,哪个最重要。

0

虽然你所描述的是可能的,你可能想要考虑标签作为一个实体。考虑您想要显示特定标签问题列表的情况。因此它会导致Tag实体和Question实体之间的多对多关系。数据库结构将以您设想的方式结束。