SQL सर्वर स्कीमा क्या अच्छे हैं?


185

मैं SQL डेटाबेस और विशेष रूप से SQL सर्वर का उपयोग करने के लिए कोई शुरुआत नहीं कर रहा हूँ। हालाँकि, मैं मुख्य रूप से SQL 2000 आदमी रहा हूँ और मुझे 2005+ में स्कीमा द्वारा हमेशा भ्रमित किया गया है। हां, मुझे एक स्कीमा की मूल परिभाषा पता है, लेकिन वे वास्तव में एक विशिष्ट SQL सर्वर परिनियोजन के लिए क्या उपयोग किया जाता है?

मैंने हमेशा केवल डिफ़ॉल्ट स्कीमा का उपयोग किया है। मैं विशेष स्कीमा क्यों बनाना चाहूंगा? मैं किसी भी बिल्ट-इन स्कीमा को क्यों निर्दिष्ट करूंगा?

संपादित करें: स्पष्ट करने के लिए, मुझे लगता है कि मैं स्कीमा के लाभों की तलाश कर रहा हूं। यदि आप इसे केवल एक सुरक्षा योजना के रूप में उपयोग करने जा रहे हैं, तो ऐसा लगता है कि डेटाबेस भूमिकाएँ पहले ही भर चुकी हैं .. एर .. उम .. भूमिका। और इसे एक नेमस्पेस स्पेसिफायर के रूप में उपयोग करने से लगता है कि आप स्वामित्व (dbo बनाम उपयोगकर्ता, आदि ..) के साथ कुछ कर सकते हैं।

मुझे लगता है कि मुझे क्या मिल रहा है, स्कीमा क्या करते हैं जो आप मालिकों और भूमिकाओं के साथ नहीं कर सकते हैं? उनके विशिष्ट लाभ क्या हैं?

जवाबों:


164

स्कीमाएं तार्किक रूप से समूह तालिकाओं, प्रक्रियाओं, विचारों को एक साथ रखती हैं। employeeस्कीमा में सभी कर्मचारी-संबंधित वस्तुएं , आदि।

आप केवल एक स्कीमा को अनुमति दे सकते हैं, ताकि उपयोगकर्ता केवल उस स्कीमा को देख सकें जिसके पास उनकी पहुंच है और कुछ नहीं।


21
स्कीमा को अनुमति प्रदान करने की संभावना इसे प्रशासन के दृष्टिकोण से इसके लायक बनाती है।
हकन विन्थर

9
क्या आप एक अलग डेटाबेस का उपयोग नहीं कर सकते हैं?
सैम यि

7
यह स्कीमा अनुमति कागज पर अच्छा लगता है ... लेकिन शायद ही कभी ठीक से उपयोग किया जाता है। मेरे लिए यह मुसीबत के लायक नहीं है।
sam yi

3
लेकिन अगर ऐसा है, तो क्या आप नामकरण सम्मेलनों का उपयोग करके समान हासिल नहीं कर सकते? मैं यह सुझाव नहीं दे रहा हूं कि इसके लिए कोई उपयोग का मामला नहीं है; यह अधिक बार नहीं, घटाव द्वारा एक अतिरिक्त है।
सैम यी

6
@ Ajedi32, हाँ ... स्कीमा के साथ आप एक एकल लेन-देन लॉग में एक एकल परमाणु प्रतिबद्धता प्राप्त कर सकते हैं और अपने सभी डेटा को एक शॉट में बनाम दो डेटाबेस हो सकते हैं जो सिंक में नहीं हैं और साथ ही वितरित लेनदेन से लड़ रहे हैं।
मैथ्यू Whited

31

सी # कोड के नाम स्थान की तरह।


16
दुर्भाग्य से , हालांकि, स्कीमा और .NET नामस्थान एक ORM परिप्रेक्ष्य ( अर्थात् इकाई फ्रेमवर्क ) से एक साथ बहुत अच्छी तरह से नहीं खेलते हैं । MyDatabase.MySchemaस्कीमा में टेबल्स जादुई रूप से MyProject.MyDatabase.MySchemaनामस्थान में कक्षाओं के लिए मैप नहीं करते हैं । यह भी ध्यान देने योग्य है कि .तालिका नामों में कोई भी डॉट-नोटेशन ( ) हैक _, वर्ग नामों में अंडरस्कोर ( ) के रूप में समाप्त हो जाएगा । दुर्भाग्यपूर्ण विचार के लिए सिर्फ भोजन।
डैन लैग

2
शिक्षण के लिए अच्छा सादृश्य। मैं इसे 100% शाब्दिक रूप से नहीं लेता हूँ ... (उन कैवियट्स ध्वनि में मामूली लग रहा है)
सामन्था ब्रानहैम

6
व्यक्तिगत रूप से, मेरी इच्छा है कि वे .NET नेमस्पेस की तरह अधिक थे , जैसे कि संगठनात्मक उद्देश्यों के लिए स्कीमा की एक मनमानी संख्या ( जैसा कि आप नामस्थान के साथ हो सकता है )। वह, और मैं चाहता हूं कि वे EF में बेहतर प्रदर्शन करेंगे।
डैन लुग

वे किसी भी भाषा में नामस्थान की तरह नहीं हैं जिनके बारे में मैं सोच सकता हूं।
तनवीर बदर

29

वे प्लगइन डेटा के लिए एक प्रकार का नामकरण टक्कर संरक्षण भी प्रदान कर सकते हैं। उदाहरण के लिए, SQL Server 2008 में नया परिवर्तन डेटा कैप्चर सुविधा एक अलग सीडीसी स्कीमा में उपयोग की जाने वाली तालिकाओं को रखती है। इस तरह, उन्हें सीडीसी तालिका और डेटाबेस में प्रयुक्त एक वास्तविक तालिका के बीच नामकरण संघर्ष के बारे में चिंता करने की ज़रूरत नहीं है, और इस मामले के लिए जानबूझकर असली तालिकाओं के नामों को छायांकित कर सकते हैं।


17

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैंने अभी खुद स्कीमा में देखा और सोचा कि निम्नलिखित स्कीमा उपयोग के लिए एक और अच्छा उम्मीदवार हो सकता है:

डाटावेयरहाउस में, विभिन्न स्रोतों से आने वाले डेटा के साथ, आप प्रत्येक स्रोत के लिए एक अलग स्कीमा का उपयोग कर सकते हैं, और फिर स्कीमा के आधार पर नियंत्रण का उपयोग कर सकते हैं। इसके अलावा विभिन्न स्रोत के बीच संभावित नामकरण टकराव से बचा जाता है, जैसा कि एक और पोस्टर ऊपर वर्णित है।


9

यदि आप अपना स्कीमा असतत रखते हैं तो आप किसी दिए गए स्कीमा को एक नए DB सर्वर में तैनात करके एक आवेदन को स्केल कर सकते हैं। (यह मानता है कि आपके पास एक एप्लिकेशन या सिस्टम है जो अलग-अलग कार्यक्षमता के लिए काफी बड़ा है)।

एक उदाहरण, एक प्रणाली पर विचार करें जो लॉगिंग करता है। सभी लॉगिंग टेबल और एसपी [लॉगिंग] स्कीमा में हैं। लॉगिंग एक अच्छा उदाहरण है क्योंकि यह दुर्लभ है (अगर कभी) कि सिस्टम में अन्य कार्यक्षमता ओवरलैप होगी (जो कि लॉगिंग स्कीमा में ऑब्जेक्ट्स में शामिल है)।

इस तकनीक का उपयोग करने के लिए एक संकेत - आपके एप्लिकेशन / सिस्टम में प्रत्येक स्कीमा के लिए एक अलग कनेक्शन स्ट्रिंग है। फिर आप स्कीमा तत्वों को एक नए सर्वर पर तैनात करते हैं और जब आपको स्केल करने की आवश्यकता होती है तो अपने कनेक्शन स्ट्रिंग को बदलते हैं।


8

मैं इस पर ब्रेंट के साथ सहमत हूं ... इस चर्चा को यहां देखें। http://www.brentozar.com/archive/2010/05/why-use-schemas/

संक्षेप में ... स्कीमा बहुत विशिष्ट उपयोग के मामलों को छोड़कर बहुत उपयोगी नहीं हैं। चीजों को गड़बड़ करता है। यदि आप इसे मदद कर सकते हैं तो उनका उपयोग न करें। और K (eep) I (t) S (लागू) S (टुपिड) नियम को मानने का प्रयास करें।


2
मुझे नहीं लगता कि ब्रेंट यह तर्क दे रहा है कि "स्कीमा खराब हैं", बस डिफ़ॉल्ट स्कीमा का उपयोग करने की तुलना में गैर-डिफ़ॉल्ट स्कीमा का उपयोग करना कहीं अधिक जटिल है। आपका शेष योग सटीक है।
जोसेफ डेगले

"अगर स्कीमा] का सही उपयोग किया जाता है, तो वे आपको वस्तुओं के समूहों द्वारा अनुमतियाँ अलग करने देते हैं।" ~ brentozar.com/archive/2010/05/why-use-schemas
LL शिक्षार्थी

7

मुझे स्कीमा से बंधे उपयोगकर्ताओं को बाहर करने में लाभ नहीं दिखता है। यहाँ क्यों है…।

अधिकांश लोग अपने उपयोगकर्ता खातों को शुरू में भूमिकाओं के माध्यम से डेटाबेस से जोड़ते हैं, जैसे ही आप किसी उपयोगकर्ता को किसी भी रूप में sysadmin, या डेटाबेस भूमिका db_owner को असाइन करते हैं, वह खाता या तो "dbo" उपयोगकर्ता खाते के लिए अन्य नाम है, या पूर्ण है डेटाबेस पर अनुमतियाँ। एक बार ऐसा होने के बाद, आप अपने डिफ़ॉल्ट स्कीमा (जो कि आपके उपयोगकर्ता खाते के समान नाम है) से परे किसी भी योजना के लिए अपने आप को कैसे असाइन करते हैं, उन dbo अधिकारों को आपके उपयोगकर्ता और स्कीमा के तहत बनाई गई उन ऑब्जेक्ट पर असाइन किया गया है। इसके थोड़े व्यर्थ ..... और सिर्फ एक नामस्थान और उन वस्तुओं पर सही स्वामित्व को भ्रमित करता है। अगर आप मुझसे पूछते हैं तो इसका खराब डिज़ाइन .... जिसे डिज़ाइन किया गया है।

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


7

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

मैं कहूंगा कि स्कीमा नहीं होना शायद दुनिया का अंत नहीं है, हालांकि यह बहुत मददगार हो सकता है। वास्तव में, यह SQL सर्वर में संकुल की कमी है जो वास्तव में मेरे दिमाग में समस्याएँ पैदा करता है ... लेकिन यह एक अलग विषय है।


ओरेकल के साथ, 1 उदाहरण = 1 डेटाबेस = 1 लाइसेंस का भुगतान करने के लिए, लोग एक और डीबी बनाने और दूसरे लाइसेंस के लिए भुगतान करने से बचने के लिए किन्नर का उपयोग करते हैं। SQl सर्वर में, 1 सर्वर बहुत सारे डेटाबेस को संभाल सकता है।
पैट्रिक होनोरेज़

5

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

यह मुझे ऐसा लगता है कि स्कीमा वैकल्पिक नामस्थान के बराबर है। यदि आप ऐसी स्थिति में हैं जहां ऑब्जेक्ट नाम टकरा रहे हैं और अनुमतियों की बारीकियों को ठीक नहीं किया गया है, तो यहां एक उपकरण है। (मैं यह कहना चाहूंगा कि ऐसे डिजाइन मुद्दे हो सकते हैं जिन्हें पहले अधिक मौलिक स्तर पर निपटाया जाना चाहिए।)

समस्या यह हो सकती है, अगर यह वहां है, तो कुछ डेवलपर्स लापरवाही से इसे अल्पकालिक लाभ के लिए उपयोग करना शुरू कर देंगे; और एक बार जब यह वहाँ हो तो यह कुडज़ू बन सकता है।


3

SQL Server 2000 में, बनाए गए ऑब्जेक्ट्स उस विशेष उपयोगकर्ता से जुड़े हुए थे, जैसे कि यदि कोई उपयोगकर्ता कहता है, सैम एक ऑब्जेक्ट बनाता है, तो कहते हैं, कर्मचारी, कि तालिका दिखाई देगी: Sam.Employees। अगर सैम कॉम्पनी छोड़ रहा है या अन्य व्यावसायिक क्षेत्र में जाता है तो क्या होगा। जैसे ही आप उपयोगकर्ता सैम को हटाते हैं, सैम.इम्प्लॉइज टेबल का क्या होगा? संभवतया, आपको पहले Sam.Employees से dbo.Employess पर स्वामित्व बदलना होगा। स्कीमा इस समस्या को दूर करने के लिए एक समाधान प्रदान करती है। सैम एक स्कीम के भीतर अपने सभी ऑब्जेक्ट बना सकते हैं जैसे कि Emp_Schema। अब, यदि वह Emp_Schema के भीतर एक ऑब्जेक्ट एम्प्लॉयी बनाता है तो ऑब्जेक्ट को Emp_Schema.Employees के रूप में संदर्भित किया जाएगा। यहां तक ​​कि अगर उपयोगकर्ता खाते सैम को हटाने की आवश्यकता है, तो स्कीमा प्रभावित नहीं होगा।


1
यह अब सच नहीं है क्योंकि 2000 के बाद से दो नए संस्करण आए हैं
होगन

0

विकास - हमारे प्रत्येक देवता को खेलने के लिए सैंडबॉक्स के रूप में अपना स्वयं का स्कीमा मिलता है।


29
-1 देवों को अपनी मशीन पर खेलने के लिए डेटाबेस की पूरी प्रतियों को देना बेहतर है। अन्यथा वे केवल अपने स्कीमा के भीतर सुरक्षित रूप से बदल सकते हैं। यह जीने के लिए पदोन्नति को जटिल बनाता है, और अन्य उत्तरों द्वारा वर्णित अन्य कारणों के लिए स्कीमा पृथक्करण को भी जटिल करता है।
स्टीफन टर्नर

5
मैं उस एप्लिकेशन के लिए नहीं बोल सकता, जिस पर आप काम कर रहे हैं ... लेकिन आपके विकास को जितना संभव हो उतना उत्पादन करना चाहिए। देव में स्कीमा और ठेस में नहीं होने से समस्या हो सकती है।
सैम यि

0

यहां SQL सर्वर के साथ स्कीमा का उपयोग करने का एक अच्छा कार्यान्वयन उदाहरण है। हमारे पास कई एमएस-एक्सेस एप्लिकेशन थे। हम उन लोगों को ASP.NET ऐप पोर्टल में बदलना चाहते थे। प्रत्येक एमएस-एक्सेस एप्लिकेशन को उस पोर्टल के लिए ऐप के रूप में लिखा जाता है। हर एमएस-एक्सेस एप्लिकेशन की अपनी डेटाबेस टेबल होती है। उनमें से कुछ संबंधित हैं, हम उन लोगों को SQL सर्वर के सामान्य dbo स्कीमा में डालते हैं। बाकी को अपना स्कीमा मिल जाता है। इस तरह अगर हम यह जानना चाहते हैं कि ASP.NET ऐप पोर्टल पर कौन-सी तालिकाएँ हैं, जिन्हें आसानी से नेविगेट, विज़ुअलाइज़ और मेंटेन किया जा सकता है।

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