Я обновляю устаревшую систему баз данных в .NET + Entity Framework 6 (с кодом POCO) + PostgreSQL. Для простоты программирования, я хотел бы разделить большую таблицу (200+) полей в нескольких объектов, например .:EF6 Разделение таблиц и общий первичный ключ для нескольких разделов
Franchise
FranchiseLegalEntity
FranchiseBilling
FranchiseSignup
FranchiseAllocation
FranchiseCompliance
FranchiseMiscellaneous
FranchiseNotifications
Я был рад найти EF6 поддерживает «таблицы расщепления»: переводящий одну таблицу для нескольких объектов чтобы разбить поля вверх.
Однако, пытаясь реализовать это и прочитав много страниц в Интернете, было подтверждено, что это проблематично при расщеплении нескольких раз. Entity Framework требует свойств навигации не только для основного объекта, но и для всех объектов, сопоставленных с таблицей. Для моего сценария выше это потребует 21 бессмысленной навигационной способности - 42, если я заставляю их делать с двух сторон.
См: How to separate large table into multiple discrete types using EF-Code-First
Использование нескольких таблиц с общим первичным ключом рекомендуется, вариант для меня. Однако, учитывая раздутое генерирование SQL-запросов EF и иногда беспорядочный оптимизатор запросов PostgreSQL со сложными запросами, у меня есть проблемы с производительностью этого параметра (100GB + database).
Резюмируя:
Таблица расщепления
Pros: Лучшая производительность запросов, быстрый для реализации на уровне базы данных
Cons: Загрязняющие мои модели и метод OnModelBuilding() с дерьмо, запутывание других разработчиков
Общие первичные ключи по нескольким таблицам
Pros: Чистейшие модели & код, рекомендуемое решение для не устаревших баз данных
Против: Дополнительная работа по реализации, потенциально худшие характеристики
Мои вопросы :
1) У EF6 улучшилось расщепление таблицы с расщеплением 2+?
2) Есть ли какие-либо факторы, которые я не учитывал?
3) Есть ли другие варианты?
P.S. Я не заинтересован в использовании [ComplexType]
Возможно, вам следует рассмотреть вопрос об использовании просмотра и создании объекта для зрения? Плюсы - просты - минусы - нет ссылок. Также рассмотрим трудности, связанные с управлением разбиением таблиц после создания базы данных, и все меняется дальше по строке. –