[Moscow.pm] Размышления на тему ORM и вообще работы с БД

Peter Rabbitson rabbit+moscowpm на rabbit.us
Пт Окт 28 00:12:48 PDT 2011


On Fri, Oct 28, 2011 at 11:03:53AM +0400, Ivan Petrov wrote:
> >> не все БД поддерживают FOREIGN. соответственно ожидалось что при
> >> удалении объекта отношения другой объект либо "молча" обновится (что
> >> должно быть управляемо), либо будет помечен как измененный.
> 
> > А при чем здесь... Где в документации DBIC что либо сказано про synchronized
> > storage или даже про single instance storage? Я так понимаю такой код тебя
> > тоже смущает?
> 
> мне тут упирали на relational.
> 
> соответственно надо определиться где этот relational. только в БД?
> тогда какой смысл его упоминать в отношении к ORM? или он и в
> выбранных объектах тоже есть?

Relational в смысле с легкостью ходит по набору данных, не задолбывая
програмиста писать join-ы. Все происходит на уровне определения
resultset, что само по себе являтся "query-plan" (твой ненавистный
SQL генератор). После того как SQL забит в СУБД - данные можно заввернуть
в объекты а можно пользоватся так. По умолчанию объекты ничего друг о
друге больше не знают, и знать не должны.

> тогда почему при удалении этого самого relational-объекта, объекты к
> которым это прямо относится ничего об этом "не знают" и "знать не
> хотят"?

Потому что тогда нарушим правило "no single instance storage". То что я
показал в предыдущем письме не может сосуществовать с тем что ты хочеш.
Row обект не является 1) едиснтвенной копией на всю программу 2) не
гарантированно синхронизован с текущим состоянием СУБД.

Поверх можно конечно наворотить, но уже своими ручками. Есть кстати
http://search.cpan.org/~dcantrell/DBIx-Class-SingletonRows-0.11/lib/DBIx/Class/SingletonRows.pm



Подробная информация о списке рассылки Moscow-pm