2010-12-28 2 views
11

एक परिदृश्य क्या है जो SQL सर्वर में फ़ंक्शन नामों पर ff_GetName जैसे उपसर्गों का उपयोग करने का एक अच्छा कारण है? ऐसा लगता है कि यह अनावश्यक होगा क्योंकि आमतौर पर इसके उपयोग के संदर्भ से यह स्पष्ट हो जाएगा कि यह एक कार्य है। मैंने किसी अन्य भाषा का उपयोग नहीं किया है जिसकी कभी भी फ़ंक्शंस पर उपसर्ग की आवश्यकता है, और मैं एक अच्छा परिदृश्य नहीं सोच सकता जो दिखाएगा कि SQL क्यों अलग है।उपसर्ग एसक्यूएल फ़ंक्शन नाम क्यों?

मेरी एकमात्र सोच यह है कि शायद पुराने आईडीई में यह एक साथ समूहबद्ध करने के लिए उपयोगी था जब डेटाबेस ऑब्जेक्ट्स सभी एक साथ सूचीबद्ध थे, लेकिन आधुनिक आईडीई पहले से ही यह स्पष्ट कर देता है कि कोई फ़ंक्शन क्या है।

उत्तर

14

आप पुराने IDEs

एक डीबीए के रूप में के बारे में सही हैं, एसक्यूएल सर्वर एंटरप्राइज़ प्रबंधक (SQL सर्वर 2000 और 7.0) का उपयोग कर अनुमतियाँ ठीक करने की कोशिश है, यह पूरा मैथुन अनुमतियाँ देखने की कोशिश कर रहा था। यदि आपके पास यूएफएन या यूएसपी या वीडब्ल्यू था तो जीयूआई ने डेटा प्रस्तुत करने के कारण चीजों को समूहबद्ध करना आसान हो गया।

यह कहकर कि, यदि आपके पास SELECT * FROM Thing है, तो चीज क्या है? एक दृश्य या एक टेबल? यह आपके लिए डेवलपर के रूप में काम कर सकता है लेकिन तैनात होने पर यह क्रैश हो जाएगा क्योंकि आप तालिका पर अनुमति नहीं देते हैं: केवल विचार या procs। निश्चित रूप से vwThing आपके रक्तचाप को नीचे रखेगा ...?

यदि आप स्कीमा का उपयोग करते हैं, तो यह अप्रासंगिक हो जाता है। आप अपनी वस्तुओं को "नामस्थान" कर सकते हैं।उदाहरण के लिए, अन्य स्कीमा में "डेटा" में तालिकाओं और अन्य वस्तुओं के ग्राहक प्रति जैसे WebGUI

संपादित करें:

समारोह। आपके पास टेबल मूल्यवान और स्केलर फ़ंक्शन हैं। यदि आप कोड "VerbNoun" अवधारणा के साथ चिपके रहते हैं, तो आप कैसे जानते हैं कि बिना किसी अन्य सुराग के कौन सा है। (बेशक, यह भी हो सकता है नहीं क्योंकि वस्तु नाम अद्वितीय हैं)

SELECT dbo.GetName() FROM MyTable 
SELECT * FROM dbo.GetName() 

आप एक तालिका मूल्यवान समारोह सूचित करने के लिए एक बहुवचन का उपयोग करते हैं, यह यकीनन बदतर

SELECT dbo.GetName() FROM MyTable 
SELECT * FROM dbo.GetNames() 

है जबकि यह कम अस्पष्ट है , हालांकि कुछ लोगों के लिए आक्रामक ;-)

SELECT dbo.sfnGetName() FROM MyTable 
SELECT * FROM dbo.tfnGetName() 

स्कीमा के साथ। और कोई नाम अस्पष्टता नहीं है।

SELECT ScalarFN.GetName() FROM MyTable 
SELECT * FROM TableFN.GetName() 

आपकी "कोई अन्य भाषा" टिप्पणी लागू नहीं होती है। एसक्यूएल सी #, जावा, एफ #, एडीए (ओके, पीएल/एसक्यूएल हो सकता है) की तरह संरचित नहीं है, वीबीए, जो भी हो: कोई ऑब्जेक्ट या नेमस्पेस पदानुक्रम नहीं है। नहीं Object.DoStuff विधि सामान।

एक उपसर्ग केवल आपके समझदार रखने के लिए ...

+0

हां, मैं विचारों पर सहमत हूं कि यह उपयोगी है। मैं विशेष रूप से कार्यों के बारे में पूछ रहा हूँ। धन्यवाद। – AaronLS

+0

मैं सी जैसी भाषाओं की भीड़ के साथ और सोच रहा था, जहां आपके पास एक ऐसा कार्य हो सकता है जो किसी ऑब्जेक्ट से जुड़ा न हो, फिर भी यह स्पष्ट रूप से उपयोग के संदर्भ से एक कार्य है। लेकिन किसी भी तरह, तालिका-मूल्यवान बनाम स्केलर-मूल्यवान के बारे में अच्छा बिंदु, जिसका अर्थ है कि एक ही एफएन_ उपसर्ग अकेले पूरा करता है, वास्तव में क्या आवश्यक है, यदि यह परिदृश्य चिंता का विषय है, तो आपके द्वारा प्रदर्शित किए गए दो अलग-अलग उपसर्ग हैं। – AaronLS

+0

@AaronLS: सी भी एक उदाहरण हो सकता है। एसक्यूएल अधिकांश क्लाइंट भाषाओं की तरह नहीं है और "पारंपरिक" धारणाएं लागू नहीं हो सकती हैं। मैं यह नहीं कह रहा हूं कि यह समझ में आता है या अच्छा है, लेकिन यह आपके कोड का ट्रैक रखने के लिए उपयोगी है। हम सभी कार्यों FWIW के लिए एक स्कीमा का उपयोग करते हैं। हम उनके क्रियाओं से अलग कार्यों को अलग करते हैं। "कैल्क" = स्केलर, "गेट" = टेबल इत्यादि – gbn

5

fn_ के साथ फ़ंक्शन नामों को उपसर्ग करने की आवश्यकता नहीं है t_ (एक सम्मेलन मैंने देखा है) के साथ तालिका नामों को उपसर्ग करने की आवश्यकता से कहीं अधिक है। इस प्रकार का व्यवस्थित उपसर्ग उन लोगों द्वारा उपयोग किया जाता है जो अभी तक भाषा के साथ सहज नहीं हैं और जिन्हें कोड को समझने के लिए अतिरिक्त सहायता के रूप में सम्मेलन की आवश्यकता है।

2

मैं उपसर्गों का प्रशंसक नहीं हूं, लेकिन शायद एक फायदा यह हो सकता है कि ये fn_ उपसर्ग यह पहचानने में आसान हो सकता है कि एक विशेष कार्य उपयोगकर्ता के परिभाषित है, बजाय अंतर्निहित।

+1

नहीं, आप स्केलर यूडीएफ को पहचानते हैं क्योंकि उन्हें स्पष्ट स्कीमा संदर्भ (ज्यादातर डीबीओ) –

+1

@bernd_k के साथ उपयोग किया जाना चाहिए: आपके पास एक बिंदु है, लेकिन अन्य डीबीएमएस में, यह हमेशा मामला नहीं है ... तो उपसर्ग एसक्यूएल सर्वर के अलावा डेटाबेस में उस भेद को स्पष्ट कर सकता है। –

+0

मुझे लगता है कि सभी डीबीएमएस हमें इतना कम काम दे रहे हैं, कि हम आसानी से कुछ को हटा सकते हैं। –

4

क्या एक परिदृश्य है कि एक अच्छा कारण एक मिसाल है उपसर्गों

कोई भी है उपयोग करने के लिए है। लोग सभी तरह की चीजें करते हैं क्योंकि उन्होंने हमेशा ऐसा किया है, और प्राचीन ज्ञान के साथ कई बुरी आदतों को समझाया गया है जो कई सालों से गलत है।

2

हमारे बारे में हमारी कंपनी में हमारे पास कई दर्दनाक बैठकें थीं। आईएमओ, हमें किसी भी ऑब्जेक्ट नाम पर उपसर्ग की आवश्यकता नहीं है। हालांकि, यदि आप दृश्य का नाम अंतर्निहित तालिका नाम से संघर्ष कर सकते हैं, तो आप उन्हें विचारों पर रखने के लिए तर्क दे सकते हैं।

किसी भी मामले में, कोई भी SQL आवश्यकता नहीं है जो उपसर्ग का उपयोग किया जाए, और स्पष्ट रूप से, आईएमओ, उनके पास कोई वास्तविक मूल्य नहीं है।

1

एक (और एकमात्र) लाभ मैं सोच सकता हूं कि यह एक परिणामस्वरूप लागू उपसर्ग योजना इंटेलिजेंस/स्वत: पूर्णता का उपयोग कर सकती है क्योंकि संबंधित कार्यक्षमता स्वचालित रूप से एक साथ समूहीकृत होती है।

+1

मैं कहूंगा कि विपरीत सत्य है –

1

जैसा कि अन्य ने देखा है, आपके द्वारा परिभाषित किए गए किसी भी परिदृश्य को आसानी से चुनौती दी जा सकती है, इसलिए इसे आवश्यकतानुसार परिभाषित करने का कोई नियम नहीं है; हालांकि, यह भी कोई नियम नहीं है कि यह अनावश्यक है, या तो। सभी नामकरण सम्मेलनों की तरह, औचित्य के बजाय लगातार उपयोग करना अधिक महत्वपूर्ण है।

+0

मैं लगातार उपयोग पर सहमत हूं, लेकिन मैं fn_ का उपयोग न करने का समर्थन नहीं करना चाहता हूं और बाद में यह पता चलता हूं कि ऐसे मामले हैं जहां यह एक बड़ा नुकसान होगा, इसलिए मैं उन उदाहरणों के लिए पूछ रहा हूं मेरी राय "आसानी से चुनौती" :) – AaronLS

+0

मुझे नहीं लगता कि वहां होगा; किसी विशिष्ट नामकरण सम्मेलन के लिए प्रस्तुत कोई भी तर्क डेटा के स्रोत की पहचान करने के लिए उबाल जाता है (उदाहरण के लिए, विचारों और कार्यों में तालिकाओं के विपरीत आउटपुट को प्रभावित करने के कुछ प्रकार के तर्क हो सकते हैं), और उन तर्कों को बिना किसी वास्तविक संकल्प के आगे और आगे लड़या जा सकता है । एक उठाओ और आगे बढ़ें; यदि आपके पास एक देव टीम है जो फ़ंक्शंस और विचारों (उन्हें टेबल से अलग करने के लिए उपसर्ग) पसंद करती है, तो उनका उपयोग करें। –

4

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

मुझे नहीं पता कि आपकी स्थिति क्या है, लेकिन आपको 'सुंदर' के लिए नामकरण सम्मेलन में परिवर्तन करने से पहले ध्यान से विचार करना चाहिए। इससे कोई फर्क नहीं पड़ता कि आपके संगठन में मौजूदा नामकरण सम्मेलन कितना बुरा है, इससे चिपकने के लिए कहीं बेहतर है और नामकरण स्थिरता को अनदेखा करने और अपना खुद का शुरू करने से कहीं ज्यादा बेहतर है।

बेशक, अधिकतर नामकरण सम्मेलन न केवल बुरा है, इसका भी पालन नहीं किया जाता है और नाम असंगत हैं। उस स्थिति में, आप बनने के लिए बेकार है ...

0

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