代码之家  ›  专栏  ›  技术社区  ›  Kristoffer

NHiberbate中的标记映射

  •  0
  • Kristoffer  · 技术社区  · 16 年前

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

    public class Question
    {
        // ...
    
        public List<string> Tags;
    }
    

    然而,在数据库中,我可能有这三个表:

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

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   Stefan Steinegger    16 年前

    这取决于:

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

    你可以:

    • 将标记映射为一个实体,并使用一个ID,该ID将被重用。将有一个单独的类(tag)和两个表、一个tag表和一个questiontotag表(如果有其他表,还将为每个tag所有者添加XXXtotag表)。
    • 将标记映射为字符串列表,但不能重复使用。您不需要特殊的类,并且您是每个标签所有者(questiontags)的一个附加表。
    • 将标记映射为单个字符串,并用一些字符(如逗号或空格)分隔。这个没有课也没有桌子。

    在字符串列表中不能有用于几个问题的标记。如果它们应该被重用,那么它们必须是实体。

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

        2
  •  0
  •   Vincent Ramdhanie    16 年前

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