0

我正在开发一个 LAMP Web 应用程序,该应用程序使用不同的测量单位管理大量数据。此 php 应用程序使用自定义 MVC 框架。我们现在在不同国家拥有客户,我们希望为客户提供公制、英制或组合之间的选择。

目前,所有数据都以国际单位保存在我们的 MySQL 数据库中。有些表有多个列,其中包含不同单位的数据。管理客户(用户)选择的单位中所有数据的显示的最佳数据库架构是什么?

是否有任何 php 类、php 函数或 Web 服务可以帮助我们?

谢谢!


更新 :

如果我决定使用像 Zend Framework 类这样的 UnitConverter,那么为数据库中的每个数据定义单位的最佳方法是什么?

  • 一个新表“measurement_unit”包含我在数据库中的每种数据类型的测量类型?
  • 我应该在数据库中的每个数据列旁边添加一个新的“measurement_type”列吗?
4

2 回答 2

5

问题的解释有点模糊,我不确定应用程序的范围,但从系统架构的角度来看,如果您使用的是 MVC 框架,您可能希望将所有数据库单元保留在相同并创建一个 UnitConversion 控制器。该控制器将标准单位作为输入,并根据所需单位输出一个值。将在数据库中的用户/客户记录上保留一个标志,让您知道他们更喜欢哪个单元,这样您就不会在登录之间丢失此信息。将标准单位格式的值(例如,米)和所需单位的标志(例如,'FEET')传递到您的控制器中,让它进行转换并返回一个值。

我不会尝试在数据库中保留不同的单位类型,因为您最终可能会编写各种代码来尝试管理异常和维护(例如,当客户更改其单位时更新所有值)。在数据库中保留一个标准单元,并通过类似于 Robert 提到的 Zend Framework 的 php 类进行转换。谷歌搜索“php 单位转换”将显示一些可能适合您需要的类。

更新:

仍然不确定我是否看到了整个问题,但我会尽我所能回答。和以前一样,最好在数据库中保留 1 个单位系统,例如公制。user_pref 中的measurement_type 告诉客户想要什么,比如“IMPERIAL”。根据数据库的分布情况,您可以选择以下两种解决方案之一来保存值:

  1. 对于数据库中的项目,您可能具有不同的属性(列),例如重量、高度、体积等。

  2. 您可能有一个包含项目的项目表。然后你有一个包含属性的属性表。Property 表有 4 列:property_id(主键)、property(HEIGHT、WIDTH、LENGTH、WEIGHT)、property_type(SIZE、MASS、VOLUME、AWESOMENESS)和 value。然后你有一个 Property_Lookup 表,它有 2 列:item_id、property_id,这 3 个表之间的连接将为你提供属于一个项目的每个属性的所有值和单位类型。在此架构中,我仍会将“值”列中的所有条目保留在一个单位系统中(在此示例中为度量)。有关多对多关系的更多信息,请参见此链接 ( http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php )。

您的模型将检索数据并将这些属性封装在 Unit { system(METRIC*,IMPERIAL,BOTH); 类型(尺寸、质量、体积);价值}迷你模型。将其传递给您的控制器。在渲染时,您的 View 会根据客户的需要期望一个单位值,因此当您的 Controller 为您的 View 组合数据时,它将通过 UnitConversion 库发送 Unit 对象。UnitConversion 库将检查客户首选系统的用户模型和 Unit 模型中的“系统”并进行必要的转换(由于库可以假设 Unit 模型中的系统在来自数据库时是公制的,因此它使一步容易一点)。然后它将以正确的单位输出一个数字(如果选择了两者,则为单位),可以将其传递给视图。

上面的一句话是,在处理系统架构时,总是没有“正确”的问题解决方案。这就是我根据给定信息组织事物的方式,但您可能需要对其进行大量调整以使其与您正在使用的内容完美契合。也就是说,我会调整以上内容以在您的系统中工作,而不是调整您的系统以使上述内容正常工作!希望这能给你一些好主意。

于 2010-09-20T17:48:16.090 回答
2

请看一下 Zend 组件Zend_Measure

于 2010-09-20T17:36:34.383 回答