Есть продукт подписки (таблица 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. Какие средства крутились в системе в тот или иной момент.
У вас есть или должна быть таблица счет/заказ, там и храните все расчеты для истории.
В товаре не должно быть никаких курсов или скидок. Только товар и базовая цена.
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Хранение параметров продукта в базе данных или расчет налету - это зависит от конкретной ситуации и требований проекта. Оба подхода имеют свои преимущества и недостатки, и выбор между ними должен быть обоснован и обдуман.
Хранение параметров продукта в базе данных имеет свои преимущества. Во-первых, это позволяет легко изменять параметры продукта без необходимости изменения кода приложения. Например, если у вас есть интернет-магазин, вы можете легко изменить цену товара или его описание, просто обновив запись в базе данных. Во-вторых, это упрощает масштабирование приложения, так как данные могут быть централизованно храниться и обновляться.
Однако, есть и недостатки хранения параметров продукта в базе данных. Например, если у вас есть большое количество параметров для каждого продукта, это может привести к увеличению объема базы данных и замедлению работы приложения. Кроме того, при изменении параметров продукта в базе данных может потребоваться перезагрузка приложения или очистка кеша.
Расчет параметров налету также имеет свои преимущества. Во-первых, это может уменьшить нагрузку на базу данных, так как данные не хранятся постоянно, а вычисляются только при необходимости. Во-вторых, это может быть полезно для параметров, которые часто меняются или зависят от других параметров.
Однако, расчет параметров налету также имеет свои недостатки. Например, это может привести к дополнительным вычислениям и замедлению работы приложения, особенно если у вас большое количество параметров или сложные вычисления. Кроме того, это может усложнить код и увеличить вероятность ошибок.
В целом, выбор между хранением параметров продукта в базе данных и расчетом налету зависит от конкретных требований проекта, объема данных, частоты изменений параметров и других факторов. Важно обдумать все плюсы и минусы каждого подхода и выбрать наиболее подходящий для вашего конкретного случая.