यह लेख समझाएगा कि डेटाबेस स्कीमा क्या हैं, उनके फायदे और SQL सर्वर में स्कीमा कैसे बनाएं और उपयोग करें।
एक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम जैसे SQL सर्वर में, डेटाबेस में विभिन्न ऑब्जेक्ट होते हैं। ये टेबल, संग्रहीत कार्यविधियाँ, विचार और कार्य हो सकते हैं। डेटाबेस में, स्कीमा डेटाबेस ऑब्जेक्ट्स के तार्किक संग्रह को संदर्भित करता है। आप एप्लिकेशन, एक्सेस अधिकारों और सुरक्षा के आधार पर वस्तुओं को अलग करने के लिए स्कीमा का उपयोग कर सकते हैं।
SQL सर्वर स्कीमा
SQL सर्वर निम्नलिखित अंतर्निहित तार्किक स्कीमा प्रदान करता है:
- डीबीओ
- sys
- अतिथि
- INFORMATION_SCHEMA
प्रत्येक SQL सर्वर स्कीमा में स्कीमा स्वामी के रूप में एक डेटाबेस उपयोगकर्ता होना चाहिए। स्कीमा स्वामी का स्कीमा पर पूर्ण नियंत्रण होता है। आप स्कीमा स्वामी को भी बदल सकते हैं या ऑब्जेक्ट को एक स्कीमा से दूसरे स्कीमा में ले जा सकते हैं।
SQL सर्वर स्कीमा निम्नलिखित लाभ प्रदान करते हैं:
- तार्किक समूहों में डेटाबेस ऑब्जेक्ट के प्रबंधन के लिए अधिक लचीलापन और नियंत्रण प्रदान करता है
- आपको विभिन्न स्कीमाओं के बीच वस्तुओं को जल्दी से स्थानांतरित करने की अनुमति देता है
- आपको स्कीमा स्तर पर ऑब्जेक्ट सुरक्षा प्रबंधित करने में सक्षम बनाता है
- उपयोगकर्ताओं को डेटाबेस में ऑब्जेक्ट के तार्किक समूहों को प्रबंधित करने की अनुमति देता है
- उपयोगकर्ताओं को विभिन्न स्कीमाओं के बीच स्वामित्व स्थानांतरित करने की अनुमति देता है
मान लीजिए कि आपके संगठन के डेटाबेस के लिए, आप विभागों के आधार पर वस्तुओं का समूह बनाना चाहते हैं। उदाहरण के लिए, मानव संसाधन विभाग के लिए तालिकाओं और संग्रहीत कार्यविधियों को तार्किक रूप से [एचआर] स्कीमा में समूहीकृत किया जाना चाहिए। इसी तरह, वित्त विभाग की टेबल [वित्त] स्कीमा में होनी चाहिए। प्रत्येक स्कीमा (तार्किक समूह) में SQL सर्वर ऑब्जेक्ट जैसे टेबल, संग्रहीत कार्यविधियाँ, दृश्य, फ़ंक्शन, अनुक्रमणिका, प्रकार और समानार्थक शब्द होते हैं।
नोट:स्कीमा एक डेटाबेस-स्कोप वाली इकाई है। SQL सर्वर इंस्टेंस के विभिन्न डेटाबेस में आपके पास एक ही स्कीमा हो सकता है।
डिफ़ॉल्ट रूप से, SQL सर्वर डेटाबेस में सभी ऑब्जेक्ट्स के लिए [dbo] स्कीमा का उपयोग करता है। कनेक्टेड उपयोगकर्ता के लिए डिफ़ॉल्ट स्कीमा प्राप्त करने के लिए हम SCHEMA_NAME() को क्वेरी कर सकते हैं।
SCHEMA_NAME() डिफ़ॉल्ट स्कीमा के रूप में चुनें;
वर्तमान डेटाबेस में सभी डेटाबेस स्कीमा सूचीबद्ध करना
आप SSMS या T-SQL क्वेरी का उपयोग करके स्कीमा की सूची प्राप्त कर सकते हैं। SSMS में ऐसा करने के लिए, आप SQL इंस्टेंस से कनेक्ट होंगे, SQL डेटाबेस का विस्तार करेंगे और सुरक्षा फ़ोल्डर के अंतर्गत स्कीमा देखेंगे।
वैकल्पिक रूप से, आप डेटाबेस स्कीमा और उनके संबंधित स्वामियों की सूची प्राप्त करने के लिए sys.schemas का उपयोग कर सकते हैं।
चुनें s.name as schema_name,u.name as schema_ownerFROM sys.schemas sINNER JOIN sys.sysusers u ON u.uid =s.principal_idORDER BY s.name;
SCHEMA बनाएं का उपयोग करके SQL सर्वर स्कीमा बनाना
एक नया SQL सर्वर स्कीमा बनाने के लिए, हम CREATE SCHEMA t-SQL स्टेटमेंट का उपयोग करते हैं। इसका सिंटैक्स नीचे दिखाया गया है।
स्कीमा बनाएंप्राधिकरण
- स्कीमा_नाम:यह वह स्कीमा है जिसे हम बनाना चाहते हैं
- प्राधिकरण:यह स्कीमा स्वामी का नाम है
[डीबीओ] स्कीमा स्वामी के साथ [एचआर], [एडमिन] और [फिन] स्कीमा बनाने की स्क्रिप्ट नीचे दिखाई गई है।
SCHEMA HR AUTHORIZATION dbo बनाएं;GOCREATE SCHEMA Admin AUTHORIZATION dbo;GoCREATE SCHEMA Fin AUTHORIZATION dbo;GO
आप डेटाबेस को रीफ्रेश कर सकते हैं और नीचे दिखाए गए नए बनाए गए स्कीमा को देख सकते हैं।
स्कीमा के भीतर एक नई तालिका बनाना
तालिका जैसी वस्तुओं को बनाने के लिए, हमें उस स्कीमा नाम को निर्दिष्ट करना होगा जिसमें ऑब्जेक्ट बनाया जाएगा। उदाहरण के लिए, निम्न स्क्रिप्ट [टेबलए] को अलग-अलग स्कीमा [एचआर], [एडमिन] और [फिन] में बनाती है।
टेबल एचआर बनाएं।टेबलए (आईडी इंट पहचान (1,1) प्राथमिक कुंजी, [नाम] वर्कर (100)) टेबल बनाएं [एडमिन]। टेबल ए (आईडी इंट पहचान (1,1) प्राथमिक कुंजी, [नाम] वर्कर (100)) टेबल बनाएं [फिन]। टेबलए (आईडी इंट पहचान (1,1) प्राथमिक कुंजी, [नाम] वर्कर (100))
आप sys.tables और sys.schema सिस्टम टेबल को उनके स्कीमा के साथ टेबल नाम को सूचीबद्ध करने के लिए शामिल कर सकते हैं। उदाहरण के लिए, नीचे दी गई क्वेरी अपने स्कीमा के साथ [TableA] लौटाती है।
SchemaName के रूप में चुनें।
यदि आप ऑब्जेक्ट बनाते समय कोई स्कीमा निर्दिष्ट नहीं करते हैं, तो SQL सर्वर डिफ़ॉल्ट स्कीमा का उपयोग करता है। उदाहरण के लिए, नीचे दी गई स्क्रिप्ट dbo स्कीमा में एक TableA बनाती है।
टेबल टेबल ए बनाएं (आईडी इंट पहचान (1,1) प्राथमिक कुंजी, [नाम] वर्कर (100))
नोट:आप किसी डेटाबेस के अलग-अलग स्कीमा में समान नाम वाली तालिका बना सकते हैं।
सही स्कीमा से डेटा प्राप्त करने के लिए आपको तालिका स्कीमा निर्दिष्ट करने की आवश्यकता है। उदाहरण के लिए, जैसा कि ऊपर दिखाया गया है, हमारे पास सभी स्कीमाओं में [टेबलए] है। इसलिए, यदि आप स्कीमा को निर्दिष्ट किए बिना सीधे रिकॉर्ड का चयन करते हैं, तो यह डिफ़ॉल्ट डीबीओ स्कीमा में एक ऑब्जेक्ट की तलाश करता है। इसलिए, डेटा पुनर्प्राप्ति या किसी भी ऑपरेशन को करने के लिए हमेशा स्कीमा नाम निर्दिष्ट करें जैसे SELECT * FROM HR.TableA।
स्कीमा में संग्रहित प्रक्रिया बनाना
इसी तरह, आप निर्दिष्ट स्कीमा में संग्रहीत कार्यविधियाँ जैसे ऑब्जेक्ट बना सकते हैं। उदाहरण के लिए, नीचे दी गई स्क्रिप्ट एचआर स्कीमा में एक एसपी बनाती है।
क्रिएट प्रोसेस HR.GetEmpDataASBEGINचुनें * [HR] से।[TableA]ENDऑब्जेक्ट को किसी भिन्न स्कीमा में स्थानांतरित करना
किसी बिंदु पर, आपको ऑब्जेक्ट को किसी विशिष्ट स्कीमा में ले जाने की आवश्यकता हो सकती है। उदाहरण के लिए, मान लें कि आपने एक नया स्कीमा [संगठन] बनाया है, और आप चाहते हैं कि आपका [एचआर]। [टेबलए] [एचआर] स्कीमा से [संगठन] स्कीमा में स्थानांतरित हो जाए।
इस स्थिति में, आप निम्न सिंटैक्स के साथ Alter SCHEMA कमांड का उपयोग कर सकते हैं।
ALTER SCHEMA target_schema_nameTRANSFER [ entity_type ::] securable_name;नीचे दी गई स्क्रिप्ट ऑब्जेक्ट [HR].[TableA] को [संगठन] स्कीमा में स्थानांतरित करती है।
स्कीमा बनाएं [ORG]GOALTER SCHEMA ORG ट्रांसफर HR.TableAअब, संग्रहीत कार्यविधि [HR].[GetEmpData] को [संगठन] स्कीमा में स्थानांतरित करते हैं।
स्कीमा संगठन को बदलें HR.GetEmpDataएक बार जब आप स्क्रिप्ट निष्पादित करते हैं, तो यह [संगठन] स्कीमा में संग्रहीत कार्यविधि को दिखाता है।
हालांकि, संग्रहीत प्रक्रिया के अंदर, कोड अभी भी [एचआर] को संदर्भित करता है। [टेबलए] स्कीमा।
इसलिए, आपको ALTER SCHEMA फ़ंक्शन का उपयोग करके संग्रहीत कार्यविधियों, कार्यों या विचारों को स्थानांतरित नहीं करना चाहिए क्योंकि इसमें परिभाषा में वस्तुओं के संदर्भ हो सकते हैं। इसके बजाय, आप नीचे दिखाए अनुसार प्रक्रिया को छोड़ सकते हैं, बना सकते हैं या बदल सकते हैं।
स्कीमा छोड़ना
आप SQL सर्वर डेटाबेस में एक स्कीमा छोड़ सकते हैं, लेकिन स्कीमा में कोई ऑब्जेक्ट नहीं होना चाहिए। उदाहरण के लिए, यदि मैं [संगठन] स्कीमा को छोड़ने का प्रयास करता हूं, तो यह एक त्रुटि देता है कि आप स्कीमा को नहीं छोड़ सकते क्योंकि वस्तु GetEmpData इसका संदर्भ दे रही है।
इसलिए, आप या तो ऑब्जेक्ट को किसी भिन्न स्कीमा में स्थानांतरित कर सकते हैं या ऑब्जेक्ट को पहले छोड़ सकते हैं। उदाहरण के लिए, आइए हम GetEmpData संग्रहीत कार्यविधियों को छोड़ दें और फिर स्कीमा को छोड़ने का प्रयास करें। हमें फिर से एक त्रुटि मिली क्योंकि हमारे पास [संगठन] स्कीमा में [TableA] है।
एक बार जब हम डेटाबेस स्कीमा में सभी ऑब्जेक्ट्स को छोड़ देते हैं या स्थानांतरित कर देते हैं, तो आप स्कीमा को छोड़ सकते हैं।
नोट:आप सिस्टम स्कीमा जैसे dbo, info_schema, sys.
. को ड्रॉप नहीं कर सकतेडेटाबेस स्कीमा का उपयोग करने के लाभ
- डेटाबेस स्कीमा हमें डेटाबेस में लॉजिकल ऑब्जेक्ट समूह बनाने के लिए लचीलापन प्रदान करते हैं। अगर कई टीमें एक ही डेटाबेस के साथ काम कर रही हैं, तो हम उनकी वस्तुओं को अलग करने के लिए विभिन्न स्कीमा तैयार कर सकते हैं।
- डेटाबेस स्कीमा डेटाबेस पेशेवरों को एक्सेस का प्रबंधन करने में मदद करते हैं, क्योंकि आप संपूर्ण डेटाबेस तक पहुंच प्रदान करने के बजाय उपयोगकर्ताओं को उनके संबंधित स्कीमा के लिए एक्सेस को नियंत्रित कर सकते हैं।
- आप डेटाबेस को अधिक कुशलता से प्रबंधित कर सकते हैं क्योंकि यह एक ही ऑब्जेक्ट को कई स्कीमा में एक अलग तार्किक समूह के रूप में प्रकट होने की अनुमति देता है।
- आप वस्तुओं को विभिन्न स्कीमाओं में जल्दी से स्थानांतरित कर सकते हैं।
- स्कीमा स्वामित्व को किसी भी डेटाबेस प्रिंसिपल या भूमिकाओं के साथ सौंपा जा सकता है और स्वामित्व को भी स्थानांतरित किया जा सकता है।
- यह सुरक्षा की एक अतिरिक्त परत प्रदान करता है क्योंकि आपको डेटा को क्वेरी करने या हेरफेर करने के लिए सही ऑब्जेक्ट स्कीमा जानने की आवश्यकता होती है। आप स्कीमा और स्कीमा-स्वामित्व वाली वस्तुओं पर भी पहुंच को नियंत्रित कर सकते हैं।