首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架继承: TPT、TPH还是无?

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

Stack Overflow用户
提问于 2009-05-30 15:27:58
回答 2查看 15.1K关注 0票数 15

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

例如..。我有一个电子商务商店,添加发货,帐单和送货地址

我有一个地址表:

代码语言:javascript
复制
RecordID
AddressTypeID
Street
ZipCode
City
Country

和一个表AddressType

代码语言:javascript
复制
RecordID
AddressTypeDescription

当人们炫耀TPT或TPH时,桌子设计不同于一般设计。当有这样的方法时,考虑继承有意义吗?

我希望这是有意义的。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2009-05-31 01:02:49

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

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

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

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

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

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

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

代码语言:javascript
复制
Address.AddressType
AddressType.Addresses
票数 13
EN

Stack Overflow用户

发布于 2010-04-09 01:02:09

正如基思所暗示的那样,这个article表明EF中的TPT伸缩性很差,但我自己还没有试过。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/929938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档