क्या कस्टम डाटा टाइप जैसी कोई चीज है?


14

क्या कस्टम डेटा प्रकारों के लिए MySQL का कोई समर्थन है? उदाहरण के लिए, ज़िप कोड किसी varchar(10)फ़ील्ड में संग्रहीत किए जा सकते हैं , लेकिन उन्हें intरिक्त स्थान के विकल्प के साथ, और एक ध्वज के रूप में संकुचित किया जा सकता है , चाहे वह 5 अंकों या 5 + 4 अंकों वाला ज़िप कोड हो।

क्या ऐसी चीजों के लिए सहज डेटा प्रकार स्थापित करने का एक तरीका है? जहां तक ​​आवेदन का संबंध है, यह एक स्ट्रिंग प्रकार होगा, यदि आवेदन में अमान्य डेटा पारित हो जाता है, तो बस डेटा ट्रंकेशन (चेतावनी के साथ या बिना) होगा।

कस्टम फ़ंक्शंस का उपयोग किया जा सकता है (उदाहरण के लिए, INET_ATONIPv4 पतों के लिए फ़ंक्शन में बनाया गया है । लेकिन वह ऐसी चीज़ों की अनुमति नहीं देता है, zip LIKE '12345%'जिन्हें ठीक से अनुक्रमित किया जाना चाहिए। कस्टम डेटा प्रकारों के लिए एक अच्छी तरह से लिखित समर्थन एक डेटा प्रकार को चिह्नित करने की अनुमति देगा। के रूप में कॉम्पैक्ट। तो कॉम्पैक्ट zip int, जब हल, जैसे कि यह एक था zip varchar(10)

यह कॉलम को निश्चित चौड़ाई के लिए अनुमति देता है, यह 6 या 10 बाइट चर भंडारण को निश्चित चौड़ाई के 4 बाइट तक काटने की अनुमति देगा।

कई लागू उपयोग हैं

  • ज़िप कोड
  • IPv6 पते
  • कस्टम टाइमस्टैम्प फ़ील्ड मिनट स्तर की सटीकता और क्षमता से 2038कम भंडारण उपयोग से परे है datetime, लेकिन कार्यान्वयन के वर्ष से पहले दिनांक का समर्थन करने की कोई आवश्यकता नहीं है (मान लें कि यह 2007 हो सकता है यदि वे सिस्टम में सबसे पुरानी तारीखें हैं)
  • DST को लागू करने वाले टाइमस्टैम्प (जो मौजूद नहीं हैं )
  • दो पत्र अमेरिकी राज्य एक ही बाइट में संग्रहीत किए जा सकते हैं
  • लंबे ENUMs को एक कस्टम डेटा प्रकार में अलग किया DESCRIBEजा सकता है ताकि सभी रैपिंग के साथ आउटपुट इतना गन्दा न लगे।

मुझे उम्मीद है कि डेटा प्रकार हैंडलर को उसी तरह संग्रहीत किया जाएगा जिस तरह से फ़ंक्शन संग्रहीत किए जाते हैं।

किसी भी डेटाबेस इंजन पर इस तरह दूर कुछ भी है? मैं ज्यादातर MySQL का उपयोग करता हूं, लेकिन मैं उत्सुक हूं कि क्या यह कभी लागू किया गया है, एप्लिकेशन को फ़ंक्शन की तरह एक फ़ंक्शन कॉल करने की कमी है INET_ATON

MS SQL को लगता है कि प्रकृति का कुछ है , लेकिन मैं यह जानना चाहूंगा कि क्या यह केवल एक पर्यायवाची से अधिक है। (उदाहरण के लिए booleanके लिए एक पर्याय हो सकता है tinyint(1), या postal_codeमें से एक के लिए charया varchar (5या 9या 10)) समानार्थी नहीं क्या मैं यहाँ के बारे में पूछ रहा हूँ रहे हैं।


mysql के लिए सरल उत्तर afaik: नहीं। यह देखना दिलचस्प होगा कि अन्य आरडीबीएमएस उन चीजों को कैसे संभालते हैं
डेरेक डाउनी

@DTest: आपके पास SQL ​​सर्वर में सृजन प्रकार है: CLR प्रकारों के लिए उपयोगी है। msdn.microsoft.com/en-us/library/ms175007(SQL.90).aspx
gbn

1
@ जॉर्ज बेली: आपका SQL सर्वर लिंक पुराना है: यह SQL Server 2000 के लिए है। और MySQL के लिए stackoverflow.com/q/2451435/27535
gbn

@, (पहली टिप्पणी पर प्रतिक्रिया) टाइप अनुवाद शामिल है, क्या यह उदाहरण के लिए IPv6ए में परिवर्तित हो जाएगा binary(16), या क्या यह एलियासिंग तक सीमित है (जिसे stateएस बनने के लिए इस्तेमाल किया जा सकता है enum)
ब्रायन फील्ड

1
कृपया ध्यान रखें कि ज़िप-कोड को एक अंतरराष्ट्रीय डेटाबेस के लिए काम नहींint करेगा - कनाडा, उदाहरण के लिए, 'ए 9 ए ए 9 ए' के ​​प्रारूप का उपयोग करता है। ज़िप-कोड के लिए एक कस्टम डेटा-प्रकार बनाना शायद एक अच्छा विचार है; हालाँकि, आप फिर से जांच कर सकते हैं कि आप उनमें से कुछ से निपटने की योजना कैसे बना रहे हैं (राज्य को एकल-बाइट क्षेत्र में संग्रहीत करना संभावित 'अन्य' मुद्दे हैं, उदाहरण के लिए)। और दिनांक / समय डेटाटाइप्स को फिर से लागू न करें, जब तक कि प्रदान की गई संयुक्त-अनुपयोगी कमी (आकार की गिनती न हो) - आप लोगों को भ्रमित करेंगे।
क्लॉकवर्क-म्यूजियम

जवाबों:


14

क्या कस्टम डेटा प्रकारों के लिए MySQL का कोई समर्थन है?

सरल उत्तर: नहीं

किसी भी डेटाबेस इंजन पर इस तरह दूर कुछ भी है? मैं ज्यादातर MySQL का उपयोग करता हूं, लेकिन मैं उत्सुक हूं कि क्या यह कभी लागू किया गया है, एप्लिकेशन को INET_ATON फ़ंक्शन जैसे फ़ंक्शन को कॉल करने की कमी है।

ओरेकल के पास CREATE TYPEकुछ हद तक OO वर्ग के अनुरूप है, जिसमें सदस्य फ़ंक्शन और विरासत जैसी विशेषताएं शामिल हैं

Postgres में CREATE TYPEOO क्लासेस (कोई सदस्य फ़ंक्शंस या इनहेरिटेंस) की तरह थोड़ा कम है, लेकिन अविश्वसनीय रूप से लचीला और उपयोगी है, यहां तक ​​कि आपको नए आधार प्रकार बनाने की अनुमति देता है। वहाँ भी है CREATE DOMAINजो वंशानुक्रम या उप-टाइपिंग की अनुमति देता है और मूल रूप से कुछ बाधाओं के साथ एक आधार प्रकार का विस्तार करता है। डिफ़ॉल्ट रूप से, जैसे inet और जियोमेट्रिक प्रकार के पोस्टग्रेज में कुछ दिलचस्प आधार प्रकार होते हैं। Postgres में एक कस्टम डेटाटाइप के लिए C में एक एक्सटेंशन लिख सकता है, जैसे कि इस उदाहरण में base36 डेटा प्रकार के साथ

SQL सर्वर में CREATE TYPEआपको मौजूदा सिस्टम डेटा प्रकार के आधार पर एक कस्टम डेटा प्रकार बनाने की अनुमति मिलती है। उदाहरण के लिए मैं एक प्रकार बना सकता हूं जिसे SSNमूल रूप से परिभाषित किया गया है VARCHAR(11)लेकिन इस तरह से मुझे यह याद रखने की जरूरत नहीं है कि यह कितना बड़ा क्षेत्र है।


1
कृपया इस जवाब को ढेर करने और इसे संपादित करने के लिए स्वतंत्र महसूस करें ताकि हम एक निश्चित संदर्भ प्राप्त कर सकें। मुझे लगा कि सवाल खुद ही सीडब्ल्यू के जवाब को उधार देता है ...
जैक कहते हैं कि topanswers.xyz की कोशिश करें

0

फायरबर्ड के पास डोमेन के माध्यम से इसका समाधान भी है ।

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

डोमेन का उपयोग तालिकाओं और विचारों के लिए स्तंभ परिभाषाओं तक सीमित नहीं है। डोमेन का उपयोग PSQL कोड में इनपुट और आउटपुट मापदंडों और चर घोषित करने के लिए किया जा सकता है।


क्या Firebird MySQL है?
एंथोनी जेनोविसे

नहीं, फायरबर्ड फायरबर्ड है :) मैंने अभी नोटेर आरडीएमएस के रूप में उल्लेख किया है जिसमें ऐसी सुविधा है।
तिबोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.