实体框架继承:TPT、TPH 还是无?

2024-03-22

我目前正在阅读有关在实体框架中使用继承的可能性。有时我使用一种方法来输入数据记录,但我不确定是否会使用 TPT 或 TPH 或不使用...

例如... 我有一家电子商务商店,其中添加了送货、账单和送货地址

我有一个地址表:

RecordID
AddressTypeID
Street
ZipCode
City
Country

和一张桌子AddressType

RecordID
AddressTypeDescription

当人们炫耀TPT和TPH时,桌子的设计与一般设计不同...... 当采用这样的方法时,考虑继承是否有意义?

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

谢谢你的帮助...


当考虑如何在数据库中表示继承时,您需要考虑一些事情。

如果您有许多不同的子类,则在涉及那些更复杂类型的查询中可能会有很多额外的联接,这可能会损害性能。 TPH 的一大优点是您可以在一张表中查询层次结构中的所有类型,这对性能有好处,特别是对于较大的层次结构。因此,在大多数情况下我倾向于采用这种方法

然而,TPH 意味着您不能再拥有NOT NULL子类型的字段,因为所有类型的所有字段都在一个表中,从而将数据完整性的责任推给您的应用程序。尽管这在实践中听起来很可怕,但我还没有发现这是一个太大的限制。

但是,如果每种类型都有很多字段,并且层次结构中的类型数量可能很小,那么我倾向于使用 TPT,这意味着连接的性能并不是太大的问题,并且您会变得更好数据的完整性。

请注意,EF 和其他 ORM 的优点之一是您可以在不影响应用程序的情况下改变主意,因此不需要完全一成不变。

在您的示例中,它似乎没有继承关系,从地址类型到地址看起来像是一对多

这将在您的类之间表示,如下所示:

Address.AddressType
AddressType.Addresses
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架继承:TPT、TPH 还是无? 的相关文章

随机推荐