Мне нужно оформить стол для ежедневных продаж фармацевтической продукции.
Существуют сотни типов продуктов {Имя, код}.
Для продажи этих продуктов работают тысячи продавцов {имя, код}.
Они собирают товары из разных складов {имя, код}.
Они работают в разных областях -> Зоны -> Рынки -> Торговые точки и т. Д. {У всех есть имена и коды}
Каждый товар имеет различные типы цен {Цена производства, Цена сделки, Цена бизнеса, Цена со скидкой и т. Д.}. И продавцы могут свободно выбирать из этой комбинации, чтобы оценить цену продажи.
Проблема в том, что ежедневные продажи требуют огромного количества ввода данных. В течение пары лет могут быть гигабайты данных (если не терабайты). Если мне нужно будет отображать ежедневные, еженедельные, ежемесячные, квартальные и годовые отчеты о продажах, мне будут нужны различные типы запросов sql.
Это мой первоначальный дизайн:
Product {ID, Code, Name, IsActive}
ProductXYZPriceHistory {ID, ProductID, Date, EffectDate, Price, IsCurrent}
SalesPerson {ID, Code, Name, JoinDate, and so on..., IsActive}
SalesPersonSalesAraeaHistory {ID, SalesPersonID, SalesAreaID, IsCurrent}
Depot {ID, Code, Name, IsActive}
Outlet {ID, Code, Name, AreaID, IsActive}
AreaHierarchy {ID, Code, Name, PrentID, AreaLevel, IsActive}
DailySales {ID, ProductID, SalesPersonID, OutletID, Date, PriceID, SalesPrice, Discount, etc...}
Теперь, кроме индексации, как я могу нормализовать мою таблицу DailySales
, чтобы иметь мелкозернистый дизайн, который мне не нужно будет менять в течение последующих лет?
Пожалуйста, покажите мне пример схемы только DailySales
таблицы ввода данных (из которой будут запрашиваться все типы отчетов) на основе вышеуказанной информации.
Мне не нужен подробный совет по проектированию . Мне просто нужен совет, касающийся только таблицы DailySales
. Есть ли способ разбить эту конкретную таблицу для достижения детализации?