2009-05-30 88 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