Я думаю, что этот вопрос является более общим, чем Doctrine и Symfony, поэтому я дам ответ высокого уровня, разделяя мою философию.
Есть два лагеря мышления:
- База данных важнее, чем приложение, использующее ее,
- Приложение важнее базы данных.
Я принадлежу к первому лагерю. Для меня база данных обычно переживает приложения, использующие ее, поэтому логично сгибать приложения в базу данных, а не наоборот. Это означает, что, если база данных и прикладной уровень имеют конфликт, уровень базы данных побеждает. Вот почему я предпочитаю шаблон DataMapper перед ActiveRecord: AR заставляет вас изменять схему базы данных, чтобы она соответствовала вашему приложению, в то время как DM адаптирует ваше приложение к схеме базы данных.
Прекрасно иметь двунаправленные отношения в схеме базы данных, поэтому, какой бы инструмент абстракции базы данных я ни использовал, он должен принять это и жить с этим.