@Kirill-Gorelov
С ума с IT

Как хранить условия в БД?

Как организовать систему хранения условий операций над данными в БД и их чтение.
Самый наглядный пример это в битрикс скидки.

То есть пример:
Если сегодня суббота, то сделай скидку к моему товару на 5%, но не меньше себестоимости
Или
Если сегодня суббота то увеличь цену на мой товар в 10% но не меньше 300р

Как такие условия хранить в БД, и потом их применять для ценообразования. Подойдет пример и на php и на python.
  • Вопрос задан
  • 190 просмотров
Пригласить эксперта
Ответы на вопрос 3
@deliro
Вариантов очень много. Самый простой и часто самый хороший — хранить скидки в коде. Да, это требует программерских ресурсов на их поддержку, но зачастую хранение скидок в БД и создание к ним админки будет сильно дороже.

В целом, условия и действия скидки можно представить и хранить деревьями (что-то похожее на AST). В каждой ноде есть оператор, опциональное значение и дети, которые тоже ноды. Действия тоже можно представить деревьями, только операторы будут вроде min, max.

Но сразу скажу, что это сложно менеджерить без хорошей админки. А хорошая админка = очень дорого.
Ответ написан
Комментировать
Попробуй формализовать в виде правил и записать их каждое в отдельную запись.

Если сегодня суббота, то сделай скидку к моему товару на 5%, но не меньше себестоимости

как определяется, что день является субботой?
каков номинал скидки?
как определить что является себестоимостью? Надо ли хранить в БД или вычисляется исходя из цены товара? Или, наоборот, цена хранится в виде себестоимости, а накрутка на себестоимость вычисляется по формуле.

Пример записей:
тип правила: день недели, скидка: 15, единицы: проценты, мета-данные: { день: 5 } (и проверять функцией SQL DAYOFWEEK)
тип правила: день недели, скидка: 5, единицы: проценты, мета-данные: { день: 1 }
тип правила: день трудяг, скидка: 10, единицы: абс. (тугрики), мета-данные: { }
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Хранить виде json, в котором предусмотрены поля для всех возможных критериев. Например weekday.
При отображении считывать это поле и по нему вычислять скидку.
Для поиска периодически производить перерасчет
Пример не вижу смысла писать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы