我有一個包含產品銷售歷史的數據庫。例如下表關於重複信息的數據庫設計問題
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;
上述查詢可用於獲取基於任何特定商店的產品的信息。然後,您可以確定哪家商店賣得最多,賺的最多,平均賣得最多/最少。這將作爲普通的查詢運行非常昂貴。假設存儲大小不成問題,爲了讓這些類型的查詢運行得更快,什麼是設計思路?例如,我可以創建另一個帶有重複信息的表格。 商店ID(金鑰),產品ID,TotalCost,QTY,AvgPrice 並提供一個觸發器,以便在收到新訂單時,該商店的條目將在新表中更新。更新的成本幾乎沒有。
在給出上述情況時應該考慮什麼?
您自己的答案是針對這種查詢。在數據庫中緩存結果將比您能做的任何事情提供更大的加速。這種方法的另一個好處是,如果事情由於某種原因而失去同步,那麼可以把所有東西都拋出去,並用一個查詢重新創建表。 – roufamatic 2010-04-07 18:14:56