NHiberbate中的标签映射
问题描述:
当我在*上提出这个问题时,我可以给它添加标签。所以,在DDD中,我会有一个类问题,以某种方式有标签。模型化的一种方法是使用标签列表,因为标签不是真正的实体(或者它是什么?)。NHiberbate中的标签映射
public class Question
{
// ...
public List<string> Tags;
}
在数据库中,但是,我想可能有以下三个表:
Question: QuestionID, Title, Content
Tag: TagID, Title
QuestionTag: QuestionID, TagID
这将是可能从NHibernate的观点?会推荐吗?你会怎么做?
答
这取决于:
- 你如何创建/更改/删除标签
- 如何查询由标签标签和问题
- 你有多少条目,如果你迫切需要的性能技巧
,你可以:
- 将标签映射为一个实体,并使用一个可重用的标识。将会有一个单独的类(Tag)和两个表格,一个Tag表格和一个QuestionToTag表格(如果还有其他标签,则每个Tag所有者都会附加一个XxxToTag表格)。
- 将标签映射为不重用的字符串列表。您不需要特殊的课程,并且每个标签所有者(QuestionTags)都是一个额外的表格。
- 将标签映射为由某个字符分隔的单个字符串,例如。逗号或空格。这里没有课程,也没有桌子。
您不能在重复使用几个问题的字符串列表中有标签。如果他们应该被重用,他们需要成为实体。
我提出的每个解决方案都有其优点和缺点。这取决于哪个解决方案最好,哪个最重要。
答
虽然你所描述的是可能的,你可能想要考虑标签作为一个实体。考虑您想要显示特定标签问题列表的情况。因此它会导致Tag实体和Question实体之间的多对多关系。数据库结构将以您设想的方式结束。