Использовалась ли логика на стороне базы данных (хранимые процедуры, триггеры) в вашем проекте?

Ответ

Да, использовалась, но ограниченно и обоснованно. Основная бизнес-логика находилась в сервисном слое Java-приложения.

Где применялась логика в БД (PostgreSQL):

  1. Сложные отчеты и агрегации: Когда необходимо обработать большой объем данных на месте, минимизируя передачу по сети.
    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;
  2. Триггеры для аудита: Автоматическое логирование изменений критичных таблиц.
    CREATE TRIGGER audit_user_changes
    AFTER UPDATE ON users
    FOR EACH ROW EXECUTE FUNCTION log_user_update();

Архитектурный принцип:

  • Плюсы логики в БД: Максимальная производительность для операций, тесно связанных с данными.
  • Минусы: Усложняет тестирование, версионирование и миграции. Нарушает принцип инкапсуляции, если бизнес-правила "прячутся" в БД.

Итог: Логика в БД применялась только там, где это давало критическое преимущество в производительности, а ее поддержка и сложность были оправданы. Все остальные бизнес-правила реализовывались в коде приложения.

Ответ 18+ 🔞

А, слушай, вот это интересный вопрос! Просто пиздец как интересный. Так вот, значит, использовалась ли у нас логика в базе? Да, блядь, использовалась, но не абы как, а с умом, понимаешь? То есть не просто так, чтобы любой распиздяй мог туда накидать триггеров и функций, а то потом нихуя не разберёшь, кто где что сломал. Нет, у нас был подход, блядь, обоснованный.

Где же мы, сука, эту логику в PostgreSQL впендюривали?

  1. Эти вот, блядь, сложные отчёты, где нихуя не разберёшь. Ну знаешь, когда надо взять дохуище записей, посчитать, сгруппировать, и всё это так, чтобы по сети не гонять терабайты данных. Тут уж извини, но база справится быстрее, чем твой 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 туда-сюда.

  2. Триггеры, блядь, для аудита. Ну это вообще святое. Чтобы вот этот, как его, Вася-разработчик, не забыл где-нибудь в коде записать, кто и когда поменял зарплату у сотрудника. База сама, автоматом, в рот меня чих-пых, всё зафиксирует.

    CREATE TRIGGER audit_user_changes
    AFTER UPDATE ON users
    FOR EACH ROW EXECUTE FUNCTION log_user_update();

    Обновил запись — и всё, приехали. В лог-таблицу уже полетела запись. Никаких "ой, я забыл".

А теперь, блядь, про архитектурный принцип, чтобы ты понимал всю глубину нашей задумки:

  • Плюсы, когда логика в БД: Ну, скорость, ёбана! Производительность просто овердохуищная для операций, которые прямо в данных ковыряются. База же для этого и сделана.
  • Минусы, которые нас ебали: А вот тут начинается пиздец. Тестировать эту хуйню — отдельный цирк. Версионировать? Да ты что, это ж надо миграции писать на эти функции, следить, чтобы нигде ничего не отвалилось. И главное — если вся бизнес-логика понапрятана по тёмным углам базы, то новый разработчик придёт и будет месяц ебаться, чтобы понять, откуда у него в отчёте берётся эта ебучая цифра.

Итог, сука: Логику в БД мы применяли только там, где без неё реально было пиздец как туго с производительностью, и где выгода перевешивала все эти танцы с бубном по поддержке. А всё остальное — все эти правила, проверки, расчёты — это жило в коде приложения, где его можно нормально тестировать, ревьюить и, если что, послать нахуй того, кто это написал. Вот так вот, просто и со вкусом.