1

我正在研究一个数据模型,它有一组类型,它们共享一些常见字段,如Id,Name,Description。更具体地说:TPH vs TPT vs TPC和OR映射器

Document类有一个属性列表。这些属性在我们的域中,类型如String,Integer,DateTime和更多“复杂”类型,如地址和String,Integer,Address等列表。现在,在我的脑海中,我将模拟Attribute类,以便拥有包含公共属性(Id,Name,Description)的抽象基类(AttributeBase),然后在相应的子类中具有更具体的属性。例如。 StringAttribute(Value),IntegerAttribute(Value),AddressAttribute(Street等),StringListAttribute,IntegerListAttribute,AddressListAttribute。我们正在谈论15-20个不同的子类。但是,如何在数据库中对这些类进行建模?你会选择TPH,TPT还是TPC?在选择TPT和EF 4.1时,我已经读过关于性能的问题,并且有一个用于TPH的massiv表对我来说听起来并不合适,即使性能更好。我们正在讨论表中可能有10000 - 1000000 ++行数据。

当谈到这些场景时,您有任何第一手经验吗?在这个问题上,我真的很想从你这里来。

回答

3

从数据库的角度来看,TPH听起来不太好,但它实际上是许多使用此类元数据的产品使用的存储模型。示例是具有单个表中所有数据的SharePoint(2007) - 它遵循更复杂的模型,但基础是相同的。我不喜欢SharePoint以及它如何存储数据的方式,但考虑到这个问题,我没有找到更好的解决方案来建模支持大量数据的通用解决方案。

TPT和TPC在数据库中看起来会更加标准化,但它们的使用会导致应用程序缓慢。此外正常化IntAttributeId,NameDescription和第二张表Id和整数Value是恕我直言过规范化在大多数情况下。

Btw。如果您对文档进行任何操作并且想要将文档分配给文档,则应该检查Sharepoint,因为它允许使用开箱即用的功能。

+0

谢谢ladislav!您在解决方案中是否遇到过有关TPH的任何性能问题? – OKB

+0

与TPC和TPT相比,TPH对查询的性能影响最小。 EF本身增加了很大的性能影响,所以考虑TPH时,一旦您对EF感到满意,就不需要性能问题。 –

+0

好的。谢谢你回答我的问题! – OKB