Если у нас есть
клиент и его контакты и мы хотим добавить клиенту аттрибут основной контакт, то в клиент добавляется ссылка (поле допускающее пустые значения (NULL)) и таким образом имеем нормализованную модель.
В ОРМ реализуется похожая схема, т.к. по сути мы банально маппим строку таблицы на структуру.
Однако изменяя основной контакт, ты также должны учесть что этот же контакт живет и в контактах.
И тут имеем ловушку, т.к. у нас нет источника истины. Данные становятся не консистентными.
можно конечно убить нормализацию, добавив аттрибут основной контакт в сами контакты и в коде отслеживать изменения основного контакта, сделав последний просто не персистентным св-вом.
В коде подобную тактику реализовать намного проще.
Но она ставит нас перед выбором,
и только избавившись от ОРМ(ОМГ — Рич Хикки) мы можем синтезировать оба подхода, избавившись от некоторой сложности реализации подобного поведения.
Как определить что функционал библиотеки будет форсить разработку или тормозить?