2012-11-21 9 views
6

मुझे अपने मामले में एक आरडीबीएमएस, माईएसक्ल का उपयोग करके मुद्रा विनिमय दर क्रॉस टेबल (उदा।) के मूल्यों को स्टोर करने की आवश्यकता है।मुद्रा विनिमय दर डिज़ाइन और स्टोर करें क्रॉस टेबल

उपयोगकर्ता प्रतिदिन आंकड़े अपडेट करने जा रहा है और सिस्टम विभिन्न संस्करणों को स्टोर करेगा।

मैं सोच रहा था कि आप टेबल कैसे डिजाइन करेंगे या यदि आप मॉडल चाहते हैं।

सबसे आसान तरीका है, जाहिर है, है से के साथ एक मेज का उपयोग करके करने के लिए और स्तंभों

from: char(3) 
to: char(3) 
value: decimal(6,4) 
inverse_value: decimal(6,4) 

को महत्व देता है, लेकिन मुझे पता है कि अगर वहाँ अन्य (बेहतर) समाधान कर रहे हैं अच्छा लगेगा।

बहुत बहुत धन्यवाद।

संपादित

मैं माफी माँगता हूँ अगर यह स्पष्ट नहीं था, लेकिन मैं विशेष रूप से प्रदर्शन और scalability में दिलचस्पी रखता हूँ।

मूल्य/उलटा_वर्त संरचना को बनाए रखना और 90 मुद्राएं दी गई, मुद्रा विनिमय क्रॉस तालिका को प्रति दिन 4,050 रिकॉर्ड की आवश्यकता होगी।

यदि हर दिन एक नया संस्करण बनाया जाता है, तो एक वर्ष में 1,478,250 रिकॉर्ड होंगे और प्रश्न भुगतना शुरू हो सकता है।

मैंने टेबल लागू किया है और यह ठीक काम कर रहा है, क्रॉस टेबल को प्रस्तुत करना काफी तेज़ है और मैं इससे खुश हूं।

मैं बस सोच रहा था कि इसे लागू करने का एक बेहतर तरीका है या नहीं।

+2

ठीक है, मैं से और क्षेत्रों के लिए के बारे में थोड़ा सावधान रहना चाहते हैं। आप एक और आईडी को चार (3) से कनेक्ट कर सकते हैं यदि इसे किसी भी डिस्प्ले में इस्तेमाल किया जा रहा है (यदि आपका डिस्प्ले बदलता है तो आप अपनी अनुक्रमणिका को गड़बड़ नहीं करना चाहते हैं)। इसके अलावा ... मूल्य और उलटा_वृत्त क्या हैं? मैं व्यक्तिगत रूप से बस से, दर और दर का उपयोग करता हूं। – RonaldBarzell

+0

हाँ, स्कीमा सिर्फ एक सरलीकृत संस्करण था, मेरे मामले में मेरे पास पूर्णांक आईडी के साथ मुद्राओं के लिए एक अतिरिक्त तालिका है। इसके अलावा, inverse_value की आवश्यकता है क्योंकि आंकड़े अलग हो सकते हैं। –

+0

किसी एक जवाब को इंगित करने का कोई मौका? – Ewen

उत्तर

3

यह एक अच्छी शुरुआत की तरह दिखता है, मैं एक तिथि फ़ील्ड भी जोड़ूंगा (डेटाटाइम फ़ील्ड के बजाय यदि आप केवल इन मानों को अपडेट कर रहे हैं)। तो हो सकता है कुछ इस तरह:

currency_code_from: char(3) 
currency_code_to: char(3) 
conversion_value: decimal(6,4) 
inverse_conversion_value: decimal(6,4) 
effective_date: date() 

मुझे यकीन है कि क्या विभिन्न तरीकों से आप तालिका क्वेरी करने के लिए योजना बना रहे हैं, कर रहे हैं, क्योंकि यह आपके सूचकांक आवश्यकताओं हुक्म होगा, लेकिन मैं शायद currency_code_from भर में एक यौगिक प्राथमिक कुंजी का प्रयोग करेंगे नहीं कर रहा हूँ , currency_code_to, और effective_date फ़ील्ड, फिर अपने विशिष्ट प्रश्नों के लिए आवश्यक अनुक्रमणिका जोड़ें।

तब आप उस से संबंधित के लिए एक अतिरिक्त तालिका के लिए चाहते हो सकता है मुद्रा और मुद्रा प्रतीक के नाम संग्रहीत करता है, तो प्रदर्शन के लिए आवश्यक है (यह भी शायद देश झंडा छवि से लिंक आपको लगता है कि उपयोग करना चाहते हैं)

currency_code: char(3) 
currency_name: varchar(50) 
currency_symbol: char(3) 
currency_image: varchar(100) 

इस तालिका पर प्राथमिक कुंजी मुद्रा_code होगा।

2

मार्को, आपको शायद एक तिथि फ़ील्ड की आवश्यकता होगी या एक बुलियन हैकंटेंट ताकि आप नवीनतम सीसी रूपांतरण का चयन कर सकें।

क्या आप आंकड़े खरीदना और बेचना चाहते हैं? आम तौर पर आप सुनिश्चित करते हैं कि संगठन खोने के लिए सीसी की खरीद और बिक्री के बीच थोड़ा सा रास्ता नहीं है। इसे कुछ लोगों द्वारा समझदार व्यावसायिक दृष्टिकोण कहा जाता है और दूसरों द्वारा गौजिंग किया जाता है।

यदि इन आंकड़ों को मैन्युअल रूप से दर्ज किया गया है, तो सुनिश्चित करें कि आप मुद्रा के पिछले आंकड़े को देखते हैं और यदि 3% की विसंगति है तो उपयोगकर्ता को चेतावनी दें।

एकमात्र अन्य मुद्दा तब होता है जब विनिमय दर दिन में व्यापक रूप से उतार-चढ़ाव करती है। क्या आप युद्ध की घोषणा से पहले केवल एक रूपांतरण के साथ अटक जाना चाहते हैं?

दिखाता है कि आप सही रास्ते पर हैं।

+0

हां, वे खरीद/बेचने वाले आंकड़े हैं। मैंने कहा कि क्लाइंट चीजों को सरल बनाने के लिए मैन्युअल रूप से मूल्यों को इनपुट करने जा रहा था। हकीकत में, वह एक आंतरिक उपकरण द्वारा स्वचालित रूप से उत्पन्न एक्सेल अपलोड करने जा रहा है। –

2

मैं व्यक्तिगत रूप से "प्राकृतिक" कुंजी का उपयोग नहीं करता।

country 
------- 
country_id : integer not null auto_increment 
name : varchar(255) 
abbrev : varchar(255) 
motto : varchar(255) 
. . . 

फिर अपने crosstab में उन लोगों के लिए आईडी का उपयोग:

currency_exchange 
----------------- 
currency_exchange_id : integer not null auto_increment 
from_country_id : integer 
to_country_id : integer 
value : decimal(10,4) 
inverse_value : decimal(10,4) 

यह मैं एक प्रतीक करने के लिए देश का नाम बदलने की सुविधा देता है इसके बजाय, देशों/मुद्रा-होने-संस्थाओं की एक मेज है , पूर्ण नाम, जो कुछ भी, क्रॉसस्टैब तालिका की परिभाषा को बदलने के बिना। रूपांतरण मानों के लिए पूछताछ करते समय दो तालिकाओं में शामिल हों।

इसके अलावा, मैं दशमलव (10,4) के साथ गया और मैं अधिकतम संभव दिखने की अनुशंसा करता हूं। यह आकार को प्रतिबंधित करने के लिए प्रोग्रामिंग अद्यतन सिरदर्द के लायक नहीं है और बाद में पता चलता है कि आपने एक आकार चुना है जो बहुत छोटा है। यह उन बगों से निपटने के लिए उपयुक्त बनाने के लिए पर्याप्त जगह नहीं लेता है। वर्चर के लिए आप नाम के लिए उपयोग करते हैं। वर्चर्स कुशलता से संग्रहित होते हैं।

इसके अलावा, value हमेशा 1.00 होने वाला नहीं है? (यानी, क्या आप हमेशा किसी अन्य मुद्रा में 1 से कुछ उलटा नहीं करते हैं?) यदि ऐसा है, तो आप तालिका से value कॉलम छोड़ सकते हैं।

मुझे व्यक्तिगत रूप से सभी तालिकाओं पर जेनरेट किए गए आईडी मान पसंद हैं, इसलिए मैंने एक को क्रॉसस्टैब पर रखा है, लेकिन कुछ लोग सुझाव दे सकते हैं कि यह अनावश्यक है। मैं अक्सर बाद में पाता हूं, जब मैंने इसे छोड़ना चुना है, तो मेरी इच्छा है कि मैंने इसे जोड़ा होगा।

मैं मुद्रा के नाम के लिए एक और मेज होने देख सकते हैं:

currency 
-------- 
currency_id : integer not null auto_increment 
country_id : integer 
name : varchar(255) 
symbol : varchar(255) 
+0

मैं मानता हूं, मुझे प्राकृतिक चाबियाँ पसंद नहीं हैं, मेरा सिर्फ एक सरलीकृत संस्करण था। मैं वास्तव में प्रदर्शन और स्केलेबिलिटी में रूचि रखता था, मैं स्पष्ट होने की कोशिश कर रहा हूं पोस्ट को अपडेट कर दूंगा। इसके अलावा, मान हमेशा होता है! = 1 जबकि विपरीत_वृत्त, सिद्धांत में 1/मान होना चाहिए, खरीद/बिक्री प्रकृति की वजह से अलग हो सकता है। अंत में, टिप को दशमलव के लिए धन्यवाद, यह निश्चित रूप से एक अच्छा मुद्दा है! –

+0

पुन: प्रदर्शन, आदि। मेरे पास एक बार एक समान क्रॉसस्टैब था (गेमिंग विरोधियों के बीच हत्याओं की संख्या) और यह वही है जो मैं आया था। अच्छा काम करता है। – Marvo

संबंधित मुद्दे