我有很多表:客戶,潛在客戶,朋友..
他們都有一些註釋。實現許多實體的Notes表的最佳方式SQL中的表
問題1: 我是否應該有一個與所有父表共享的Notes表。
或
我應該有一個NotesCustomer,NotesProspects,NotesFriends表嗎?
問題2:
如果最好的解決方案是第一個,那麼這個一般的Notes表應該有一個FK到父表,但也是父表的類型?
我使用的EntityFramework,但這個問題也一般我猜...
感謝 喬恩
我有很多表:客戶,潛在客戶,朋友..
他們都有一些註釋。實現許多實體的Notes表的最佳方式SQL中的表
問題1: 我是否應該有一個與所有父表共享的Notes表。
或
我應該有一個NotesCustomer,NotesProspects,NotesFriends表嗎?
問題2:
如果最好的解決方案是第一個,那麼這個一般的Notes表應該有一個FK到父表,但也是父表的類型?
我使用的EntityFramework,但這個問題也一般我猜...
感謝 喬恩
第一個選項是最好的註釋表與所有的人分享。
可以使用兩個字段notes_obj_id和notes_obj_type實現表一般注意事項
第一個選項,爲潛在客戶,客戶和朋友們的獨特表的注意事項,可能是一個清晰的解決方案。
如果您使用一般筆記表,您需要有三個可爲空的FK列來確定FK屬於哪個相關表,並且每行只填充其中一個。
一般而言,良好的關係模型的目標不是(或不一定)將類似數據存儲在一起,而只存儲一次特定數據。所以在設計這個問題時問自己一個很好的問題是「我將所有筆記存儲在同一個表中,從而獲得了什麼?」
我會直覺地喜歡一個表的方法,但它也有它的缺點。 Pro one-table:如果您需要更改其結構,則創建具有相同結構的多個表格可能會很痛苦。此外,只要您查詢註釋而不是邏輯上更簡潔的「type」參數,就必須爲表名添加一個變量。但是,菲爾的觀點也很有趣。您也可能發現單表佈局可能最終會導致只能使用SQL無法輕鬆查詢的數據庫。如果您要獲取大量數據,使用不同的表格也會帶來速度差異。
嗯。一個非常乾淨但也有點複雜的解決方案是創建一個表NotableObject。然後給每個客戶,潛在客戶,任何字段「NotableObjectID」,並將註釋鏈接到NotableObjects,而不是客戶或潛在客戶。當然,如果你想要「給我所有的客戶注意事項」這樣的話,這會使事情變得複雜化,因爲你明確地只存儲客戶提供的信息而不是反向的信息,但是因爲大多數時候你會遇到更像「給我這個客戶的所有筆記「,你可能會沒事的。
您應該只有一個Notes表。關係從Notes流向其他實體(它是0:M),因此不需要在Notes表級別具有FK列。在Notes表上,向展望,客戶,朋友提供的FK列只會導致一個設計,在每次新實體需要Notes時都需要不斷添加FK列到Notes表中(並且這並不能真正加快速度) 。
E.g.如果你想獲得的所有展望筆記列表,只需要查詢的展望臺,並使用一個連接,如果你必須得到說明詳細介紹:
select n.NoteId, n.NotesDetail from Prospect p inner join Notes n
on p.NoteId = n.NoteId
你的注意事項表可能類似於此:
create table Notes
(
NoteId int identity(1,1)
,NotesDetail varchar(max)
// ... any other fields related to the Notes entity....
)
在其他表上,您只需要一個字段FK鏈接到Notes表上的NoteId。
如果每個相關實體需要多個註釋,則不需要。如果每個實體需要一個音符,則沒有理由首先有單獨的Notes音符表。 – 2010-08-27 15:45:28
@Phil,同意,如果每個實體有多個註釋,則需要一個連接表。我不同意通過非規範化連接表來實際包含註釋。 – code4life 2010-08-27 16:31:21
我的意思是:如果每個實體只有0-1個註釋,則只需將註釋存儲在主實體表中,不需要額外的表。 IOW,客戶表將會有一個名爲「Note」的列。我不清楚你的反規範化連接表的含義。 – 2010-08-27 17:49:21
我意識到這是舊的,但..
這將允許多個筆記。
select n.NoteId, n.NotesDetail from Prospect p inner join Notes n
on n.EntityId = p.id AND n.EntityType ='prospect'
2個答案(菲爾和ritesh)正好說相反! – John 2010-08-27 13:28:42
等一天,看看upvotes說什麼。 – 2010-08-27 13:54:40
(8月30日)我休息我的情況。 – 2010-08-30 14:04:23