1

У меня есть три лица, которым являются "Адресные" (может иметь адрес):Многоуровневая Наследование Mapping с доктриной 2

Очки доставки
Клиенты
центры распределения

Каждый Адресный адрес объект также является Geolocatable (имеет широту и долготу), но у меня есть объекты, которые Geolocatable но не адресуемых, как Track Points и точек маршрута (упорядоченную последовательность лат и LNGS).

Каков наилучший способ (пожалуйста, возьмите производительность в учетной записи, так как некоторые таблицы могут иметь миллионы строк), чтобы достичь этого с помощью доктрины 2 (используя сопоставление Symfony2 и YAML)?

Мой вопрос: какой лучший подход для этой проблемы? отображаемые суперклассы? однонаправленное наследование? многостраничное наследование? Я не понял, какой из них лучше для этого, читая документы доктрины.

Я использую PostgreSQL, если это имеет значение.

+0

Что именно ваш вопрос? как наследовать отображение несколько раз в целом? наследование через сопоставленные суперклассы?почему вы включили тег single-table-inheritance? различия в наследовании с несколькими таблицами и однонаправленном наследовании? – nifr

+0

@nifr Мой вопрос в том, что является лучшим подходом к этой проблеме, отображенным supperclasses? одна таблица? много таблиц? Я не понял, какой из них лучше для этого, читая документы доктрины. –

ответ

1

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

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

Метаданные обычно кэшируются, поэтому не может быть заметного влияния на производительность между использованием сопоставленных суперклассов или обеспечивая полные сопоставления (что было бы плохо в терминах DRY) для каждого из ваших объектов.

Реальное увеличение производительности будет зависеть от оптимизации ваших запросов и их кэширования и их результатов.

+0

Спасибо. Я очень склонен просто сопоставлять все объекты с отдельными таблицами для производительности, масштабируемости (я могу изменить их индивидуально) и простоты, но я буду ждать некоторое время, если у кого-то есть действительно хорошая идеа. –

+1

Это то, что я бы сделал ... сохраняет вещи легко поддерживаемыми/настраиваемыми, и это самый быстрый вариант. Я почти уверен, что никто не предоставит какой-нибудь сложный ответ, но я был бы счастлив ошибаться ... помните, что «предварительная зрелая оптимизация - это корень всех злых», – nifr

3

Это определенно ситуация, когда композиция лучше подходит, чем наследование.

Язык, который вы используете для описания проблемы, поучителен. Вы определяете «Адресные», как «может иметь и адрес, который отличается от„Клиент является тип адреса“. В последнем случае наследование будет иметь больше смысла.

Уровень нуля просто использовать (адрес OneToOne Geolocation, Customer OneToOne Address, RoutePoint OneToOne Geolocation) и т. д.

Если вы хотите выполнить набор операций над чем-либо, у которого есть адрес, создайте интерфейс Addressable и попросите его реализовать его

Если вы используете PHP 5.4, вы можете использовать черты для DRY up implemen Эти интерфейсы.

Смежные вопросы