因此,這是更好的:
- 一個需要注意的是可以有它不適用於(注意必須說明是爲的預約的引用類型的空引用,但空的類型對於系統中不存在的帳戶/其他對象)
- 複製相同邏輯但避免具有不相關注釋引用的多個註釋類型(AppointmentNote,AccountNote)。
也沒有。另外,我不清楚我們是在談論你的對象還是你的表格。
有一種類型的註釋。它不應該引用它所涉及的對象。
public class Note
{
public DateTime CreatedAt { get; set; }
public string Content { get; set; }
}
public class Account
{
public ICollection<Notes> Notes { get; }
}
public class Appointment
{
public ICollection<Notes> Notes { get; }
}
然後有一對夫婦的方式來鋪陳數據庫表,這兩個應該很容易地與任何ORM支持(雖然不一定容易,以支持一個不真正-AN-ORM,但-half-look-like-one,例如Linq2SQL或SubSonic,可爲每個數據庫表生成類的工具)。
首先DB佈局:
TABLE Notes
(
Id,
CreatedOn,
Content,
AccountId,
AppointmentId
)
那麼,如果n-1外鍵爲空。這是每級類型的平行式樣式,它被接受爲對某些子類無效且無意義的列。
方法二:
TABLE Notes
(
Id,
CreatedOn,
Content
)
TABLE AccountNotes
(
AccountId,
NoteId
)
TABLE AppointmentNotes
(
AppointmentId,
NoteId
)
,這將是更多的表,每級的佈局。沒有人說你實際上需要在代碼中使用子類註釋類型 - 但即使你這樣做了,爲了避免「打擊你的工具」,它並不意味着邏輯的重複 - 只需使用基本類型並將你的行爲放在那裏。
最後,你將不得不選擇。關於預約的說明與賬戶記錄本質上不同,你將不得不在某個層面上處理它。
爲了讓持久對象發生這種情況,Note將爲n-1個字段(其中n是可以在其上註釋的對象的數量)具有空fkeys。這是我用第一種方法解決問題的關鍵。多重性是'預約/賬戶1 - *注' – 2010-11-18 18:36:17
@SnOrfus:也許我沒有看到關於你的ORM的東西(或者我可能只是休息一天)。但至少從領域的角度來看,讓對象帶着適用於他們的筆記似乎是有意義的。除非有一種情況,一個人從一張紙條開始,需要找到其父母?我認爲筆記會是第一流的父對象的二等加載項。爲什麼筆記需要參考他們的父母? – David 2010-11-18 18:46:19