保存预先计算和计算的数据VS预先计算的数据并在检索时计算它们

时间:2014-04-12 01:04:09

标签: mysql database-design

我是设计数据库的新手,我的表有很多计算数据。

人工表

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)? /强>

如果我的问题不明确,请发表评论,以便清理。

2 个答案:

答案 0 :(得分:0)

我们在这里真正谈论的是缓存计算结果。因为,您知道,您在帖子中未提及的一个权衡因素是,例如,每次您需要更新hourly_wage时,您还必须更新daily_wagemonthly_wage因为它们是衍生物。

所以这真正归结为你必须自己回答的问题:

  • 我希望数据库写入更贵吗?

- 或 -

  • 我希望应用程序运行时更贵吗?

(我说"应用程序运行时"因为你的问题不清楚你的应用程序层是什么样的,即最终会使用这些计算的结果。)

当应用程序运行时关键任务时,您希望数据库写入更加昂贵,例如:高负载的Web服务器,其中大多数数据库操作都是读取

如果不需要极大地优化应用程序运行时或者数据库空间非常宝贵,那么您希望应用程序运行时更加昂贵。您的特定用例中的计算不需要花费太多时间(毕竟只是简单的乘法和除法)但如果这是一个webapp,肯定会增加页面加载时间。

然后,如果它是一个网络应用程序,那么您可以使用的缓存选项可能比您必须自己维护的更好。

答案 1 :(得分:0)

由于计算非常便宜,因此缓存其结果所需的存储空间增加的可能性不大。

是的,这些天存储很便宜,但不是重点 - "更胖"数据意味着I / O较慢,而I / O往往是数据库性能的主要瓶颈。