У меня есть база данных, которая содержит историю продаж продукта. Например, нижеследующая таблицаВопросы проектирования баз данных о дублирующейся информации
CREATE TABLE SalesHistoryTable (
OrderID, // Order Number Unique to all orders
ProductID, // Product ID can be used as a Key to look up product info in another table
Price, // Price of the product per unit at the time of the order
Quantity, // quantity of the product for the order
Total, // total cost of the order for the product. (Price * Quantity)
Date, // Date of the order
StoreID, // The store that created the Order
PRIMARY KEY(OrderID));
В итоге в итоге будет заключено миллион сделок. Из этого можно создавать профили для продуктов в разных географических регионах (на основе StoreID). Создание этих профилей может занять много времени в качестве запроса к базе данных. Например.
SELECT ProductID, StoreID,
SUM(Total) AS Total,
SUM(Quantity) QTY,
SUM(Total)/SUM(Quantity) AS AvgPrice
FROM SalesHistoryTable
GROUP BY ProductID, StoreID;
Вышеприведенный запрос может быть использован для получения информации на основе продуктов для любого конкретного магазина. Тогда вы могли бы определить, какой магазин продал больше всего, сделал больше денег и в среднем продает в основном/наименее. Это было бы очень дорого использовать в качестве обычного запроса в любое время. Каковы некоторые дизайнерские решения, позволяющие запускать эти типы запросов быстрее при условии, что размер хранилища не является проблемой. Например, я мог бы создать другую таблицу с дублирующейся информацией. Идентификатор магазина (ключ), идентификатор продукта, TotalCost, QTY, AvgPrice И предоставить триггер, чтобы при получении нового заказа запись для этого магазина обновляется в новой таблице. Стоимость обновления почти ничего.
Что следует учитывать при использовании приведенного выше сценария?
Ваш собственный ответ является спонтанным для такого рода запросов. Кэширование результатов в базе данных обеспечит гораздо большее ускорение, чем все, что вы можете сделать. Другая приятная вещь в этом подходе заключается в том, что, если по какой-то причине ситуация когда-либо вышла из-за синхронизации, вы можете выбросить все и заново создать таблицу с одним запросом. – roufamatic