समस्या की व्याख्या थोड़ी अस्पष्ट है और मुझे यकीन नहीं है कि आवेदन का दायरा, लेकिन सिस्टम आर्किटेक्चर के दृष्टिकोण से, यदि आप एक एमवीसी ढांचे का उपयोग कर रहे हैं, तो आप शायद अपनी सभी डेटाबेस इकाइयों को रखना चाहेंगे वही और एक यूनिट कनवर्ज़न नियंत्रक बनाएं। यह नियंत्रक मानक इकाई को इनपुट के रूप में लेगा और वांछित इकाई के आधार पर एक मान आउटपुट करेगा। डेटाबेस में आपके उपयोगकर्ता/ग्राहक रिकॉर्ड पर एक ध्वज रखा जाएगा ताकि आपको पता चल सके कि वे कौन सी इकाई पसंद करते हैं ताकि आप लॉगिन के बीच इस जानकारी को न खोएं। मान को एक मानक इकाई प्रारूप (जैसे, मीटर) और वांछित इकाई के ध्वज (जैसे, 'FEET') में अपने नियंत्रक में पास करें और इसे रूपांतरण करने दें और एक मान लौटाएं।
मैं डेटाबेस में विभिन्न यूनिट प्रकारों को रखने की कोशिश नहीं करूंगा क्योंकि आप अपवादों और रखरखाव को प्रबंधित करने की कोशिश कर रहे सभी प्रकार के कोड लिखना समाप्त कर देंगे (उदाहरण के लिए क्लाइंट अपनी इकाइयों को बदलते समय सभी मानों को अपडेट करना)। डेटाबेस में एक मानक इकाई रखें और एक PHP वर्ग के माध्यम से रूपांतरण करें जैसे रॉबर्ट द्वारा उल्लिखित ज़ेंड फ्रेमवर्क कैसे करता है। गुगलिंग "php यूनिट रूपांतरण" कुछ ऐसी कक्षाएं लाएगा जो आपकी आवश्यकताओं के अनुरूप हो सकती हैं।
अद्यतन पर:
अभी भी यकीन नहीं है कि मैं पूरी समस्या देख रहा हूं, लेकिन मैं जितना अच्छा समझूं उतना अच्छा जवाब देने की कोशिश करूंगा। पहले की तरह डेटाबेस में 1 यूनिट सिस्टम रखना सबसे अच्छा है, मान लीजिए, मीट्रिक। user_pref में माप_प्रकार बताता है कि ग्राहक क्या चाहता है, 'IMPERIAL' कहें। इस पर निर्भर करते हुए कि आपका डेटाबेस कितना फैला हुआ है, आप मूल्यों को बनाए रखने के लिए दो समाधानों में से एक चुन सकते हैं:
-
आपके DB में आइटम के लिए आपके पास अलग-अलग गुण (कॉलम) हो सकते हैं, जैसे वजन, ऊंचाई, आयतन, आदि।
-
आपके पास एक आइटम तालिका हो सकती है जिसमें आइटम हैं। फिर आपके पास एक संपत्ति तालिका है जिसमें गुण हैं। संपत्ति तालिका में 4 कॉलम हैं:संपत्ति_आईडी (प्राथमिक कुंजी), संपत्ति (ऊंचाई, चौड़ाई, लंबाई, वजन), संपत्ति_प्रकार (आकार, द्रव्यमान, मात्रा, अद्भुत), और मूल्य। फिर आपके पास एक Property_Lookup तालिका है जिसमें 2 कॉलम हैं:item_id, property_id और इन 3 तालिकाओं के बीच में शामिल होने से आपको किसी आइटम से संबंधित प्रत्येक संपत्ति के सभी मान और इकाई प्रकार मिलेंगे। इस स्कीमा में मैं अभी भी सभी प्रविष्टियों को 'मान' कॉलम में एक इकाई प्रणाली (इस उदाहरण मीट्रिक में) में रखूंगा। अनेक-से-अनेक संबंधों पर अधिक जानकारी के लिए यह लिंक देखें (http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php )।
आपके मॉडल डेटा को पुनः प्राप्त करेंगे और इन गुणों को एक इकाई {system(METRIC*,IMPERIAL,BOTH) में समाहित करेंगे; प्रकार (आकार, द्रव्यमान, मात्रा); मूल्य} मिनी-मॉडल। इसे अपने नियंत्रक को पास करें। रेंडर करने पर आपका व्यू क्लाइंट की इच्छा के आधार पर एक यूनिट वैल्यू की उम्मीद करेगा, इसलिए जब आपका कंट्रोलर आपके व्यू के लिए डेटा एक साथ रख रहा है तो यह यूनिट ऑब्जेक्ट को यूनिट कनवर्सन लाइब्रेरी के माध्यम से भेजेगा। यूनिट कन्वर्जन लाइब्रेरी क्लाइंट के पसंदीदा सिस्टम के लिए यूजर मॉडल और यूनिट मॉडल में 'सिस्टम' की जांच करेगी और आवश्यक रूपांतरण करेगी (चूंकि लाइब्रेरी मान सकती है कि यूनिट मॉडल में सिस्टम डेटाबेस से आने पर मीट्रिक है, यह इसे बनाता है थोड़ा आसान कदम)। यह तब सही इकाई में एक संख्या का उत्पादन करेगा (इकाइयाँ यदि दोनों को चुना जाता है), जिसे दृश्य में पारित किया जा सकता है।
उपरोक्त पर एक त्वरित शब्द यह है कि हमेशा सिस्टम आर्किटेक्चर में काम करते समय किसी समस्या का कोई 'सही' समाधान नहीं होता है। इस तरह मैं दी गई जानकारी के आधार पर चीजों को व्यवस्थित करूंगा, लेकिन आप जिस चीज के साथ काम कर रहे हैं, उसके साथ पूरी तरह से फिट होने के लिए आपको शायद इसे थोड़ा सा मोड़ना होगा। उस ने कहा, मैं आपके सिस्टम में काम करने के लिए उपरोक्त को ट्वीक करूंगा, और उपरोक्त को काम करने के लिए आपके सिस्टम को ट्वीक नहीं करूंगा! आशा है कि इससे आपको कुछ अच्छे विचार मिलेंगे।