我有一個滑動(按比例)價目表,我需要收取客戶,我想知道最好的設計。例如,我的價目表是這樣的:SQL爲滑動率卡收取費用
(用法是一個整數而不是浮點數)。
Level Usage Rate
----------------------
0 10,000 $2.00
0 20,000 $1.00
0 30,000 $0.50
1 10,000 $4.00
1 20,000 $2.00
1 30,000 $1.00
因此,舉例來說,如果客戶在使用15000只小部件級別0,他們得到充電:
10,000 * 2.00 = $20,000
5,000 * 1.00 = $ 5,000
-----------------------
Total: $25,000
注意,客戶得到2.00 $ /插件收取1之間的小部件10,000,然後以1.00美元/小部件的價格在10,001-20,000之間,依此類推。也就是說,他們並不是以所有小部件的最便宜的價格收費 - 「較早」的小部件更昂貴,那麼小部件會以更大的數量更便宜。
我想到預先計算的收費,所以我可以做一個客戶和計算率之間的加入。很明顯,表pre_calc會很大,但磁盤空間很便宜。這比每次計算成本都要快速/簡單。
Table pre_calc
==============
Level Usage Cost
----------------------
0 0 $0
0 1 $2.00
0 2 $4.00
... etc
1 0 $0
1 1 $4.00
1 2 $8.00
... etc
讓我做
SELECT c.name, p.cost
FROM customers as c
INNER JOIN pre_calc as p
ON c.level = p.level AND c.usage = p.usage;
這種設計有何評論?任何更好的方法來做到這一點?
這一切都取決於將針對數據庫運行的查詢。如果您不斷計算成本,那麼讓他們已經在那裏使用是有意義的。 –
您的解決方案應該可以正常工作,但每當第一個表更改時,或者訂單數量的潛在範圍增加(這可能不是問題,取決於您的應用程序的要求),您都需要重新計算成本。但是,通過將第一個表加載到應用程序中的數據結構中並在那裏執行必要的計算,可以相對簡單高效地處理此問題。 SQL可以做很多事情,但是其他任務可以更有效地處理一些任務。 –
謝謝你們。價目表是靜態的(每年更換一次),所以沒有問題。我可以在中間層執行calc,但在db中執行會更容易,因爲它將從多個應用程序訪問。 –