Хранить параметры продукта в бд или расчитывать налету?

Ссылка скопирована
1 ответ

Есть продукт подписки (таблица products), который планируется продавать на двух сайтах - для российской аудитории и США (разные домены). Месячная подписка и на год. На год со скидкой, в карточке надо показать размер скидки, показать цену без скидки, показать цену со скидкой. Учитывать все эти скидки во всех расчетах и проверках (в корзине, при поступлении оплаты и тд). Дополнительно, для сайта США нужно все это отображать в долларах.

Возникает два выбора:
1. Расчитывать на лету. Создать сервис, который будет считать всех эти скидки и переводить цену в доллары. Везде юзать его при использовании продукта. Тогда модель Product будет выглядеть так:
name
price

2. Сохранить все расчеты в бд.
name
price
price_en
discount_percentage
discount
discount_en
total
total_en

Что лучше выбрать? Или может какой-то другой способ.

Дополнительно:

а как во втором случае цены в базу данных будут попадать?

если скидки персональные, они и так будут к продукту в базе привязаны

но иногда сам модуль расчета скидок выносят отдельно, тогда логичен постоянный пересчет налету

Рассчитывать на лету. Курсы валют сохранять в отдельную таблицу и брать их оттуда для расчета. То же самое для скидок.
Денормализация здесь не нужна, она ничего не даст, т.к. перемножить числа не проблема. А исторические данные все равно надо хранить.

Ответы:

Подумайте про аудит и про то что цены и прочее имеют свойство меняться и что вам нужно всегда иметь возможность правильно посчитать исторические данные.

  • Исторические данные сохраняются в таблице заказов
  • evomed, а если товар никто не заказывал?)

1. Создать таблицу с тарифами и сроком их действия, где можно будет узнать базовую стоимость за день/месяц/год;
2. Вести таблицу операций пользователей по получению подписок (по какому тарифу и на сколько брали);
3. Заносить информацию по денежным средствам по операциям (п.2) и считать их в абсолютных величинах (если заплатили 650 рублей, то и записывать 650 и т.д.);

Тогда можно будет в любой момент времени узнать:
1. Какие тарифы были доступны;
2. Какие операции производил пользователь;
3. Какие средства крутились в системе в тот или иной момент.

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

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

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

Хранение параметров продукта в базе данных имеет свои преимущества. Во-первых, это позволяет легко изменять параметры продукта без необходимости изменения кода приложения. Например, если у вас есть интернет-магазин, вы можете легко изменить цену товара или его описание, просто обновив запись в базе данных. Во-вторых, это упрощает масштабирование приложения, так как данные могут быть централизованно храниться и обновляться.

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

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

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

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно