Каждый продукт в моей базе данных может иметь как минимум три, а иногда четыре или пять разных цен, и то, что отображается, зависит от нескольких факторов. Как мне попытаться решить этот сценарий?
Каждый товар может иметь следующие цены:
- Прайс-лист (MSRP)
- Стоимость (что мы платим за это)
- Розничная цена - отображается на «основном» сайте
- Правительственная цена (наш основной клиент - правительство США) - отображается только на нашем государственном поддомене
- Цена продажи (действительна в течение 1 месяца, но продлевается каждый месяц) - отображается только на нашем государственном поддомене
- Цена BPA (специальная цена для BPA) - не показана, но загружена на правительственные сайты
Прайс-лист указывается в ежеквартальном файле данных поставщика и хранится в таблице Products
, поскольку это конечная часть сущности продукта. Как я должен обращаться с другими ценами, хотя?
Я думаю, что лучший (только?) Порядок действий - это иметь отдельную таблицу с различной структурой цен, а также столбцы SaleStartDate
и SaleEndDate
, которые я могу проверить, чтобы увидеть, отображать или нет цена продажи. На самом деле, я не уверен ни в каком другом способе справиться с этим.
Кроме того, мне понадобится дубликат этого (разные цены, но с одинаковой стоимостью), поскольку наша компания выполняет обработку (всю работу, действительно) для другой компании, которая работает в том же бизнесе, что и мы; продукты идентичны, но клиенты / заказы / конкретные цены отличаются. Текущая реализация имеет дублирующую базу данных со всем повторяющимся (то же самое с кодом), и я хочу избежать этого, как чумы, поэтому я пытаюсь найти способ абстрагировать общие вещи.
РЕДАКТИРОВАТЬ (17.02.2009 @ 12:57 PM): За исключением цены по прейскуранту, все цены рассчитываются на основе стоимости, однако это не всегда так просто; иногда цены на товары нужно менять вручную независимо от маржи, однако это выполняется вручную через Excel и только один раз в квартал (3 месяца); когда данные загружаются в базу данных, цена является конечной и не изменяется до следующего квартала; цена «продажи» действует вечно, но она истекает (не на нашем сайте, а на нескольких государственных сайтах, таких как GSA Advantage) и должна быть продлена; это не изменяется, хотя, когда это расширено. Цена продажи просто для того, чтобы наш собственный сайт был синхронизирован с GSA Advantage, поэтому, если правительственный клиент посещает наш сайт, он увидит те же цены, что и на Advantage.
RE: Другая компания, это может быть путь, хотя было бы безумно раздражать, когда приходится делать все несколько раз; продукты точно такие же, стоимость точно такая же (мы в основном все делаем для них, это только другая компания по названию и тот факт, что у них клиенты разные, чем у нас), но их цены используют разную надбавку, чем у нас. Все остальное идентично, поэтому я надеялся сохранить информацию о продукте в одной таблице, а затем сохранить различия в отдельных таблицах. Нынешняя система является беспорядком в значительной степени потому, что все (база данных, файлы кодов, изображения, все) дублируется, поэтому рефакторинг кода на нашем веб-сайте требует идентичных изменений, внесенных в другой веб-сайт.
РЕДАКТИРОВАТЬ (17.02.2009 @ 16:52): Некоторые очень хорошие идеи до сих пор. Одна из проблем заключается в том, что, кроме целей отчетности и ссылки, только одна из ценовых колонок является "реальной". Например, государственная цена всегда отображается для государственных заказчиков, но вместо этого отображается цена продажи, если текущая дата падает в течение даты продажи (цена «продажи» зависит от государственных клиентов). Если клиент заказывает BPA (это будет определено нашей системой обработки заказов и / или ручным переопределением пользователем), цена автоматически становится ценой BPA. Прайс-лист может отображаться для отображения скидки, которую вы получаете, и она требуется для отчетов, но больше ничего.
Кроме того, я не уверен в том, насколько плохо нормализующиеся вещи будут делать обновления. Прямо сейчас я только что передал электронную таблицу с новыми ценами и сказал обновить базу данных (так как все они находятся в таблице продуктов); Я делаю это на основе SKU продукта, поскольку идентификатор является только внутренним, а все связанные таблицы связаны через SKU. С отдельной таблицей цен это становится еще более громоздким, хотя я все еще мог бы использовать SKU в качестве ориентира (это будет уникальный индекс для продукта), но гораздо больше придется сделать вручную.