优化我的数据结构。处理大量单位和转换

时间:2014-03-20 07:27:07

标签: php mysql sql cakephp

我的网站处理大量的药物剂量和单位。目前,根据用户的不同,将这些剂量和单位塑造成不同的值并不灵活。

例如,如果用户提交记录,他在星期一服用1毫升酒精,星期二服用10毫升,在星期二服用2滴,则同一物质使用两个分装单位。那么,如果我想向用户显示这三天的平均值仅以mL为单位会发生什么?如果用户希望只在Liters中看到它呢?

这是我到目前为止所拥有的。

 drugs
 id | drug
 1  | alcohol
 2  | cannabis


 units
 id | unit
 1  | ml
 2  | mg
 3  | g
 4  | l


 unit_conversion
 id | from_unitid | to_unitid | multiplier
 1  | 1           | 4         | 1000
 2  | 4           | 1         | .001
 3  | 2           | 3         | 1000
 4  | 3           | 2         | .001

 user_dose_line
 id | drug_id | unit_id | dose
 1  | 1       | 1       | 100
 2  | 1       | 1       | 200
 3  | 1       | 4       | 1

以下是我的理想如何让它发挥作用。

用户提交记录。他说药物是酒精,剂量是100,单位是毫升。这个存储在数据库表中的是user_dose_line上的id#1。

现在让我们说还有另一张桌子。选项表是用户设置他想要使用的默认测量单位的。

 user_dose_options
 id | user_id | drug_id | unit_id
 1  | 22      | 1       | 4

这表明用户已选择任何带有酒精的条目,应始终转换为升。

这是我的问题,在我的逻辑中我会进行这些转换。

我使用CAKEPHP,这是一个通常的MVC框架。我应该在模型中进行转换吗?在控制器?这是什么最好的做法。我是否为此选择了最优化的路线?

我计划稍后为单位/剂量添加更多功能,因此我需要以最有效的方式进行数据库设置,以便让我使用数据(显示图形,统计数据等)进行大量精彩计算

2 个答案:

答案 0 :(得分:0)

您应该有输入和输出方法。那些应该从输入单元转换为用于存储数据的一个标准单元。 您可以在模型的setter中执行此操作。 即。

class userInTake {

  private $userId; 
  private $drugId;
  private $dose;

  public function setDrugUse($drugId,$dose,$unitId) {
    // $convert dose to you default unit for this drug
    $this->dose   = yourConversionMethod($dose,$unit,$desiredUnit);
    $this->userId = $userId;
    $this->drugId = $drugId;
  }
  ...
}

在将用户输入存储到模型中时,您可以进行转换。 因此,例如,如果用户输入他在星期一服用4升酒精,则将升数转换为ml,然后存储ml值。 因此,如果一个用户三次出现,星期一4l,星期二40ml,星期五2,4l,你将每个输入转换为ml。 显示平均值时,您将获得6440ml。

您的输出功能可以选择最适合显示值的单位(即如果ml值> 10000,则显示为升)。

这样您就不必存储不同的单位,只需要您的单位进行输入/输出转换。这应该使计算变得更加容易。

答案 1 :(得分:0)

理想的设置是任何与数据相关的操作都应该在模型中。您可以覆盖afterFind()方法,在查询后立即进行转换,并准备好使用数据。

http://book.cakephp.org/2.0/en/models/callback-methods.html#afterfind

记住这个理念:胖模特,瘦小的控制者。