MySQL: использовать триггер БД или просто использовать PHP?

Я создаю веб-приложение для продавцов, которые продают на торговой площадке Amazon. Это приложение загружает их заказы с помощью API Amazon, а затем рассчитывает комиссию, которую они платят Amazon. Это основная функция приложения. Он используется для создания простых для понимания отчетов на основе этих данных. В каждом заказе есть 1 или несколько позиций заказа, и каждая позиция заказа имеет определенные атрибуты, такие как вес, размеры и т. д.

Существует множество различных комиссий, которые Amazon взимает с продавцов, таких как комиссия за заказ, плата за единицу заказа, плата за выполнение позиции заказа при использовании программы Fulfillment by Amazon, плата за вес в зависимости от веса предметов заказа и т. д. Всего я насчитал около 30 различных переменных в отношении различных сценариев, в которых продавец будет платить какую-то комиссию.

Что касается БД, у меня в настоящее время есть 6 таблиц, которые относятся к моему вопросу: таблица amazon_order_items, которая содержит каждый заказ и каждый элемент заказа в этом заказе, а также все необходимые атрибуты для расчета сборов. У меня также есть 4 другие таблицы, специально созданные для хранения комиссий. Я создал отдельные таблицы для всех этих сборов из-за их разных типов.

В настоящее время у меня есть настройка триггера INSERT, которая срабатывает всякий раз, когда новая строка элемента заказа вставляется в таблицу amazon_order_items. Затем он извлекает данные из этих 4 других таблиц комиссий и вставляет соответствующую строку в таблицу amazon_order_items_fees. Некоторое время это работало нормально, хотя и очень уродливо. Я выбрал триггер, потому что подумал, что было бы очень полезно автоматически вводить комиссию в БД во время вставки элемента заказа. Это превращается в катастрофу.

Amazon постоянно меняет свою структуру комиссий, и с помощью триггеров, которые я использовал, чрезвычайно сложно поддерживать точные цифры комиссий. Мой вопрос: следует ли мне продолжать использовать триггеры БД для расчета сборов и вставки их в таблицу БД, или я должен полностью отказаться от дизайна и просто использовать PHP для вставки элемента заказа и соответствующих сборов?


person Adam Bertram    schedule 09.09.2013    source источник


Ответы (1)


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

Вообще говоря, триггеры сложнее поддерживать и сложнее отлаживать, если что-то не работает должным образом. Только по этим причинам я бы рекомендовал сделать вставки в таблицу amazon_order_items_fees частью приложения, тем более что вы уже упомянули, что они часто меняют структуру своих комиссий.

Надеюсь, это поможет вам решить!

person calcinai    schedule 09.09.2013
comment
Спасибо за помощь! Я делаю вставки в amazon_order_items через часть приложения. Речь идет о сборах, которые рассчитываются из этих вставок. Я просто не знаю лучший дизайн здесь. Должен ли я рассчитывать сборы с помощью триггера, когда он вставлен, или я должен поместить эту логику в приложение и вставить сборы через приложение? - person Adam Bertram; 11.09.2013
comment
Если все вставки в db происходят из приложения (ничего внешнего или другого приложения), вероятно, хорошей идеей будет подключить его в приложении. Ваша идея хранить сборы в таблице в базе данных по-прежнему является лучшим вариантом, хотя вы, вероятно, просто не хотите использовать триггер для их применения. - person calcinai; 11.09.2013
comment
Спасибо. Вот и я так же думаю. - person Adam Bertram; 11.09.2013