TPH,TPT,TPC和OR映射器

OKB*_*OKB 2 nhibernate data-modeling table-per-type table-per-hierarchy entity-framework-4.1

我正在使用一个数据模型,该数据模型具有一组类型,这些类型共享一些常见字段,例如Id,Name,Description。更具体地说:

Document类具有属性列表。这些属性在我们的域中,例如String,Integer,DateTime等类型,以及其他“复杂”类型,例如Address以及String,Integer,Address等列表,现在,在我的脑海中,我将对Attribute类进行建模,以便抽象基类(AttributeBase),它包含公共属性(Id,Name,Description),然后在适当的子类中具有更特定的属性。例如,StringAttribute(值),IntegerAttribute(值),AddressAttribute(街道等),StringListAttribute,IntegerListAttribute,AddressListAttribute。我们正在谈论15-20个不同的子类。但是,您将如何在数据库中为这些类建模?您会选择TPH,TPT还是TPC?我已经读过有关选择TPT和EF 4.1并为TPH设置一张Massiv表时性能下降的信息。即使性能更好,听起来也没错。我们正在谈论表中潜在的10000-1000000 ++数据行。

在这些情况下,您是否有第一手经验?我真的很想就这个问题向您请教。

Lad*_*nka 5

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

TPT和TPC在DB中看起来更加标准化,但是它们的使用将导致应用程序缓慢。此外,在大多数情况下,将标准化IntAttributeIdName和将表格标准化为和Description并将第二个表格与Id和整数Value归为IMHO。

顺便说一句。如果您要对文档进行任何操作,并且想为文档分配属性,则一定要选中Sharepoint,因为它允许开箱即用。