NHibernate中的标签映射

时间:2009-11-02 09:46:47

标签: nhibernate tags domain-driven-design

当我在stackoverflow上问这个问题时,我可以为它添加标签。所以,在DDD中,我会有一个类问题,不知何故有标签。建模它的一种方法是使用标签列表,因为标签实际上不是一个实体(或者是它?)。

public class Question
{
    // ...

    public List<string> Tags;
}

但是,在数据库中,我可能会有这三个表:

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

从NHibernate的角度来看,这可能吗?会被推荐吗?你会怎么做?

2 个答案:

答案 0 :(得分:1)

取决于:

  • 您如何创建/更改/删除标签
  • 如何按标签查询标签和问题
  • 你有多少物品,如果你迫切需要表演技巧

你可以:

  • 将标记映射为具有id的实体,该ID将被重用。将有一个单独的类(Tag)和两个表,一个Tag表和一个QuestionToTag表(如果还有其他表,则为每个Tag所有者提供额外的XxxToTag表。)
  • 将标记映射为不重复使用的字符串列表。您不需要特殊的类,并且每个Tag所有者(QuestionTags)都有一个额外的表。
  • 将标签映射为单个字符串,并以某个字符分隔,例如。逗号或空格。没有课程,也没有表格。

您不能在字符串列表中包含标记,这些标记可以在几个问题中重复使用。如果它们应该被重用,它们就必须是实体。

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

答案 1 :(得分:0)

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