2008-11-14 16 views
18

पिछले 3 कंपनियों में मैंने काम किया है, फोन नंबर कॉलम प्रकार वर्कर (एन) हैं। इसका कारण यह है कि वे एक्सटेंशन स्टोर करना चाहते हैं (ext 333)। लेकिन हर मामले में, "-" अक्षर डालने और अद्यतन करने पर अलग हो जाते हैं। मुझे समझ में नहीं आता कि ".ext" अक्षर स्टोर करने के लिए ठीक क्यों हैं, लेकिन चरित्र नहीं। क्या किसी और ने इसे देखा है और इस तरह से ऐसा करने के लिए आप किस स्पष्टीकरण के बारे में सोच सकते हैं? यदि आप स्टोर करना चाहते हैं तो संख्याएं हैं, तो क्या आप एक int फ़ील्ड का उपयोग बंद नहीं कर रहे हैं? इसके विपरीत, यदि आप संख्या को स्ट्रिंग/वर्कर के रूप में संग्रहीत करना चाहते हैं, तो सभी पात्रों को क्यों न रखें और लिखने पर स्वरूपण और सफाई पर स्वरूपण से परेशान न हों?डेटाबेस में फोन नंबर कॉलम

मुझे अन्य तरीकों से फोन नंबर संग्रहण लागू करने के अन्य तरीकों के बारे में सुनने में भी रूचि है। भंडारण के फोन नंबर के साथ

+4

@ ओनोरीओ: ऐसा नहीं है कि यह यहां कैसे काम करता है। इसे सटीक डुप्लिकेट के रूप में बंद करने के लिए वोट दें, डाउनवोट न करें। – mpen

+0

उस समय मुझे लगता है कि बंद करने के लिए मतदान करने की क्षमता नहीं है। लेकिन मैं भविष्य के उदाहरणों के लिए इसे ध्यान में रखूंगा। –

उत्तर

12

एक बिंदु एक अग्रणी 0.

जैसे है: 01202 8,765,432

किसी पूर्णांक स्तंभ में, 0, हिस्सा निकाल दिया जाएगा जो फ़ोन नंबर अमान्य बना देता है।

मैं पर कोई अनुमान खतरे हैं - रिक्त स्थान के लिए बदली जा रही है क्योंकि वे वास्तव में कुछ भी मतलब न है

जैसे: 123-456-789 = 123 456 789 = 123456789

+2

अग्रणी 0 फोन # एस के लिए स्ट्रिंग के साथ चिपकने के लिए एक शानदार बिंदु है ... – Codewerks

29

त्वरित परीक्षण: आप जा रहे हैं फोन नंबर जोड़ने/घटाना/गुणा/विभाजित करने के लिए? नहीं। इसी तरह एसएसएन के लिए, फोन नंबर डेटा के अलग-अलग टुकड़े होते हैं जिनमें वास्तविक संख्याएं हो सकती हैं, इसलिए एक स्ट्रिंग प्रकार शायद सबसे उपयुक्त है।

+2

ग्रेट तर्क। संख्याओं के रूप में अंकों की सोच की मानसिकता में फंसना इतना आसान है। तुम बिलकुल सही हो। यहां, अंक वास्तव में संख्याएं नहीं हैं लेकिन स्ट्रिंग/टेक्स्ट/वर्कर प्रकार हैं। मुझे प्यार है जब कोई धारणाओं को इंगित करता है जो मैं महसूस करता हूं कि मैं उन्हें बना देता हूं। – Dinah

+0

हां, एक स्ट्रिंग प्रकार सबसे अधिक एप्राइपियेट है - जब तक इसमें चेक बाधाएं हों। –

+0

सहमत हुए। ज़िप कोड, सड़क संख्या उन फ़ील्ड के अन्य अच्छे उदाहरण हैं जिन्हें आप संख्यात्मक बनाना नहीं चाहते हैं। – dpurrington

0

कुछ पात्रों को स्ट्रिप करना और डेटाबेस तालिका किसी अन्य सिस्टम को चलाने के लिए जा रही है, तो दूसरों का प्रभाव हो सकता है, उदा। कुछ प्रकार के आईपी टेलीफोनी। शामिल सिस्टमों के आधार पर, आदि 3.333 को प्रत्यय के रूप में वैध होना संभव हो सकता है, जबकि डेवलपर्स स्ट्रिंग में "-" के लिए जिम्मेदार नहीं हो सकते हैं (और हाँ, मैं यहां अनुमान लगा रहा हूं ...)

एक int के बजाय एक वर्चर के रूप में भंडारण के लिए, यह सिर्फ मेरे लिए सामान्य ज्ञान है। जैसा कि पहले उल्लेख किया गया है, एक अग्रणी क्षेत्र में अग्रणी शून्य को छीन लिया जा सकता है, एक इंट फील्ड पर क्वेरी अंतर्निहित गणित कार्य कर सकती है (जो टेक्स्ट से अलग-अलग "-" व्याख्या भी कर सकती है, आप 555-1234 दर्ज नहीं करना चाहते हैं यह -679 के रूप में संग्रहीत है?)

संक्षेप में, मुझे सटीक तर्क नहीं पता, लेकिन कुछ संभावनाओं को कम कर सकते हैं।

+0

नहीं हो सकता है, डेटा को अधिक मानव पठनीय रूप में संग्रहीत करना बेहतर नहीं होगा, और फिर इसे भेजने से पहले तत्काल किसी भी आवश्यक वर्ण को पार्स करें टेलीफोनी सिस्टम के लिए। – Kibbee

+0

शायद यह होगा, हाँ। मैं एक प्रणाली डिजाइन नहीं कर रहा हूं, बस संभावित स्पष्टीकरण की पेशकश कर रहा हूं। :) – ZombieSheep

3

निजी तौर पर, मैं फ़ोन नंबर कहां से कहता हूं, इस पर निर्भर करता है कि मैं किसी भी पात्र को नहीं हटाऊंगा, इसका मतलब अलग-अलग चीजें हो सकता है। फोन नंबर को उस सटीक प्रारूप में छोड़ दें, जैसा कि स्पष्ट रूप से किया गया है, जिस तरह से इसे टाइप करने वाले व्यक्ति को इसे देखने के लिए उपयोग किया जाता है।

0

मैं अंकों को एक स्ट्रिंग के रूप में स्टोर करने का विकल्प चुनता हूं और अपने प्रदर्शन कोड में विभिन्न "()" और "-" जोड़ता हूं। यह अंतरराष्ट्रीय संख्याओं के साथ और अधिक कठिन हो जाता है। हम देश के आधार पर विभिन्न "अंतर्राष्ट्रीयकृत" प्रदर्शन प्रारूपों को संभालते हैं।

1

इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे स्टोर करते हैं, जब तक यह है। मानक स्वरूपण वर्णों को अलग करना है, लेकिन यदि आप उन मानों पर क्वेरी करने की आवश्यकता है तो आप अलग-अलग देश कोड, क्षेत्र कोड, विनिमय और एक्सटेंशन भी स्टोर कर सकते हैं। फिर, आवश्यकता यह है कि यह सुसंगत है - अन्यथा यह पूछना एक पिटा है।

0

मुझे क्या करना है अगर मुझे पता है कि फ़ोन नंबर केवल उत्तरी अमेरिका जैसे विशिष्ट क्षेत्र में होने जा रहे हैं, तो प्रवेश को 4 फ़ील्ड में बदलना है। क्षेत्र कोड के लिए 3, उपसर्ग के लिए 3, लाइन के लिए 3, और विस्तार के लिए शायद 5।मैं फिर इसे 'फ़ील्ड' के साथ 1 फ़ील्ड के रूप में सम्मिलित करता हूं और शायद एक्सटेंशन को नामित करने के लिए 'e' डाल सकता हूं। पाठ्यक्रम की किसी भी खोज को भी उसी प्रक्रिया का पालन करने की आवश्यकता है। यह सुनिश्चित करता है कि मुझे अधिक नियमित डेटा मिल जाए और वास्तव में एक फोन कॉल करने के लिए संख्या का उपयोग करने की अनुमति भी दी जाए, एक बार - और एक्सटेंशन हटा दिए जाने के बाद। मैं आसानी से मूल 4 फ़ील्ड पर भी वापस आ सकता हूं।

0

अच्छी चीजें! ऐसा लगता है कि मुख्य बिंदु यह है कि फोन नंबर का स्वरूपण वास्तव में डेटा का हिस्सा नहीं है बल्कि इसके बजाय स्रोत देश का एक पहलू है। फिर भी, संख्या के विस्तार भाग को रखते हुए, कोई डेटा से फ़ॉर्मेटिंग को अलग करने के मॉडल को तोड़ सकता है। मुझे संदेह है कि सभी देश एक एक्सटेंशन का वर्णन करने के लिए एक ही वाक्यविन्यास/प्रारूप का उपयोग करते हैं। इसके अतिरिक्त, यदि एक फोन सिस्टम के साथ एकीकृत करना एक (संभव) आवश्यकता है, तो एक्सटेंशन को अलग से स्टोर करना बेहतर होगा और जैसा कि अपेक्षित है, संदेश बनाएं। लेकिन मार्क भी एक अच्छा मुद्दा बनाता है कि यदि आप सुसंगत हैं, तो शायद इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे स्टोर करते हैं क्योंकि आप लगातार पूछताछ और प्रक्रिया कर सकते हैं।

अन्य प्रश्न के लिंक के लिए एरिक धन्यवाद।

1

एक और कारण है कि मैं फोन नंबरों को 'संख्याओं' के रूप में स्टोर न करने के बारे में सोच सकता हूं लेकिन पात्रों के तारों के रूप में, यह अक्सर सॉफ़्टवेयर स्टैक का पर्याप्त हिस्सा होता है जिसका उपयोग आप डेटाबेस तक पहुंचने के लिए करेंगे (PHP, मैं आपको देख रहा हूं) कुछ लंबे और/या विदेशी फोन नंबरों को स्टोर करने में सक्षम होने के लिए बड़े पर्याप्त पूर्णांक (मूल रूप से) का समर्थन नहीं करेगा।

सबसे बड़ा संख्या 32-बिट ले जा सकता है कि, हस्ताक्षर के बिना, 4294967295 यही कारण है, बस किसी भी रूसी मोबाइल फोन नंबर के लिए काम करेगा नहीं ले, उदाहरण के लिए, संख्या 4959261234.

तो है आप अपने आप को एक है 32-बिट्स के बराबर संख्या डेटा ले जाने के लिए एक रास्ता खोजने की अतिरिक्त असुविधा। हालांकि डेटाबेस ने लंबे समय तक बहुत बड़े पूर्णांक का समर्थन किया है, फिर भी आपको शोस्टॉपर के लिए श्रृंखला में केवल एक खराब लिंक की आवश्यकता है। PHP की तरह, फिर से।

0

जब कोई स्वचालित टेलीफोन सिस्टम फ़ोन कॉल करने के लिए फ़ील्ड का उपयोग करता है तो यह यह बताने में सक्षम नहीं हो सकता है कि इसे किस वर्ण का उपयोग करना चाहिए और इसे डायलिंग में अनदेखा करना चाहिए। एक इंसान को "(" या ")" या "-" चरित्र दिखाई दे सकता है और पता है कि इन्हें फ़ोन नंबर के एरिया कोड, एनपीए और एनओक्स को अलग करने वाले डिलीमीटर माना जाता है। याद रखें कि प्रत्येक चरित्र एक बाइनरी पैटर्न का प्रतिनिधित्व करता है, जब तक कि अनदेखा करने के लिए पूर्व-प्रोग्राम नहीं किया जाता है, स्वचालित डायलर द्वारा दर्ज किया जाएगा। इसके लिए खाते में केवल उन पात्रों के बराबर स्टोर करना बेहतर होता है जो उपयोगकर्ता फोन हैंडसेट पर दबाएंगे और इससे भी बेहतर होगा कि व्यक्तिगत मान अलग-अलग कॉलम में संग्रहीत किए जाएंगे ताकि डायलर स्ट्रिंग को पार्स किए बिना अलग-अलग फ़ील्ड का उपयोग कर सके।

डायलिंग ऑटोमेशन का उपयोग न करने पर भी, भविष्य में अपडेट करने की आवश्यकता नहीं रखने वाली चीज़ों को स्टोर करना एक अच्छा अभ्यास है। स्ट्रिंग्स से उन्हें अलग करने से फ़ील्ड के बीच वर्ण जोड़ना बहुत आसान है।

स्ट्रिंग बनाम पूर्णांक डेटाटाइप का उपयोग करने की टिप्पणी में स्ट्रिंग्स के ऊपर नोट किया गया है, देशों के बीच भिन्नताओं के आधार पर फोन नंबरों को स्टोर करने का उचित तरीका है। इसके लिए एक महत्वपूर्ण चेतावनी है हालांकि उसमें रिपोर्टिंग के आंकड़े एकत्र करते समय (यानी कितने नंबर या कॉल के एसयूएम) चरित्र तार पूर्णांक की तुलना में गिनने के लिए बहुत धीमे होते हैं। इसके लिए एक पहचान स्तंभ के रूप में एक पूर्णांक जोड़ने के लिए महत्वपूर्ण है जिसका उपयोग आप वर्चर या चार फ़ील्ड डेटाटाइप के बजाय गिनने के लिए कर सकते हैं।

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