Сижу на распутье.
С одной стороны, суть фронтэнда некоторой программы, которую я чиню и развиваю, сводится к тому, что она зачерпывает значения из базы данных, потом их показывает. Вроде все бесхитростно. Но некоторые значения из базы данных нельзя просто достать — их надо «причесать» в нужный вид в зависимости от других полей.
Когда я сочинил SQL для вытягивания этих всех данных (MySQL 4.1, да-да), то получился запрос на 20 печатных страниц (шрифт 10 пт.), который, правда, весьма шустро работает. Но что-то чинить в этом запросе — это надо быть очень большим спецом по SQL и MySQL с навыками ювелира, а аж такими спецзнаниями я похвастаться не могу.
И тут я получаю от коллеги проникновенный совет. База данных — всего лишь persistence, а все расчеты должны приходиться на классы в business layer. Вроде все в порядке, разделение, все дела, но тут одна закавыка: если фильтрацию (она должна производиться с результатом вычисления) и сортировку проводить средствами того же PHP, то получится большая нагрузка на БД (select * from..., да) и на сам PHP (средствами которого фильтровать и сортировать просто смешно). Но зато канонiчно как!
Вопрос в том (гугление пока что вразумительного результата не дало), а как распределить бизнес-логику между БД и сервером приложения кошернее всего? Ведь всякие вычисления с данными, их причесывание, поиск и сортировка эффективнее всего делать с помощью SQL, для того он и задумывался. И дублировать код не хочется. Засовывать всю бизнес-логику в СУБД тоже не очень правильно, особенно если у тебя MySQL. Особенно 4.1.