Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да управлявате мерни единици в PHP уеб приложение?

Обяснението на проблема е малко неясно и не съм сигурен в обхвата на приложението, но от гледна точка на системната архитектура, ако използвате MVC рамка, вероятно бихте искали да запазите всичките си единици база данни същото и създайте контролер UnitConversion. Този контролер приема стандартната единица като вход и извежда стойност въз основа на желаната единица. Флаг ще бъде запазен на вашия потребителски/клиентски запис в базата данни, за да ви уведоми коя единица предпочитат, така че да не губите тази информация между влизанията. Предайте стойността в стандартен формат на единица (да речем метри) и флага на желаната единица (да речем „FEET“) във вашия контролер и го оставете да извърши преобразуването и да върне стойност.

Не бих се опитвал да запазя различни типове единици в базата данни, тъй като вероятно в крайна сметка ще пишете всякакви видове код, опитвайки се да управлявате изключенията и поддръжката (актуализиране на всички стойности, когато клиентите променят своите единици, например). Съхранявайте стандартна единица в базата данни и правете реализациите чрез php клас, подобно на начина, по който Zend Framework, споменат от Робърт, прави. Търсенето в гугъл на „php единица преобразуване“ ще покаже някои класове, които може да отговарят на вашите нужди.

ПРИ АКТУАЛИЗАЦИЯ:

Все още не съм сигурен, че виждам целия проблем, но ще се опитам да отговоря възможно най-добре, доколкото разбирам. Както и преди, най-добре е да запазите 1 единица система в базата данни, да речем, метрична. Measurement_type в user_pref казва какво иска клиентът, да кажем „IMPERIAL“. В зависимост от това колко разпръсната е вашата база данни, можете да изберете едно от двете решения за съхраняване на стойности:

  1. За елементи във вашата DB може да имате различни свойства (колони), като тегло, височина, обем и т.н.

  2. Може да имате таблица с елементи, която съдържа елементи. След това имате таблица със свойства, която съдържа свойства. Таблицата Property има 4 колони:property_id (първичен ключ), property (HEIGHT, WIDTH, LENGTH, WEIGHT), property_type (SIZE, MASS, VOLUME, WESOMENESS) и value. След това имате таблица Property_Lookup, която има 2 колони:item_id, property_id и съединението между тези 3 таблици ще ви даде всички стойности и типове единици на всяко свойство, принадлежащо на елемент. В тази схема все още бих запазил всички записи в колоната „стойност“ в система с една единица (в този примерен показател). Вижте тази връзка за повече информация относно връзките много към много (http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php ).

Вашите модели ще извлекат данни и ще капсулират тези свойства в единица { system(METRIC*,IMPERIAL,BOTH); тип (РАЗМЕР, МАСА, ОБЕМ); стойност } мини-модел. Предайте това на вашия контролер. При изобразяване вашият изглед ще очаква единица стойност въз основа на това, което клиентът иска, така че когато вашият контролер събира данни за вашия изглед, той ще изпрати обекти на единица чрез библиотеката за преобразуване на единици. Библиотеката UnitConversion ще провери потребителския модел за предпочитаната от клиента система и „системата“ в модела Unit и ще направи необходимото преобразуване (тъй като библиотеката може да приеме, че системата в модела Unit е метрична, когато идва от базата данни, тя прави това стъпка малко по-лесно). След това ще изведе число в правилната единица (мерни единици, ако са избрани ДВЕТЕ), което може да бъде предадено на изгледа.

Една бърза дума за горното е, че винаги, когато се занимаваме със системна архитектура, няма „правилно“ решение на проблем. Ето как бих организирал нещата въз основа на предоставената информация, но вероятно ще трябва да го коригирате доста, за да пасне идеално на това, с което работите. Въпреки това бих променил горното, за да работи във вашата система, а не да променям вашата система, за да накарам горното да работи! Надяваме се, че това ви дава някои добри идеи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията MID() в MySQL

  2. Най-бързият начин за вмъкване на масови данни в базата данни на Mysql

  3. MySql &PHP - Как да конвертирате низ в DATETIME

  4. Как да свържете множество редове в една колона в MySQL

  5. как да броим хоризонтални стойности в база данни?