2009-05-30 45 views
13

我正在閱讀關於在Entity Framework中使用繼承的可能性。有時候我用數據記錄來輸入數據,我不確定我是否會使用TPT或TPH,或者不使用...實體框架繼承:TPT,TPH還是none?

例如... 我有一個電子商務商店,它增加了運輸,帳單和收貨地址

我有一個地址表:

RecordID 
AddressTypeID 
Street 
ZipCode 
City 
Country 

和表AddressType

RecordID 
AddressTypeDescription 

表設計不同的克erneral設計,當人們炫耀TPT或TPH ... 是否有意義考慮繼承的有任何幫助,這樣的做法..

我希望這是有道理的......

感謝時...

回答

9

當考慮如何在數據庫中表示繼承時,您需要考慮一些事情。

如果你有許多不同的子類,你可以在涉及那些更復雜類型的查詢中有很多額外的連接,這會影響性能。 TPH的一大優勢是,您可以查詢層次結構中所有類型的一個表格,這對於性能尤其重要,特別是對於較大的層次結構。由於這個原因,我傾向於在大多數情況下傾向於這種方法

但是,TPH意味着您不能再有NOT NULL字段的子類型,因爲所有類型的所有字段都在一個表中,將數據完整性的責任推向你的申請。雖然這在實踐中聽起來很可怕,但我還沒有發現這是一個太大的限制。

但是,如果每種類型都有很多字段,並且層次結構中類型的數量可能很少,那麼我傾向於使用TPT,這意味着性能不是聯接的問題,並且您獲得更好的數據完整性。

請注意,EF和其他ORM的優點之一是您可以在不影響應用程序的情況下改變主意,因此決定不需要完全刻在石頭上。

在你的榜樣,但它似乎沒有繼承關係,它看起來像一個從地址種類繁多的地址

這將您的類之間表示類似如下:

Address.AddressType 
AddressType.Addresses 
4

基思暗示,這種暗示article在TPT EF秤可怕的,但我還沒有嘗試過我。

-3

尋找this article。考慮繼承使用的某些方面。

+0

鏈接無效。請更正或刪除此答案 – 2016-09-09 08:53:43