TPH против TPT против карт TPC и OR - PullRequest
2 голосов
/ 12 октября 2011

Я работаю над моделью данных, которая имеет набор типов, имеющих общие поля, такие как Id, Name, Description.Чтобы быть более конкретным:

Класс Document имеет список атрибутов.Эти атрибуты находятся в нашем домене, такие как String, Integer, DateTime и более «сложные» типы, такие как Address и списки String, Integer, Address и т. Д. Теперь в моей голове я бы смоделировал классы Attribute так, чтобы у меня былабстрактный базовый класс (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 Ответ

4 голосов
/ 12 октября 2011

TPH не звучит хорошо с точки зрения БД, но на самом деле это модель хранения, используемая многими продуктами, использующими метаданные этого типа. Примером является SharePoint (2007), который имеет все данные в одной таблице - он следует более сложной модели, но основа та же. Мне не нравится SharePoint и то, как он хранит данные, но, подумав о проблеме, я не нашел лучшего решения для моделирования универсального решения, поддерживающего огромное количество данных.

TPT и TPC будут выглядеть более нормализованными в БД, но их использование приведет к медленному применению. Более того, нормализация IntAttribute к таблице с Id, Name и Description и второй таблице с Id и целым числом Value ИМХО в большинстве случаев нормализована.

Btw. если вы что-то делаете с документами и хотите назначить свойства документам, вам непременно следует установить флажок Sharepoint, поскольку он позволяет это «из коробки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...