जब आप कहते हैं "सभी डेटाबेस इसका समर्थन नहीं करते हैं", मुझे लगता है कि इसे लगाने का एक बेहतर तरीका निम्नलिखित है:
प्रत्येक प्रमुख डेटाबेस इसका समर्थन करता है, क्योंकि वे बड़े पैमाने पर ट्रिगर, फ़ंक्शन और अन्य उन्नत सुविधाओं का समर्थन करते हैं।
यह हमें इस निष्कर्ष पर पहुंचाता है कि यह उन्नत SQL का हिस्सा है और कुछ बिंदु पर समझ में आता है।
Do people actually use domains in their database designs?
आवश्यक कवरेज के कारण कम संभव है, (ऑपरेटरों, अनुक्रमित आदि पर विचार करते हुए)
If so to what extent?
फिर से, जैसा कि सीमित हो सकता है, यदि एक मौजूदा प्रकार थोड़ा अतिरिक्त परिभाषित तर्क (यानी चेक आदि) के साथ संयुक्त हो सकता है, तो वह क्यों कर सकता है?
How useful are they?
काफी सारा। आइए एक दूसरे के लिए MySQL की तरह एक अच्छा-अच्छा DBMS पर विचार करें, जिसे मैंने एक कारण के लिए इस उदाहरण के लिए चुना है: यह inet (IP पता) प्रकार के लिए अच्छे समर्थन का अभाव है।
अब आप एक ऐसा एप्लिकेशन लिखना चाहते हैं, जो ज्यादातर IP डेटा पर केंद्रित है, जैसे रेंज और वह सब, और आप डिफ़ॉल्ट प्रकार और इसकी सीमित कार्यक्षमता के साथ फंस गए हैं, आप या तो अतिरिक्त फ़ंक्शन और ऑपरेटर लिखेंगे (जैसे कि पोस्टग्रेक्यूएल में मूल रूप से समर्थित हैं) उदाहरण) या आपके द्वारा आवश्यक प्रत्येक कार्यक्षमता के लिए बहुत अधिक जटिल प्रश्न लिखें।
यह एक ऐसा मामला है जहां आप आसानी से अपने स्वयं के कार्यों (inet >> ing in PostgreSQL: रेंज ऑपरेटर में निहित) को परिभाषित करने में लगने वाले समय को उचित ठहराएंगे।
उस बिंदु पर, आपने पहले से विस्तारित डेटाटाइप समर्थन को उचित ठहराया है, एक नया डेटाटाइप को परिभाषित करने के लिए केवल एक अन्य चरण है।
अब वापस PostgreSQL के पास जो वास्तविक अच्छा प्रकार का समर्थन है, लेकिन कोई अहस्ताक्षरित int नहीं है .. जिसकी आपको आवश्यकता है, क्योंकि आप वास्तव में भंडारण / प्रदर्शन (जो जानते हैं ...) के बारे में चिंतित हैं, अच्छी तरह से आपको इसे जोड़ने की आवश्यकता होगी ऑपरेटर्स - हालांकि बेशक यह ज्यादातर मौजूदा इंट ऑपरेटर्स व्युत्पन्न कर रहा है।
What pitfalls have you encountered?
मैं इसके साथ नहीं खेलता हूं क्योंकि अभी तक मेरे पास ऐसा कोई प्रोजेक्ट नहीं है, जिसके लिए दोनों को समय की आवश्यकता हो और इसके लिए आवश्यक समय का औचित्य हो।
सबसे बड़ा मुद्दा जो मैं देख रहा हूँ, वह पहिया को सुदृढ़ करना होगा, "सुरक्षित" परत (db) में बगों का परिचय देना, अपूर्ण प्रकार का समर्थन जिसे आप केवल महीनों बाद महसूस करेंगे जब आपका CONCAT (कास्ट * AS varchar) विफल हो जाता है क्योंकि आप एक कास्ट (न्यूटाइप के रूप में) को परिभाषित नहीं किया, आदि।
"असामान्य" आदि के बारे में बात करने के उत्तर हैं, निश्चित रूप से ये हैं और असामान्य होने चाहिए (अन्यथा इसका मतलब है कि डीबीएम में बहुत महत्वपूर्ण प्रकारों की कमी है), लेकिन दूसरी ओर, एक को यह याद रखना चाहिए कि एक (अच्छा) डीबी एसीआईडी है ( एक आवेदन के विपरीत) और यह कि संगति से संबंधित किसी भी चीज को वहां रखा जाना बेहतर है।
ऐसे कई मामले हैं जहां व्यावसायिक तर्क को सॉफ़्टवेयर परत में संभाला जाता है और इसे SQL में किया जा सकता है, जहां यह अधिक सुरक्षित है। एप्लिकेशन डेवलपर्स एप्लिकेशन परत के भीतर अधिक सहज महसूस करते हैं और अक्सर SQL में लागू बेहतर समाधान से बचते हैं, इसे अच्छा अभ्यास नहीं माना जाना चाहिए।
यूडीटी का अनुकूलन के लिए एक अच्छा समाधान हो सकता है, चार्ट (1) का उपयोग करके एम / एफ प्रकार के बारे में एक और जवाब में एक अच्छा उदाहरण दिया गया है। यदि यह UDT होता, तो इसके बजाय एक बूलियन हो सकता था (जब तक कि हम तीसरे और चौथे विकल्प की पेशकश नहीं करना चाहते)। बेशक हम सभी जानते हैं कि यह वास्तव में कॉलम ओवरहेड के कारण अनुकूलन नहीं है, लेकिन संभावना है।