Предположим, у меня есть приложение для блога.
Автор может добавить несколько изображений в сообщение, указав ссылку на URL-адрес существующего изображения в Интернете или загрузив новое изображение.
Я хочу иметь возможность обратного отслеживания изображения (либо загруженного, либо url) для всех сообщений, которые используют это изображение, и от определенной записи ко всем изображениям в этом сообщении (например, чтобы я мог удалить изображения, которые являются незаконными и / или приостановить сообщение, которое использует их, пока автор не зафиксирует сообщение).
Тем не менее, я использую разные объекты для загруженного изображения и изображения url – загруженное изображение имеет больше данных относительно изображения, чем изображение URL-адреса.
Это приводит к более сложному коду, так как при каждом сохранении отредактированного сообщения мне нужно проверить, какой вид является конкретным изображением (из всех изображений в почте, которые мне нужно выполнить), а не создавать или обновлять его запись и назначить поле отношения в почтовом объекте.
Итак … предполагая, что у меня есть объекты UploadedImage
и UrlImage
, я подумал о том, что в setImages
метод setImages
, который проверяет каждое изображение, которое он получает, если он загружен или url, а затем вызывает либо setUploadedImages
либо setUrlImages
.
Тем не менее, мне понадобится какой-то виртуальный репозиторий images
, чтобы загружать изображения таким же образом.
Это звучит немного сложно, и я подумал:
Вот документация для того, что вы пытаетесь сделать:
http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html
Он описывает однонаправленное наследование таблицы и наследование таблицы классов. Ваш случай подходит для последнего, но также рассмотрите возможность перехода на однонамерное наследование.
Если (код) пользователи этих изображений относятся к ним одинаково независимо от их происхождения, добавленная сложность запросов и использование базы данных не будут стоить нормализации.