किसी रिलेशनल डेटाबेस में कैटलॉग और स्कीमा के बीच अंतर क्या है?


96

मुझे लगता है कि स्कीमा डेटाबेस से पहले "ऊपरी आवरण" वस्तु थी। मेरा मतलबDB.schema.<what_ever_object_name_under_schema>

खैर, कैटलॉग "रैपर" अब काफी भ्रामक है। हमें कैटलॉग की आवश्यकता क्यों होनी चाहिए? किस प्रयोजन के लिए, ठीक-ठीक कैटलॉग का उपयोग किया जाना चाहिए?

जवाबों:


73

संबंधपरक दृष्टिकोण से:

कैटलॉग वह जगह है जहां - अन्य चीजों के बीच - सभी विभिन्न स्कीमाओं (बाहरी, वैचारिक, आंतरिक) और सभी संबंधित मैपिंग (बाहरी / वैचारिक, वैचारिक / आंतरिक) को रखा जाता है।

दूसरे शब्दों में, कैटलॉग में विभिन्न वस्तुओं के बारे में विस्तृत जानकारी (कभी-कभी डिस्क्रिप्टर सूचना या मेटाडेटा ) शामिल होती है जो सिस्टम के लिए रुचि रखते हैं।

उदाहरण के लिए, अनुकूलक अनुक्रमणिका और अन्य भौतिक संग्रहण संरचनाओं के बारे में कैटलॉग जानकारी, साथ ही साथ अन्य सूचनाओं का उपयोग करता है, ताकि यह तय करने में मदद मिल सके कि उपयोगकर्ता अनुरोधों को कैसे लागू किया जाए। इसी तरह, सुरक्षा उपप्रणाली उपयोगकर्ताओं और सुरक्षा बाधाओं के बारे में कैटलॉग जानकारी का उपयोग पहले स्थान पर इस तरह के अनुरोधों को देने या अस्वीकार करने के लिए करती है।

डेटाबेस सिस्टम का परिचय, 7 वां संस्करण।, CJ दिनांक, पृष्ठ 69-70।


SQL मानक बिंदु से:

कैटलॉग को SQL- वातावरण में स्कीमा के संग्रह का नाम दिया गया है। SQL- वातावरण में शून्य या अधिक कैटलॉग होते हैं। एक कैटलॉग में एक या अधिक स्कीमा होते हैं, लेकिन हमेशा INFORMATION_SCHEMA नाम का एक स्कीमा होता है जिसमें सूचना स्कीमा के विचार और डोमेन शामिल होते हैं।

डेटाबेस भाषा एसक्यूएल , (डीईएस 9075 का प्रस्तावित संशोधित पाठ), पी 45


एसक्यूएल दृष्टिकोण से:

एक कैटलॉग अक्सर डेटाबेस का पर्याय बन जाता है । अधिकांश SQL dbms में, यदि आप information_schema दृश्यों की क्वेरी करते हैं, तो आपको डेटाबेस के नाम पर "table_catalog" कॉलम मैप में मान मिलेंगे।

यदि आप इन तीन परिभाषाओं में से किसी एक से अधिक व्यापक तरीके से कैटलॉग का उपयोग करते हुए अपना प्लेटफ़ॉर्म पाते हैं , तो हो सकता है कि यह किसी डेटाबेस की तुलना में कुछ व्यापक हो - डेटाबेस क्लस्टर, सर्वर या सर्वर क्लस्टर। लेकिन मुझे संदेह है कि, जब से आपने पाया है कि आपके प्लेटफ़ॉर्म के दस्तावेज़ में आसानी से।


177

माइक शेरिल 'कैट रिकॉल' ने एक बेहतरीन जवाब दिया । मैं केवल एक उदाहरण जोड़ूंगा : पोस्टग्रेज

क्लस्टर = एक स्थापना संस्थापन

जब आप किसी मशीन पर Postgres स्थापित करते हैं, तो उस अधिष्ठापन को a कहा जाता है क्लस्टर । यहाँ 'क्लस्टर' एक साथ काम करने वाले कई कंप्यूटरों के हार्डवेयर अर्थ में नहीं है। Postgres में, क्लस्टर इस तथ्य को संदर्भित करता है कि आपके पास एक से अधिक असंबंधित डेटाबेस हो सकते हैं और एक ही Postgres सर्वर इंजन का उपयोग करके चल सकते हैं।

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

SQL-92 विनिर्देश का कहना है:

एक क्लस्टर कैटलॉग का कार्यान्वयन-परिभाषित संग्रह है।

तथा

बिल्कुल एक क्लस्टर SQL-सत्र से संबद्ध है

यह एक क्लस्टर सर्वर डेटाबेस (प्रत्येक कैटलॉग एक डेटाबेस है) कहने का एक तरीका है।

क्लस्टर> कैटलॉग> स्कीमा> टेबल> कॉलम और पंक्तियाँ

तो Postgres और SQL Standard दोनों में हमारे पास यह समरूपता पदानुक्रम है:

  • कंप्यूटर में एक क्लस्टर या एक से अधिक हो सकते हैं।
  • एक डेटाबेस सर्वर एक क्लस्टर है
  • एक क्लस्टर में कैटलॉग हैं । (कैटलॉग = डेटाबेस)
  • कैटलॉग में स्कीमा होते हैं । (स्कीमा = तालिकाओं के नाम स्थान , और सुरक्षा सीमा)
  • स्कीमों में टेबल हैं
  • तालिकाओं में पंक्तियाँ होती हैं
  • पंक्तियों में मान होते हैं , जो स्तंभों द्वारा परिभाषित होते हैं
    वे मूल्य आपके ऐप्स के व्यवसाय डेटा हैं और उपयोगकर्ता व्यक्ति के नाम, इनवॉइस नियत तिथि, उत्पाद की कीमत, गेमर के उच्च स्कोर जैसे परवाह करते हैं। स्तंभ डेटा प्रकार के मानों (पाठ, तिथि, संख्या और इसी तरह) को परिभाषित करता है ।

आरेख दिखा रहा है कि कैसे पोर्ट पर कनेक्ट करने वाले नेस्टिंग बॉक्स आपको क्लस्टर (एक डेटाबेस सर्वर) तक ले जाते हैं, जिसमें एक या अधिक कैटलॉग (एक डेटाबेस) होता है, जिसमें से प्रत्येक में एक या अधिक स्कीमा (एक नाम स्थान) होता है, जिसमें से प्रत्येक में टेबल होते हैं जिनमें से प्रत्येक पंक्तियों।

एकाधिक क्लस्टर

यह आरेख एकल क्लस्टर का प्रतिनिधित्व करता है। Postgres के मामले में, आपके पास प्रति होस्ट कंप्यूटर (या वर्चुअल OS) में एक से अधिक क्लस्टर हो सकते हैं। एकाधिक क्लस्टर आमतौर पर पोस्टग्रेज के नए संस्करणों (उदाहरण: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ) के परीक्षण और तैनाती के लिए किया जाता है ।

यदि आपके पास कई क्लस्टर हैं, तो डुप्लिकेट से ऊपर आरेख की कल्पना करें।

अलग-अलग पोर्ट नंबर एक साथ कई क्लस्टर को एक साथ चलाने और चलाने की अनुमति देते हैं। प्रत्येक क्लस्टर को अपना पोर्ट नंबर सौंपा जाएगा। सामान्य 5432केवल डिफ़ॉल्ट है, और आपके द्वारा सेट किया जा सकता है। प्रत्येक क्लस्टर आने वाले डेटाबेस कनेक्शन के लिए अपने स्वयं के असाइन किए गए पोर्ट पर सुन रहा है।

उदाहरण परिदृश्य

उदाहरण के लिए, एक कंपनी में दो अलग-अलग सॉफ़्टवेयर डेवलपमेंट टीमें हो सकती हैं। एक वेयरहाउस का प्रबंधन करने के लिए सॉफ़्टवेयर लिखता है जबकि दूसरी टीम बिक्री और विपणन का प्रबंधन करने के लिए सॉफ़्टवेयर बनाती है। प्रत्येक देव टीम का अपना डेटाबेस होता है, दूसरे के आनंद से अनजान होता है।

लेकिन आईटी ऑपरेशन टीम ने एक ही कंप्यूटर बॉक्स (लिनक्स, मैक, जो भी हो) पर दोनों डेटाबेस को चलाने का निर्णय लिया। तो उस बॉक्स पर उन्होंने Postgres स्थापित किया। तो एक डेटाबेस सर्वर (डेटाबेस क्लस्टर)। उस क्लस्टर में, वे दो कैटलॉग बनाते हैं, प्रत्येक देव टीम के लिए एक कैटलॉग: एक का नाम 'वेयरहाउस' और एक का नाम 'बिक्री' है।

प्रत्येक देव टीम विभिन्न प्रयोजनों और पहुंच भूमिकाओं के साथ कई दर्जनों तालिकाओं का उपयोग करती है। इसलिए प्रत्येक देव टीम अपने टेबल को स्कीमा में व्यवस्थित करती है। संयोग से, दोनों देव टीम लेखांकन डेटा का कुछ ट्रैकिंग करते हैं, इसलिए प्रत्येक टीम के पास 'लेखांकन' नाम का एक स्कीमा होता है। समान स्कीमा नाम का उपयोग करना कोई समस्या नहीं है क्योंकि कैटलॉग प्रत्येक का अपना नामस्थान है इसलिए कोई टक्कर नहीं है।

इसके अलावा, प्रत्येक टीम अंततः लेखांकन उद्देश्यों के लिए एक तालिका बनाती है जिसका नाम 'खाता बही' है। फिर, कोई नामकरण टकराव नहीं।

आप इस उदाहरण को एक पदानुक्रम के रूप में सोच सकते हैं ...

  • कंप्यूटर (हार्डवेयर बॉक्स या वर्चुअलाइज्ड सर्वर)
    • Postgres 9.2 क्लस्टर (स्थापना)
      • warehouse कैटलॉग (डेटाबेस)
        • inventory योजना
          • [... कुछ तालिकाओं]
        • accounting योजना
          • ledger तालिका
          • [... कुछ अन्य तालिकाओं]
      • sales कैटलॉग (डेटाबेस)
        • selling योजना
          • [... कुछ तालिकाओं]
        • accounting स्कीमा (ऊपर जैसा संयोग)
          • ledger तालिका (ऊपर जैसा संयोग है)
          • [... कुछ अन्य तालिकाओं]
    • Postgres 9.3 समूह
      • [… अन्य स्कीमा और टेबल]

प्रत्येक देव टीम का सॉफ्टवेयर क्लस्टर से संबंध बनाता है। ऐसा करते समय, उन्हें यह निर्दिष्ट करना होगा कि कौन सा कैटलॉग (डेटाबेस) उनका है। पोस्टग्रेज के लिए आवश्यक है कि आप एक कैटलॉग से कनेक्ट करें, लेकिन आप उस कैटलॉग तक सीमित नहीं हैं। यह प्रारंभिक कैटलॉग केवल एक डिफ़ॉल्ट है, जिसका उपयोग तब किया जाता है जब आपके SQL कथन एक कैटलॉग के नाम को छोड़ देते हैं।

इसलिए अगर देव टीम को कभी भी दूसरी टीम के टेबल का उपयोग करने की आवश्यकता होती है, तो वे ऐसा कर सकते हैं यदि डेटाबेस व्यवस्थापक ने उन्हें ऐसा करने के लिए विशेषाधिकार दिया हो। प्रवेश पैटर्न में स्पष्ट नामकरण के साथ किया जाता है: कैटलॉग ।schema.table । इसलिए अगर 'वेयरहाउस' टीम को दूसरी टीम की ('सेल्स' टीम) लीडर को देखने की जरूरत होती है, तो वे एसक्यूएल स्टेटमेंट लिखते हैं sales.accounting.ledger। अपने स्वयं के नेतृत्वकर्ता तक पहुँचने के लिए, वे केवल लिखते हैं accounting.ledger। यदि वे स्रोत कोड के एक ही टुकड़े में दोनों बही-खातों का उपयोग करते हैं, तो वे अपने स्वयं के (वैकल्पिक) कैटलॉग नाम, warehouse.accounting.ledgerबनाम सहित भ्रम से बचने के लिए चुन सकते हैं sales.accounting.ledger


वैसे…

आप अधिक सामान्य अर्थ में प्रयुक्त स्कीमा शब्द सुन सकते हैं , जिसका अर्थ है किसी विशेष डेटाबेस की तालिका संरचना का संपूर्ण डिजाइन। इसके विपरीत, SQL मानक में शब्द का अर्थ विशेष रूप से Cluster > Catalog > Schema > Tableपदानुक्रम में विशेष परत है ।

पोस्टग्रेट्स शब्द डेटाबेस दोनों के साथ-साथ विभिन्न स्थानों जैसे कैटलॉग डेटाबेस कमांड का उपयोग करता है।

सभी डेटाबेस सिस्टम इस की पूरी पदानुक्रम प्रदान नहीं करते हैं Cluster > Catalog > Schema > Table। कुछ के पास केवल एक सूची (डेटाबेस) है। कुछ में कोई स्कीमा नहीं है, बस एक सेट टेबल है। Postgres एक असाधारण शक्तिशाली उत्पाद है।


8
यदि यह है ...Catalog > Schema..., तो कोई मुझे बता सकता है कि क्यों "कैटलॉग" और "स्कीमा" नोड्स में pgAdmin (PostgreSQL UI) नोड्स हैं, कैटलॉग के एक बच्चे के नोड के रूप में स्कीमा नोड के बजाय नोड?
लाल मटर

6
वह "स्कीमा" नोड आपका है, लेकिन "कैटलॉग" नोड नहीं है। "कैटलॉग" नोड ठीक दो आइटम नहीं है: (1) PostgreSQL (pg_catalog), सिस्टम सूची, जैसे कि "pg_" टेबल कि अपने डेटाबेस के मेटाडाटा परिभाषाओं की दुकान, के दर्जनों pg_index, pg_triggerऔर pg_constraint। (2) ANSI (information_schema), एसक्यूएल मानक द्वारा परिभाषित उसी सिस्टम कैटलॉग का रीड-ओनली व्यू information_schema। PgAdmin में "कैटलॉग" नोड का एक बेहतर नाम "सिस्टम" या "सिस्टम टेबल्स" हो सकता है।
बेसिल बोर्के

धन्यवाद। "सभी डेटाबेस सिस्टम क्लस्टर> कैटलॉग> स्कीमा> टेबल की इस पूरी पदानुक्रम को प्रदान नहीं करता है। मुझे आश्चर्य है कि यह mysql और SQL सर्वर के लिए कैसा है?
टिम

+1। क्या स्कीमा में सभी तालिकाओं में एक ही संबंधपरक स्कीमा है (यानी समान विशेषताओं का सेट, और / या बाधाओं का एक ही सेट)? क्या आप मेरा प्रश्न stackoverflow.com/questions/48232448/ ... भी देख सकते हैं ? धन्यवाद।
टिम

1
@Tim एक स्कीमा सिर्फ एक नेमस्पेस है जो टेबल के समूहों को अलग करता है, जैसे कि फ़ोल्डर एक फाइल सिस्टम में फाइल को व्यवस्थित करने वाला एक नेमस्पेस हैं (स्कीमा के कोई नेस्टिंग को छोड़कर)। टेबल्स आपके ऐप के डेटा को पंक्ति द्वारा विशेषता / स्तंभों के रूप में संग्रहीत करते हैं।
बेसिल बोर्के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.