Ответ
Да, использовалась, но ограниченно и обоснованно. Основная бизнес-логика находилась в сервисном слое Java-приложения.
Где применялась логика в БД (PostgreSQL):
- Сложные отчеты и агрегации: Когда необходимо обработать большой объем данных на месте, минимизируя передачу по сети.
CREATE FUNCTION calculate_monthly_sales(month INT, year INT) RETURNS DECIMAL AS $$ DECLARE total DECIMAL; BEGIN SELECT SUM(amount) INTO total FROM orders WHERE EXTRACT(MONTH FROM order_date) = month AND EXTRACT(YEAR FROM order_date) = year; RETURN total; END; $$ LANGUAGE plpgsql; - Триггеры для аудита: Автоматическое логирование изменений критичных таблиц.
CREATE TRIGGER audit_user_changes AFTER UPDATE ON users FOR EACH ROW EXECUTE FUNCTION log_user_update();
Архитектурный принцип:
- Плюсы логики в БД: Максимальная производительность для операций, тесно связанных с данными.
- Минусы: Усложняет тестирование, версионирование и миграции. Нарушает принцип инкапсуляции, если бизнес-правила "прячутся" в БД.
Итог: Логика в БД применялась только там, где это давало критическое преимущество в производительности, а ее поддержка и сложность были оправданы. Все остальные бизнес-правила реализовывались в коде приложения.
Ответ 18+ 🔞
А, слушай, вот это интересный вопрос! Просто пиздец как интересный. Так вот, значит, использовалась ли у нас логика в базе? Да, блядь, использовалась, но не абы как, а с умом, понимаешь? То есть не просто так, чтобы любой распиздяй мог туда накидать триггеров и функций, а то потом нихуя не разберёшь, кто где что сломал. Нет, у нас был подход, блядь, обоснованный.
Где же мы, сука, эту логику в PostgreSQL впендюривали?
-
Эти вот, блядь, сложные отчёты, где нихуя не разберёшь. Ну знаешь, когда надо взять дохуище записей, посчитать, сгруппировать, и всё это так, чтобы по сети не гонять терабайты данных. Тут уж извини, но база справится быстрее, чем твой Java-сервис будет это всё в память пихать и там ковырять.
CREATE FUNCTION calculate_monthly_sales(month INT, year INT) RETURNS DECIMAL AS $$ DECLARE total DECIMAL; BEGIN SELECT SUM(amount) INTO total FROM orders WHERE EXTRACT(MONTH FROM order_date) = month AND EXTRACT(YEAR FROM order_date) = year; RETURN total; END; $$ LANGUAGE plpgsql;Вот, смотри, функция. Красиво, ёпта, и работает как часы. Вызвал её раз — и получил цифру, а не таскай всю таблицу
ordersтуда-сюда. -
Триггеры, блядь, для аудита. Ну это вообще святое. Чтобы вот этот, как его, Вася-разработчик, не забыл где-нибудь в коде записать, кто и когда поменял зарплату у сотрудника. База сама, автоматом, в рот меня чих-пых, всё зафиксирует.
CREATE TRIGGER audit_user_changes AFTER UPDATE ON users FOR EACH ROW EXECUTE FUNCTION log_user_update();Обновил запись — и всё, приехали. В лог-таблицу уже полетела запись. Никаких "ой, я забыл".
А теперь, блядь, про архитектурный принцип, чтобы ты понимал всю глубину нашей задумки:
- Плюсы, когда логика в БД: Ну, скорость, ёбана! Производительность просто овердохуищная для операций, которые прямо в данных ковыряются. База же для этого и сделана.
- Минусы, которые нас ебали: А вот тут начинается пиздец. Тестировать эту хуйню — отдельный цирк. Версионировать? Да ты что, это ж надо миграции писать на эти функции, следить, чтобы нигде ничего не отвалилось. И главное — если вся бизнес-логика понапрятана по тёмным углам базы, то новый разработчик придёт и будет месяц ебаться, чтобы понять, откуда у него в отчёте берётся эта ебучая цифра.
Итог, сука: Логику в БД мы применяли только там, где без неё реально было пиздец как туго с производительностью, и где выгода перевешивала все эти танцы с бубном по поддержке. А всё остальное — все эти правила, проверки, расчёты — это жило в коде приложения, где его можно нормально тестировать, ревьюить и, если что, послать нахуй того, кто это написал. Вот так вот, просто и со вкусом.