2014-04-12 27 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往往是数据库性能的主要瓶颈。