LINUX.ORG.RU

Про бизнес-логику


0

0

Сижу на распутье.

С одной стороны, суть фронтэнда некоторой программы, которую я чиню и развиваю, сводится к тому, что она зачерпывает значения из базы данных, потом их показывает. Вроде все бесхитростно. Но некоторые значения из базы данных нельзя просто достать — их надо «причесать» в нужный вид в зависимости от других полей.

Когда я сочинил SQL для вытягивания этих всех данных (MySQL 4.1, да-да), то получился запрос на 20 печатных страниц (шрифт 10 пт.), который, правда, весьма шустро работает. Но что-то чинить в этом запросе — это надо быть очень большим спецом по SQL и MySQL с навыками ювелира, а аж такими спецзнаниями я похвастаться не могу.

И тут я получаю от коллеги проникновенный совет. База данных — всего лишь persistence, а все расчеты должны приходиться на классы в business layer. Вроде все в порядке, разделение, все дела, но тут одна закавыка: если фильтрацию (она должна производиться с результатом вычисления) и сортировку проводить средствами того же PHP, то получится большая нагрузка на БД (select * from..., да) и на сам PHP (средствами которого фильтровать и сортировать просто смешно). Но зато канонiчно как!

Вопрос в том (гугление пока что вразумительного результата не дало), а как распределить бизнес-логику между БД и сервером приложения кошернее всего? Ведь всякие вычисления с данными, их причесывание, поиск и сортировка эффективнее всего делать с помощью SQL, для того он и задумывался. И дублировать код не хочется. Засовывать всю бизнес-логику в СУБД тоже не очень правильно, особенно если у тебя MySQL. Особенно 4.1.

★★★★★

Что значит "причесывать"? И почему ты решил, что пречесывать лучше с помощью БД?

Ian ★★
()
Ответ на: комментарий от Ian

Потому что потом результат такого вычисления участвует во WHERE, HAVING и ORDER. И есть объективные причины не задерживать в базе уже наперед вычисленные значения.

shimon ★★★★★
() автор топика
Ответ на: комментарий от shimon

посмотрите вниматочно на такую конструевину как VIEW

anonymous
()

> средствами того же PHP

> а как распределить бизнес-логику между БД и сервером приложения кошернее всего?

А ты в курсе, что у тебя нету сервера приложения?

anonymous
()

Агрегации в денормализованные поля базы. SELECT, ORDER BY в базе. Все остальное в скриптовом языке.

И обязательно откройте для себя ORM.

anonymous
()

>Когда я сочинил SQL

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

wfrr ★★☆
()
Ответ на: комментарий от wfrr

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

shimon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.