ben*_*ail 0 php mysql units-of-measurement
我正在使用一个LAMP Web应用程序,该应用程序使用不同的度量单位来管理大量数据。此php应用程序使用自定义MVC框架。现在,我们在不同的国家/地区拥有客户,我们希望向客户提供公制,英制或组合之间的选择。
当前,所有数据都保存在我们的MySQL数据库的国际单位中。某些表有多个列,其中包含具有不同单位的数据。管理客户(用户)选择的单位中所有数据的显示的最佳数据库架构是什么?
是否有任何可以帮助我们的php类,php函数或Web服务?
谢谢!
更新:
如果我决定使用类似Zend Framework类的UnitConverter,那么为数据库中的每个数据定义单位的最佳方法是什么?
该问题的解释有点含糊,我不确定应用程序的范围,但是从系统架构的角度来看,如果您使用的是MVC框架,则可能希望将所有数据库单元保留在相同,并创建一个UnitConversion控制器。该控制器将采用标准单位作为输入,并根据所需单位输出一个值。数据库中的用户/客户记录上将保留一个标志,以让您知道他们喜欢哪个单元,这样您就不会在两次登录之间丢失此信息。将标准单位格式的值(例如米)和所需单位的标志(例如“ FEET”)传递到控制器中,然后进行转换并返回一个值。
我不会尝试在数据库中保留不同的单元类型,因为您可能最终会编写各种代码来尝试管理异常和维护(例如,当客户端更改其单元时更新所有值)。在数据库中保留一个标准单位,并通过php类进行转换,这与Robert提到的Zend Framework的方式类似。谷歌搜索“ php单位转换”将调出一些适合您需要的类。
更新时:
仍然不确定我是否看到了整个问题,但我将尽我所能尽力回答。和以前一样,最好在数据库中保留1个单位制,例如metric。user_pref中的measurement_type告诉客户想要什么,例如“ IMPERIAL”。根据数据库分布的程度,您可以选择以下两种解决方案之一来保存值:
对于数据库中的项目,您可能具有不同的属性(列),例如重量,高度,体积等。
您可能有一个包含项目的项目表。然后,您将拥有一个包含属性的属性表。属性表具有4列:property_id(主键),property(HEIGHT,WIDTH,LENGTH,WEIGHT),property_type(SIZE,MASS,VOLUME,AWESOMENESS)和值。然后,您有一个Property_Lookup表,该表具有2列:item_id,property_id和这3个表之间的联接将为您提供属于Item的每个属性的所有值和单位类型。在这种模式下,我仍将所有条目保留在单个单位系统的“值”列中(在此示例中为度量标准)。有关多对多关系的更多信息,请参见此链接(http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php)。
您的模型将检索数据并将这些属性封装在Unit {system(METRIC *,IMPERIAL,BOTH); 类型(SIZE,MASS,VOLUME); 迷你模型。将其传递给您的控制器。在渲染时,您的View将根据客户端的需求获得一个单位值,因此,当Controller将您View的数据放在一起时,它将通过UnitConversion库发送Unit对象。UnitConversion库将检查用户模型中客户端的首选系统以及Unit模型中的“系统”,并进行必要的转换(因为Library可以假设Unit模型中的系统来自数据库时是公制的,因此轻松一点)。然后,它将以正确的单位输出一个数字(如果选择了两者,则为单位),该数字可以传递到视图。
上面的简短描述是,在处理系统体系结构时,始终没有针对问题的“正确”解决方案。这就是我根据给定的信息组织事物的方式,但是您可能需要对其进行大量调整,以使其与您正在使用的内容完美契合。就是说,我将调整以上内容在您的系统中工作,而不调整您的系统以使以上内容工作!希望这能给您一些好主意。