2009-11-02 77 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實體之間的多對多關係。數據庫結構將以您設想的方式結束。