TPH与TPT对比TPC和OR映射器

时间:2011-10-12 09:58:50

标签: nhibernate entity-framework-4.1 data-modeling table-per-hierarchy table-per-type

我正在开发一个数据模型,它具有一组共享一些常见字段的类型,例如Id,Name,Description。更具体一点:

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

在这些情况下,您有任何第一手经验吗?我真的很想在这里谈谈这个问题。

1 个答案:

答案 0 :(得分:3)

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

TPT和TPC在数据库中看起来会更加规范化,但它们的使用会导致应用程序变慢。此外,将IntAttribute标准化为IdNameDescription以及第二个表格Id和整数Value的标准化是大多​​数情况下标准化的恕我直言

顺便说一下。如果您正在对文档进行任何操作,并且您想要为文档指定属性,那么您一定要检查Sharepoint,因为它允许开箱即用。