क्या यह हाथ से लिखे कोड में SQL सर्वर के ब्रैकेट नोटेशन का उपयोग करने के लिए समझ में आता है?


15

जब वे []लगभग सभी चीज़ों के लिए नए Microsoft ब्रैकेट नोटेशन ( ) का उपयोग करके आउटपुट जेनरेट करते हैं तो कोड जेनरेटर सरल हो जाते हैं।

जब मैंने पहली बार इसे देखा, तो मैंने कुछ हद तक प्रतिबंधित पहचानकर्ता संकेतन के पुनर्जन्म को देखा।

जहाँ तक मुझे पता है कि यह Microsoft से एक मालिकाना विस्तार है (जिसका अर्थ है कि Oracle इसका समर्थन नहीं करता है)।

यदि आप किसी तालिका को परिभाषित करते हैं, तो SQL सर्वर को देखने से कोई अंतर नहीं पड़ता है

CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);

या

CREATE TABLE dbo.Table_2 (col1 int, col2 int);

यह व्यक्तिगत या कॉर्पोरेट शैली की बात है। निरतंरता बनाए रखें।

अब यदि आप अपने डेटाबेस को ओरेकल में माइग्रेट करना चाहते हैं, तो ब्रैकेट कोई विकल्प नहीं है।

आप पुराने उद्धृत पहचानकर्ताओं का उपयोग कर सकते हैं, लेकिन ये मामले संवेदनशील हैं जो बहुत परेशानी का कारण बनते हैं।

क्या सभी कोष्ठकों को उत्पन्न कोड से हटाना अच्छा है, रिक्त स्थान, अन्य विशेष वर्णों और नामों के लिए आरक्षित खोजशब्दों का उपयोग करने से बचें और कोड को इस तरह से समझें कि अधिकांश DBMS समझें?

जवाबों:


12

मानक SQL "उद्धृत पहचानकर्ताओं के लिए दोहरे उद्धरण का उपयोग करता है । SQL सर्वर QUOTED_IDENTIFIERविकल्प ( ANSI_QUOTESmySQL में) का उपयोग करके इसका समर्थन करता है । मानक एसक्यूएल सामान्य रूप से पोर्टेबिलिटी को बेहतर बनाता है और इस मामले में ओरेकल को पोर्ट करेगा। इसी तरह मैं एसक्यूएल कीवर्ड्स को अपर केस (इंटरमीडिएट एसक्यूएल -92 आवश्यकता) में बदलूंगा intऔर INTEGER(एंट्री लेवल एसक्यूएल -92 आवश्यकता) तक विस्तार करूंगा ।

अनावश्यक रूप से उद्धृत पहचानकर्ताओं का उपयोग करके, चाहे जो भी स्वाद हो, आईएमओ से बचना चाहिए।


10

यह एक व्यक्तिपरक मुद्दा है, लेकिन अनावश्यक कोष्ठक मेरे पालतू जानवरों की सूची में सबसे ऊपर है - मिसपेलिंग की तुलना में थोड़ा अधिक कष्टप्रद "! =", लेकिन स्तंभ सूचियों में अग्रणी अल्पविराम जितना बुरा नहीं है।

निष्पक्ष रूप से बोलना, कोष्ठक के उद्देश्य पर विचार करें: ऑब्जेक्ट नाम की अनुमति देना जो अन्यथा कानूनी नहीं होगा। उस उद्देश्य को देखते हुए, कोष्ठक एक कोड गंध सबसे खराब है, और सबसे अच्छे आलस्य का संकेत है।


अग्रणी स्तंभ अल्पविराम से यह स्पष्ट करते हैं कि नए कॉलम कहाँ से शुरू होते हैं। कोष्ठक निश्चित रूप से कर रहे हैं नहीं एक कोड-गंध के बाद से वे स्पष्ट रूप से चित्रित एक स्तंभ नाम है और क्या नहीं है क्या। मैं यह नहीं कह रहा हूं कि आपको उनका उपयोग करना चाहिए , लेकिन यह कहना कि वे समस्याओं का संकेत देते हैं, एक विशाल अति-पहुंच है।
मैक्स वर्नन

9
  • यदि आपकी तालिका या स्तंभ नामों में ब्रैकेट आवश्यक हैं:

    जाहिर है, अगर आपका स्कीमा पर नियंत्रण है तो इन जैसे नामों का इस्तेमाल करने से बचें। हालाँकि, कुछ मामलों में सबसे अच्छा नाम आरक्षित होता है (जैसे KEYकि जेनेरिक की-वैल्यू टेबल में कुंजी कॉलम के लिए) तो यह आपके ऊपर है कि आप यह तय करें कि आप इसे कैसे उपयोग करना चाहते हैं (और इस तरह इसे हर जगह उद्धृत करना है)।

    मैं ब्लूसेट को दबाने के लिए कोष्ठक का भी उपयोग करता हूं जो SSMS और VS कुछ ऐसे कीवर्ड DESCRIPTIONदेते हैं जो SQL सर्वर द्वारा आरक्षित नहीं हैं, लेकिन अन्यथा उन टूल के लिए विशेष हैं।

  • गतिशील रूप से SQL उत्पन्न करते समय निश्चित रूप से कोष्ठक का उपयोग करें। ऐसा करने का आसान तरीका QUOTENAME()उन वस्तुओं पर कॉल करना है जिन्हें आप गतिशील रूप से संदर्भित कर रहे हैं (जैसे SELECT QUOTENAME(name) FROM sys.databases;)। sp_MSforeachdb, उदाहरण के लिए, ऐसा नहीं करता है


7

मैं शायद पोर्टेबल डीडीएल करने की कोशिश भी नहीं करूंगा। अगर मैं जरूरत पड़ने पर SQL सर्वर के सिस्टम व्यू से ओरेकल टेबल परिभाषाओं को उत्पन्न करता हूं तो मैं बेहतर होगा।

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

यह निष्कर्ष ओरेकल और एसक्यूएल सर्वर दोनों पर काम करने वाले पोर्टेबल सिस्टम को विकसित करने के कई वर्षों के अनुभव पर आधारित है।


6

जब मैं कोड लिखता हूं जो कोड उत्पन्न करता है, तो मैं डेटाबेस ऑब्जेक्ट नामों के आसपास वर्ग कोष्ठक डालता हूं। हाथ से कोड लिखते समय मुझे कोष्ठक शामिल नहीं है, और मुझे लगता है कि यह कोड की पठनीयता से अलग है। मैं रिक्त स्थान के साथ डेटाबेस ऑब्जेक्ट नामों को भी मना करता हूं। SQL सर्वर आपको ऑब्जेक्ट नामों में रिक्त स्थान का उपयोग करने देगा, लेकिन इसका मतलब यह नहीं है कि यह एक अच्छी बात है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.