2014-04-12 77 views
1

我是設計數據庫的新手,我有許多計算數據的表格。保存預先計算的數據與預先計算的數據並在檢索時計算它們

勞動表

table columns | formula 

labor_code 
job_desc 
hourly_wage 
daily_wage = hourly_wage * 8 
monthly_wage = hourly_wage * 208 
benefit_1 = daily * (5/12) 
benefit_2 = monthly_wage/12 
benefit_3 = there is a range of monthly_wage for a specific value to this 
benefit_4 = value given by the user 
benefit_5 = value given by the user 
total_hourly_rate = hourly_wage + benefit_(1-5) 
total_daily_rate = total_hourly_rate * 8 
total_monthly_rate = total_hourly_rate * 208 

材料表

table columns | formula 

material_code 
material_desc 
brand 
unit 
base_price = user input 
hauling_cost = user input 
labor_code 
labor_type = its either ful or basic 
labor_rate = if labor type == ful ? labor_rate = labor.hourly_wage : labor.total_hourly_rate 
total_price = base_price + hauling_cost + labor_rate 

上面給出這也將具有表和計算的數據將上述基礎上的值的應用程序的未來規格的表。

我想知道哪一個更好的方法是將所有數據(包括計算的數據)保存到數據庫,還是應該在檢索數據後以編程方式保存預先計算的數據和計算的數據(即total_hourly_rate)?

如果我的問題不清楚請評論,以便我可以清除它。

回答

0

我們真正在說的是緩存計算結果。因爲,您看到,您在文章中未提及的其中一個折衷因素是,例如,每次必須更新hourly_wage時,還必須更新daily_wagemonthly_wage,因爲它們是衍生的。

那麼這真的可以歸結爲很可能是你必須回答自己:

  • 難道我要數據庫寫入要貴些?

- 或 -

  • 做我想做應用程序運行時要貴些?

(我說的「應用程序運行時」,因爲它不是從你的問題清楚你的應用程序層的樣子,也就是什麼將最終使用這些計算的結果。)

你想寫入數據庫更當應用程序運行時對任務至關重要時比較昂貴一個高負載的網絡服務器,其中大部分數據庫操作都是,讀取內容爲

您希望應用程序運行時在不需要極其優化或數據庫空間非常重要時更加昂貴。在你的特定用例中的計算不需要太多時間(畢竟只是簡單的乘法和除法),但如果這是一個web應用程序,肯定會增加頁面加載時間。

然後,如果它是一個web應用程序,那麼可能會有更好的緩存選項可供您使用,而不是您必須維護的。

+0

對不起noob問題,但什麼緩存計算詳細? – newbie

+0

在這種情況下,緩存僅僅是「節省」的一個花哨詞,特別是針對交易空間(存儲結果)的時間(計算結果)。 –

0

由於計算非常便宜,因此緩存結果所需的增加的存儲空間不太可能是值得的。

是的,現在存儲價格便宜,但這不是要點 - 「更胖」的數據意味着更慢的I/O,而I/O往往是數據庫性能的主要瓶頸。