metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-10 08:28 am

Бизнес-логика в хранимых процедурах

Я вот думаю: следует ли избавляться от сабжевых процедур, заменяя их на закат солнца вручную в виде кода на обычных языках программирования?
У меня 99% разнообразных отчетов реализовано на Firebird или в виде sql-запросов на пару страниц или в виде selectable хранимых процедур, тоже на пару страниц.
Все бы это хорошо, но деплоймент этого дела огорчает, язык хранимых процедур - более чем полная убогость, т.е. уровня типа "турбо-паскаль интегрированный с sql".
И главное ж, хрен чем заменишь - все остальное закат солнца вручную. В обычном случае - адовы ORM типа Entity Framework и LINQ поверх них. В условно нормальном - руби и ActiveRecord, с метапрограммированием, но у него адаптер к Firebird, по моему, несуществующий. Возможно, питон еще, у него тоже метапрограммирование имеется и kinterbasedb вроде живой.
Т.е. если по хорошему - то нужно что-то вроде LINQ, но чтобы схему БД видел сам, без импорта схемы в 100500 файлов.

PS: не успел дописать: Одна из нездоровых идей - написать транслятор из гуманного DSL с функциональщиной и школьницами с Ph.D. in CS в язык хранимых процедур.

[identity profile] fas-tm.livejournal.com 2012-02-10 07:55 am (UTC)(link)
Я думаю вы видели такие продукты :) Там примерно несколько тысяч хранимок, причем больше половины - это различные версии оставленные для совместимости, различные кастомные хранимки которые просто переносятся от заказчику к заказчику и не удаляются потому что уже никто не знает какая из них работает а какая нет. Взаимосвязь этих хранимок/триггеров/вьюх - это пазл, который при интеграции собирается месяцами. Плюс обычно там с десяток новых типов данных определенно помимо стандартных, без описания и прочий трэш.
По моему, база данных с логикой внутри - это просто адский ад :)

[identity profile] fraks-nsk.livejournal.com 2012-02-10 09:08 am (UTC)(link)
Все правда :)
Однако
- описания никто не заставляет НЕ делать. Я вообще все документирую прямо в базе. Ибо.
- логика снаружи если программ более одной - тоже не особо фонтан. Так в базе поменял - везде поменялось.

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

Подумываю в некоторые процедуры вставить логгер что бы выяснить используются они или нет :)

[identity profile] fas-tm.livejournal.com 2012-02-10 10:36 am (UTC)(link)
>>описания никто не заставляет НЕ делать. Я вообще все документирую прямо в базе.
Да правда. Пару раз было c большими комментариями. На французском и немецком :)

>>логика снаружи если программ более одной - тоже не особо фонтан.
>>Так в базе поменял - везде поменялось.
И везде все упало :) Тоже бывало :)

[identity profile] sergiej.livejournal.com 2012-02-10 01:21 pm (UTC)(link)
+10
с оговорками