Наследование Entity Framework: TPT, TPH или нет?

entity-framework inheritance

Вопрос

В настоящее время я читаю о возможности использования наследования с Entity Framework. Иногда я использую подход для ввода записей данных, и я не уверен, буду ли я использовать TPT или TPH или ничего ...

Например ... У меня есть интернет-магазин, который добавляет адрес доставки, выставления счетов и адрес доставки

У меня есть адресная таблица:

RecordID
AddressTypeID
Street
ZipCode
City
Country

и таблица AddressType

RecordID
AddressTypeDescription

Дизайн стола отличается от общего дизайна, когда люди хвастаются TPT или TPH ... Имеет ли смысл подумать о наследовании, когда есть такой подход ...

Я надеюсь, что это имеет смысл ...

Спасибо за любую помощь ...

Принятый ответ

Вы должны проверить мою серию EF Tips .

Тот, который называется Как выбрать стратегию наследования, должен дать вам больше понимания

Надеюсь это поможет

Alex


Популярные ответы

При рассмотрении вопроса о том, как представлять наследование в базе данных, необходимо учитывать несколько вещей.

Если у вас много разных подклассов, у вас может быть много дополнительных объединений в запросах с более сложными типами, которые могут снизить производительность. Одним из больших преимуществ TPH является то, что вы запрашиваете одну таблицу для всех типов в иерархии, и это благо для производительности, особенно для больших иерархий. По этой причине я склоняюсь к такому подходу в большинстве сценариев.

Однако TPH означает, что вы больше не можете иметь поля NOT NULL для подтипов, поскольку все поля для всех типов находятся в одной таблице, что возлагает ответственность за целостность данных на ваше приложение. Хотя на практике это может звучать ужасно, я не считаю это слишком большим ограничением.

Однако я бы предпочел использовать TPT, если бы было много полей для каждого типа и что число типов в иерархии, вероятно, было бы небольшим, а это означает, что производительность не была такой большой проблемой с объединениями, и вы стали лучше целостность данных.

Обратите внимание, что одним из преимуществ EF и других ORM является то, что вы можете передумать, не влияя на ваше приложение, поэтому решение не должно быть полностью высечено в камне.

В вашем примере он не имеет отношения наследования, он выглядит как один ко многим от типа адреса до адреса

Это будет представлено между вашими классами примерно так:

Address.AddressType
AddressType.Addresses


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow