सरोगेट कुंजी: Difference between revisions
From Vigyanwiki
No edit summary |
No edit summary |
||
| (10 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
{{Short description|Unique identifier for either an entity in the modeled world or an object in the database}} | {{Short description|Unique identifier for either an entity in the modeled world or an object in the database}} | ||
सरोगेट कुंजी (या सिंथेटिक कुंजी, स्यूडोकी, इकाई पहचानकर्ता, तथ्यहीन कुंजी, या तकनीकी कुंजी) | '''सरोगेट कुंजी''' (या सिंथेटिक कुंजी, स्यूडोकी, इकाई पहचानकर्ता, तथ्यहीन कुंजी, या तकनीकी कुंजी) डेटाबेस में या तो मॉडलिंग की विश्व में इकाई या डेटाबेस में वस्तु के लिए विशिष्ट पहचानकर्ता है। प्राकृतिक कुंजी प्राकृतिक (या व्यवसाय) कुंजी के विपरीत, सरोगेट कुंजी अनुप्रयोग डेटा से प्राप्त नहीं होती है।<ref name=":0">{{Cite web|url=https://www.techopedia.com/definition/22403/surrogate-key|title=What is a Surrogate Key? - Definition from Techopedia|website=Techopedia.com|language=en|access-date=2020-02-21}}</ref> | ||
== परिभाषा == | == परिभाषा == | ||
| Line 13: | Line 10: | ||
; सरोगेट (2) - वाइरिंगा और डी जॉन्ज (1991): सरोगेट डेटाबेस में ही एक वस्तु का प्रतिनिधित्व करता है। सरोगेट आंतरिक रूप से प्रणाली द्वारा उत्पन्न होता है और उपयोगकर्ता या अनुप्रयोग के लिए अदृश्य होता है। | ; सरोगेट (2) - वाइरिंगा और डी जॉन्ज (1991): सरोगेट डेटाबेस में ही एक वस्तु का प्रतिनिधित्व करता है। सरोगेट आंतरिक रूप से प्रणाली द्वारा उत्पन्न होता है और उपयोगकर्ता या अनुप्रयोग के लिए अदृश्य होता है। | ||
सरोगेट (1) परिभाषा | सरोगेट (1) परिभाषा भंडारण मॉडल के अतिरिक्त डेटा मॉडल से संबंधित है और इस पूरे लेख में इसका उपयोग किया गया है। दिनांक (1998) देखें। | ||
सरोगेट और प्राथमिक कुंजी के बीच महत्वपूर्ण अंतर इस बात पर निर्भर करता है कि डेटाबेस | सरोगेट और प्राथमिक कुंजी के बीच महत्वपूर्ण अंतर इस बात पर निर्भर करता है कि डेटाबेस वर्तमान डेटाबेस है या अस्थायी डेटाबेस है। चूंकि वर्तमान डेटाबेस केवल वर्तमान में मान्य डेटा को संग्रहीत करता है, मॉडल की विश्व में सरोगेट और डेटाबेस की प्राथमिक कुंजी के बीच एक-से-एक पत्राचार होता है। इस स्थिति में सरोगेट को प्राथमिक कुंजी के रूप में उपयोग किया जा सकता है, जिसके परिणामस्वरूप सरोगेट कुंजी शब्द होता है। अस्थायी डेटाबेस में, चूंकि, प्राथमिक कुंजी और सरोगेट के बीच कई-से-एक संबंध होते हैं। चूँकि डेटाबेस में सरोगेट के अनुरूप कई ऑब्जेक्ट हो सकते हैं, हम सरोगेट को प्राथमिक कुंजी के रूप में उपयोग नहीं कर सकते हैं; सरोगेट के अतिरिक्त, प्रत्येक वस्तु को विशिष्ट रूप से पहचानने के लिए अन्य विशेषता की आवश्यकता होती है। | ||
चूंकि हॉल एट | चूंकि हॉल एट अल. (1976) इस बारे में कुछ नहीं कहते हैं, अन्य लोगों ने तर्क दिया है कि किराए की कोख में निम्नलिखित विशेषताएं होनी चाहिएː | ||
* मूल्य का पुन: उपयोग नहीं किया जाता | * मूल्य का पुन: उपयोग नहीं किया जाता है। | ||
* मूल्य प्रणाली जनित | * मूल्य प्रणाली जनित है। | ||
* मूल्य उपयोगकर्ता या अनुप्रयोग द्वारा हेरफेर करने योग्य नहीं | * मूल्य उपयोगकर्ता या अनुप्रयोग द्वारा हेरफेर करने योग्य नहीं है। | ||
* मूल्य में कोई अर्थपूर्ण अर्थ नहीं | * मूल्य में कोई अर्थपूर्ण अर्थ नहीं है। | ||
* मूल्य उपयोगकर्ता या अनुप्रयोग को दिखाई नहीं देता | * मूल्य उपयोगकर्ता या अनुप्रयोग को दिखाई नहीं देता है। | ||
* मान विभिन्न डोमेन से कई मानों से बना नहीं है। | * मान विभिन्न डोमेन से कई मानों से बना नहीं है। | ||
== अभ्यास में सरोगेट == | == अभ्यास में सरोगेट == | ||
वर्तमान डेटाबेस में, सरोगेट कुंजी [[प्राथमिक कुंजी]] हो सकती है, जो | वर्तमान डेटाबेस में, सरोगेट कुंजी [[प्राथमिक कुंजी]] हो सकती है, जो डेटाबेस प्रबंधन प्रणाली द्वारा उत्पन्न होती है और डेटाबेस में किसी भी अनुप्रयोग डेटा से प्राप्त नहीं होती है। सरोगेट कुंजी का एकमात्र महत्व प्राथमिक कुंजी के रूप में कार्य करना है। यह भी संभव है कि सरोगेट कुंजी डेटाबेस से उत्पन्न [[सार्वभौमिक अद्वितीय पहचानकर्ता|यूयूआईडी]] (उदाहरण के लिए, प्रत्येक कर्मचारी के यूयूआईडी के अतिरिक्त प्रत्येक कर्मचारी के लिए एचआर नंबर) के अतिरिक्त उपस्थित हो। | ||
सरोगेट कुंजी अधिकांशतः अनुक्रमिक संख्या | सरोगेट कुंजी अधिकांशतः अनुक्रमिक संख्या (उदाहरण के लिए अनुकूली सर्वर एंटरप्राइज़ या माइक्रोसॉफ्ट एसक्यूएल सर्वर पहचान कॉलम, [[PostgreSQL|पोस्टग्रेएसक्यूएल]] या [[Informix|इन्फोर्मिक्स]] <code>serial</code>, [[Oracle Corporation|ओरेकल कॉर्पोरेशन]] या माइक्रोसॉफ्ट एसक्यूएल सर्वर <code>SEQUENCE</code> या कॉलम परिभाषित किया गया है <code>AUTO_INCREMENT</code> [[MySQL|माई एसक्यूएल]] में) होती है। कुछ डेटाबेस सरोगेट कुंजियों के लिए संभावित डेटा प्रकार के रूप में यूयूआईडी/गाइड (उदाहरण के लिए [http://www.postgresql.org/docs/current/static/datatype-uuid.html पोस्टग्रेएसक्यूएल <code>यूयूआईडी</code>] या [http://msdn.microsoft.com/en-us/library/ms187942.aspx एसक्यूएल सर्वर <code>UNIQUEIDENTIFIER</code>]) प्रदान करते हैं। | ||
अन्य सभी स्तंभों से स्वतंत्र कुंजी होने से डेटाबेस संबंधों को डेटा मूल्यों या डेटाबेस डिज़ाइन (डेटाबेस को अधिक [[चुस्त सॉफ्टवेयर विकास]] बनाने) में परिवर्तन से अलग किया जाता है और विशिष्टता की गारंटी देता है। | अन्य सभी स्तंभों से स्वतंत्र कुंजी होने से डेटाबेस संबंधों को डेटा मूल्यों या डेटाबेस डिज़ाइन (डेटाबेस को अधिक [[चुस्त सॉफ्टवेयर विकास]] बनाने) में परिवर्तन से अलग किया जाता है और विशिष्टता की गारंटी देता है। | ||
| Line 46: | Line 43: | ||
| 234 || BOS0120 || जॉन स्मिथ || 35 || 2001-01-01 || 2009-12-31 | | 234 || BOS0120 || जॉन स्मिथ || 35 || 2001-01-01 || 2009-12-31 | ||
|} | |} | ||
कुछ डेटाबेस डिज़ाइनर अन्य | कुछ डेटाबेस डिज़ाइनर अन्य प्रत्याशी कुंजियों की उपयुक्तता की सावधान किए बिना व्यवस्थित रूप से सरोगेट कुंजियों का उपयोग करते हैं, जबकि अन्य डेटा में पहले से उपस्थित कुंजी का उपयोग करेंगे, यदि कोई है। | ||
कुछ वैकल्पिक नाम | कुछ वैकल्पिक नाम सरोगेट अवधारणा की प्रकृति के अतिरिक्त नए सरोगेट मान उत्पन्न करने के विधि का वर्णन करते हैं। | ||
सरोगेट्स उत्पन्न करने के दृष्टिकोण में | सरोगेट्स उत्पन्न करने के दृष्टिकोण में सम्मिलित हैं: | ||
* [[सार्वभौमिक रूप से अद्वितीय पहचानकर्ता]] (यूयूआईडी) | * [[सार्वभौमिक रूप से अद्वितीय पहचानकर्ता]] (यूयूआईडी) | ||
| Line 57: | Line 54: | ||
* अनुकूली सर्वर एंटरप्राइज़ या माइक्रोसॉफ्ट एसक्यूएल सर्वर पहचान स्तंभ <code>IDENTITY</code> या <code>IDENTITY(n,n)</code> | * अनुकूली सर्वर एंटरप्राइज़ या माइक्रोसॉफ्ट एसक्यूएल सर्वर पहचान स्तंभ <code>IDENTITY</code> या <code>IDENTITY(n,n)</code> | ||
* ओरेकल कॉर्पोरेशन <code>SEQUENCE</code>, या <code>GENERATED AS IDENTITY</code> (संस्करण 12.1 से प्रारंभ)<ref>{{Cite web|url=http://docs.oracle.com/database/121/SQLRF/statements_7002.htm#SQLRF01402|title=Database SQL Language Reference}}</ref> | * ओरेकल कॉर्पोरेशन <code>SEQUENCE</code>, या <code>GENERATED AS IDENTITY</code> (संस्करण 12.1 से प्रारंभ)<ref>{{Cite web|url=http://docs.oracle.com/database/121/SQLRF/statements_7002.htm#SQLRF01402|title=Database SQL Language Reference}}</ref> | ||
* माइक्रोसॉफ्ट एसक्यूएल सर्वर <code>SEQUENCE</code> (एसक्यूएल सर्वर 2012 से प्रारंभ)<ref>{{cite web | url=https://msdn.microsoft.com/en-us/library/ff878091.aspx | title=CREATE SEQUENCE (Transact-SQL) - SQL Server }}</ref> | * माइक्रोसॉफ्ट एसक्यूएल सर्वर <code>SEQUENCE</code> (एसक्यूएल सर्वर 2012 से प्रारंभ)<ref>{{cite web | url=https://msdn.microsoft.com/en-us/library/ff878091.aspx | title=CREATE SEQUENCE (Transact-SQL) - SQL Server }}</ref> पोस्टग्रेएसक्यूएल या [[IBM Informix|आईबीएम इनफॉर्मिक्स]] सीरियल | ||
* माई एसक्यूएल <code>AUTO_INCREMENT</code> | * माई एसक्यूएल <code>AUTO_INCREMENT</code> | ||
* [[SQLite|एसक्यूलाइट]] <code>INTEGER PRIMARY KEY</code> ( | * [[SQLite|एसक्यूलाइट]] <code>INTEGER PRIMARY KEY</code> (यदि <code>AUTOINCREMENT</code> का उपयोग किया जाता है, तो यह उन संख्याओं के पुन: उपयोग को रोक देगा जो पहले से ही उपयोग किए जा चुके हैं, लेकिन उपलब्ध हैं)<ref>{{cite web |url=https://sqlite.org/autoinc.html |title=SQLite Autoincrement |author=<!--Not stated--> |date=2017-02-02 |website=SQLite |publisher= |access-date=2022-12-02 |quote=}}</ref> | ||
* [[माइक्रोसॉफ्ट पहुंच]] में वाहन नंबर डेटा प्रकार | * [[माइक्रोसॉफ्ट पहुंच]] में वाहन नंबर डेटा प्रकार | ||
* <code>AS IDENTITY GENERATED BY DEFAULT</code> | * [[IBM Informix|आईबीएम]] डाटाबेस और पोस्टग्रेएसक्यूएल <code>AS IDENTITY GENERATED BY DEFAULT</code> के रूप में। | ||
* [[टेराडाटा]] में आइडेंटिटी कॉलम ([[डेटा परिभाषा भाषा]] में प्रयुक्त)। | * [[टेराडाटा]] में आइडेंटिटी कॉलम ([[डेटा परिभाषा भाषा]] में प्रयुक्त)। | ||
* तालिका अनुक्रम जब अनुक्रम की गणना प्रक्रिया और फ़ील्ड के साथ अनुक्रम तालिका | * तालिका अनुक्रम जब अनुक्रम की गणना प्रक्रिया और फ़ील्ड के साथ अनुक्रम तालिका आईडी, अनुक्रमनाम, अनुक्रम वैल्यू और वृद्धि मूल्य द्वारा की जाती है। | ||
== लाभ == | == लाभ == | ||
| Line 69: | Line 66: | ||
=== स्थिरता === | === स्थिरता === | ||
पंक्ति उपस्थित होने पर सरोगेट कुंजियाँ सामान्यतः नहीं | पंक्ति उपस्थित होने पर सरोगेट कुंजियाँ सामान्यतः नहीं बदलतीं इसके निम्नलिखित लाभ हैं: | ||
* अनुप्रयोग डेटाबेस में पंक्ति के लिए अपना संदर्भ नहीं खो सकते हैं (चूंकि पहचानकर्ता नहीं बदलता है)। | * अनुप्रयोग डेटाबेस में पंक्ति के लिए अपना संदर्भ नहीं खो सकते हैं (चूंकि पहचानकर्ता नहीं बदलता है)। | ||
* प्राथमिक या प्राकृतिक कुंजी डेटा को | * प्राथमिक या प्राकृतिक कुंजी डेटा को सदैव संशोधित किया जा सकता है, यहां तक कि उन डेटाबेस के साथ भी जो संबंधित [[विदेशी कुंजी]] में कैस्केडिंग अपडेट का समर्थन नहीं करते हैं। | ||
=== आवश्यकता परिवर्तन === | === आवश्यकता परिवर्तन === | ||
विशेषताएँ जो विशिष्ट रूप से किसी इकाई की पहचान करती हैं, बदल सकती हैं, जो प्राकृतिक कुंजियों की उपयुक्तता को अमान्य कर सकती हैं। निम्नलिखित उदाहरण पर विचार करें: | विशेषताएँ जो विशिष्ट रूप से किसी इकाई की पहचान करती हैं, बदल सकती हैं, जो प्राकृतिक कुंजियों की उपयुक्तता को अमान्य कर सकती हैं। निम्नलिखित उदाहरण पर विचार करें: | ||
: कर्मचारी का नेटवर्क उपयोगकर्ता नाम प्राकृतिक कुंजी के रूप में चुना जाता है। किसी अन्य कंपनी के साथ विलय होने पर, नए कर्मचारियों को सम्मिलित किया जाना चाहिए। कुछ नए नेटवर्क उपयोगकर्ता नाम विरोध उत्पन्न करते हैं क्योंकि उनके उपयोगकर्ता नाम | : कर्मचारी का नेटवर्क उपयोगकर्ता नाम प्राकृतिक कुंजी के रूप में चुना जाता है। किसी अन्य कंपनी के साथ विलय होने पर, नए कर्मचारियों को सम्मिलित किया जाना चाहिए। कुछ नए नेटवर्क उपयोगकर्ता नाम विरोध उत्पन्न करते हैं क्योंकि उनके उपयोगकर्ता नाम (जब कंपनियां अलग थीं) स्वतंत्र रूप से उत्पन्न हुए थे। | ||
इन स्थितियों में, सामान्यतः प्राकृतिक कुंजी में नई विशेषता | इन स्थितियों में, सामान्यतः प्राकृतिक कुंजी में नई विशेषता (उदाहरण के लिए, मूल कंपनी कॉलम) जोड़ी जानी चाहिए। | ||
सरोगेट कुंजी के साथ, सरोगेट कुंजी को परिभाषित करने वाली केवल तालिका बदली जानी चाहिए। प्राकृतिक कुंजी के साथ, प्राकृतिक कुंजी का उपयोग करने वाली सभी तालिकाओं (और संभवतः अन्य, संबंधित सॉफ़्टवेयर) को बदलना होगा। | सरोगेट कुंजी के साथ, सरोगेट कुंजी को परिभाषित करने वाली केवल तालिका बदली जानी चाहिए। प्राकृतिक कुंजी के साथ, प्राकृतिक कुंजी का उपयोग करने वाली सभी तालिकाओं (और संभवतः अन्य, संबंधित सॉफ़्टवेयर) को बदलना होगा। | ||
| Line 87: | Line 84: | ||
=== प्रदर्शन === | === प्रदर्शन === | ||
सरोगेट कुंजियाँ कॉम्पैक्ट डेटा प्रकार होती हैं, जैसे कि चार-बाइट पूर्णांक। यह डेटाबेस को एकाधिक कॉलम की तुलना में एकल कुंजी कॉलम को तेज़ी से क्वेरी करने की अनुमति देता है। इसके अतिरिक्त, चाबियों का एक गैर-अनावश्यक वितरण परिणामी [[बी-ट्री]] इंडेक्स को पूरी तरह से संतुलित करता है। [[यौगिक कुंजी]] की तुलना में सरोगेट कुंजियाँ भी सम्मिलित होने के लिए कम खर्चीली हैं। | सरोगेट कुंजियाँ कॉम्पैक्ट डेटा प्रकार होती हैं, जैसे कि चार-बाइट पूर्णांक। यह डेटाबेस को एकाधिक कॉलम की तुलना में एकल कुंजी कॉलम को तेज़ी से क्वेरी करने की अनुमति देता है। इसके अतिरिक्त, चाबियों का एक गैर-अनावश्यक वितरण परिणामी [[बी-ट्री]] इंडेक्स को पूरी तरह से संतुलित करता है। [[यौगिक कुंजी]] की तुलना में सरोगेट कुंजियाँ भी सम्मिलित होने के लिए कम खर्चीली हैं। | ||
=== अनुकूलता === | === अनुकूलता === | ||
कई डेटाबेस अनुप्रयोग डेवलपमेंट प्रणाली, ड्राइवर और [[ऑब्जेक्ट-रिलेशनल मैपिंग]] प्रणाली, जैसे कि [[रूबी ऑन रेल्स]] या [[हाइबरनेट (जावा)]] का उपयोग करते समय, प्रत्येक तालिका के लिए प्राकृतिक कुंजी के अतिरिक्त पूर्णांक या गाइड सरोगेट कुंजी का उपयोग करना बहुत | कई डेटाबेस अनुप्रयोग डेवलपमेंट प्रणाली, ड्राइवर और [[ऑब्जेक्ट-रिलेशनल मैपिंग]] प्रणाली, जैसे कि [[रूबी ऑन रेल्स]] या [[हाइबरनेट (जावा)]] का उपयोग करते समय, प्रत्येक तालिका के लिए प्राकृतिक कुंजी के अतिरिक्त पूर्णांक या गाइड सरोगेट कुंजी का उपयोग करना बहुत सरल होता है डेटाबेस-प्रणाली-एग्नोस्टिक ऑपरेशंस और ऑब्जेक्ट-टू-रो मैपिंग का समर्थन करें। | ||
=== एकरूपता === | === एकरूपता === | ||
जब प्रत्येक तालिका में एक समान सरोगेट कुंजी होती है, तो तालिका-स्वतंत्र | जब प्रत्येक तालिका में एक समान सरोगेट कुंजी होती है, तो तालिका-स्वतंत्र विधि से कोड लिखकर कुछ कार्यों को सरलता से स्वचालित किया जा सकता है। | ||
=== सत्यापन === | === सत्यापन === | ||
प्रसिद्ध पैटर्न या संरचना का पालन करने वाले कुंजी-मूल्यों को डिज़ाइन करना संभव है जो स्वचालित रूप से सत्यापित हो सकते हैं। उदाहरण के लिए, कुछ तालिका के कुछ कॉलम में उपयोग की जाने वाली कुंजियों को उन कुंजियों से अलग दिखने के लिए डिज़ाइन किया जा सकता है जिन्हें किसी अन्य कॉलम या तालिका में उपयोग करने का प्रयोजन है, जिससे उन अनुप्रयोग त्रुटियों का पता लगाना सरल हो जाता है | प्रसिद्ध पैटर्न या संरचना का पालन करने वाले कुंजी-मूल्यों को डिज़ाइन करना संभव है जो स्वचालित रूप से सत्यापित हो सकते हैं। उदाहरण के लिए, कुछ तालिका के कुछ कॉलम में उपयोग की जाने वाली कुंजियों को उन कुंजियों से अलग दिखने के लिए डिज़ाइन किया जा सकता है जिन्हें किसी अन्य कॉलम या तालिका में उपयोग करने का प्रयोजन है, जिससे उन अनुप्रयोग त्रुटियों का पता लगाना सरल हो जाता है जिसमें कुंजियाँ गुम हो गए हैं। चूँकि, सरोगेट कुंजियों की इस विशेषता का उपयोग कभी भी अनुप्रयोगों के किसी भी तर्क को चलाने के लिए नहीं किया जाना चाहिए, क्योंकि यह [[डेटाबेस सामान्यीकरण]] के सिद्धांतों का उल्लंघन करेगा। | ||
== हानि == | == हानि == | ||
===अलगाव=== | ===अलगाव=== | ||
जेनरेट की गई सरोगेट कुंजियों के मूल्यों का पंक्ति में रखे गए डेटा के वास्तविक विश्व के अर्थ से कोई संबंध नहीं है। सरोगेट कुंजी का उपयोग करके किसी अन्य तालिका के लिए विदेशी कुंजी संदर्भ रखने वाली पंक्ति का निरीक्षण करते समय, सरोगेट कुंजी की पंक्ति का अर्थ कुंजी से ही नहीं समझा जा सकता है। संबंधित डेटा आइटम देखने के लिए प्रत्येक विदेशी कुंजी को जोड़ा जाना चाहिए। यदि उचित डेटाबेस बाधाओं को सेट नहीं किया गया है, या विरासत प्रणाली से आयात किया गया डेटा जहां संदर्भित अखंडता नियोजित नहीं किया गया था, तो विदेशी-कुंजी मान होना संभव है जो प्राथमिक-कुंजी मान के अनुरूप नहीं है और इसलिए अमान्य है। (इस संबंध में, सीजे डेट सरोगेट चाबियों की अर्थहीनता को लाभ के रूप में मानते | जेनरेट की गई सरोगेट कुंजियों के मूल्यों का पंक्ति में रखे गए डेटा के वास्तविक विश्व के अर्थ से कोई संबंध नहीं है। सरोगेट कुंजी का उपयोग करके किसी अन्य तालिका के लिए विदेशी कुंजी संदर्भ रखने वाली पंक्ति का निरीक्षण करते समय, सरोगेट कुंजी की पंक्ति का अर्थ कुंजी से ही नहीं समझा जा सकता है। संबंधित डेटा आइटम देखने के लिए प्रत्येक विदेशी कुंजी को जोड़ा जाना चाहिए। यदि उचित डेटाबेस बाधाओं को सेट नहीं किया गया है, या विरासत प्रणाली से आयात किया गया डेटा जहां संदर्भित अखंडता नियोजित नहीं किया गया था, तो विदेशी-कुंजी मान होना संभव है जो प्राथमिक-कुंजी मान के अनुरूप नहीं है और इसलिए अमान्य है। (इस संबंध में, सीजे डेट सरोगेट चाबियों की अर्थहीनता को लाभ के रूप में मानते हैं)<ref> C.J. Date. The primacy of primary keys. From "Relational Database Writings, 1991-1994. Addison-Wesley, Reading, MA. </ref> | ||
ऐसी त्रुटियों को खोजने के लिए, किसी को क्वेरी करनी चाहिए जो बाहरी कुंजी के साथ तालिका और प्राथमिक कुंजी के साथ तालिका के बीच बाएं [[बाहरी जोड़]] का उपयोग करती है, रिकॉर्ड को अलग करने के लिए आवश्यक किसी भी फ़ील्ड के अतिरिक्त दोनों प्रमुख फ़ील्ड दिखाती है; सभी अमान्य विदेशी-कुंजी मानों में प्राथमिक-कुंजी कॉलम न्यूल के रूप में होगा। इस तरह की जांच करने की आवश्यकता इतनी सामान्य है कि माइक्रोसॉफ्ट एक्सेस वास्तव में खोज बेजोड़ क्वेरी विज़ार्ड प्रदान करता है जो संवाद के माध्यम से उपयोगकर्ता को चलने के बाद उपयुक्त एसक्यूएल उत्पन्न करता है। (चूंकि, ऐसे प्रश्नों को मैन्युअल रूप से लिखना बहुत मुश्किल नहीं है।) बेजोड़ प्रश्नों का पता लगाएं, सामान्यतः लीगेसी डेटा इनहेरिट करते समय डेटा क्लींजिंग प्रक्रिया के भाग के रूप में नियोजित किया जाता है। | ऐसी त्रुटियों को खोजने के लिए, किसी को क्वेरी करनी चाहिए जो बाहरी कुंजी के साथ तालिका और प्राथमिक कुंजी के साथ तालिका के बीच बाएं [[बाहरी जोड़]] का उपयोग करती है, रिकॉर्ड को अलग करने के लिए आवश्यक किसी भी फ़ील्ड के अतिरिक्त दोनों प्रमुख फ़ील्ड दिखाती है; सभी अमान्य विदेशी-कुंजी मानों में प्राथमिक-कुंजी कॉलम न्यूल के रूप में होगा। इस तरह की जांच करने की आवश्यकता इतनी सामान्य है कि माइक्रोसॉफ्ट एक्सेस वास्तव में खोज बेजोड़ क्वेरी विज़ार्ड प्रदान करता है जो संवाद के माध्यम से उपयोगकर्ता को चलने के बाद उपयुक्त एसक्यूएल उत्पन्न करता है। (चूंकि, ऐसे प्रश्नों को मैन्युअल रूप से लिखना बहुत मुश्किल नहीं है।) बेजोड़ प्रश्नों का पता लगाएं, सामान्यतः लीगेसी डेटा इनहेरिट करते समय डेटा क्लींजिंग प्रक्रिया के भाग के रूप में नियोजित किया जाता है। | ||
निर्यात और साझा किए जाने वाले डेटा के लिए सरोगेट कुंजियाँ अप्राकृतिक हैं। विशेष कठिनाई यह है कि दो अन्य समान स्कीमाओं (उदाहरण के लिए, परीक्षण स्कीमा और विकास स्कीमा) से तालिकाओं में ऐसे रिकॉर्ड हो सकते हैं जो व्यावसायिक दृष्टि से समतुल्य हों, लेकिन अलग-अलग कुंजियाँ हों। क्षणिक डेटा को छोड़कर, सरोगेट कुंजियों को निर्यात नहीं करके इसे कम किया जा सकता है (सबसे स्पष्ट रूप से, उन अनुप्रयोगों को निष्पादित करने में | निर्यात और साझा किए जाने वाले डेटा के लिए सरोगेट कुंजियाँ अप्राकृतिक हैं। विशेष कठिनाई यह है कि दो अन्य समान स्कीमाओं (उदाहरण के लिए, परीक्षण स्कीमा और विकास स्कीमा) से तालिकाओं में ऐसे रिकॉर्ड हो सकते हैं जो व्यावसायिक दृष्टि से समतुल्य हों, लेकिन अलग-अलग कुंजियाँ हों। क्षणिक डेटा को छोड़कर, सरोगेट कुंजियों को निर्यात नहीं करके इसे कम किया जा सकता है (सबसे स्पष्ट रूप से, उन अनुप्रयोगों को निष्पादित करने में जिनके पास डेटाबेस से "लाइव" कनेक्शन है)। | ||
जब सरोगेट कुंजियाँ प्राकृतिक कुंजियों की जगह लेती हैं, तो डोमेन विशिष्ट संदर्भात्मक अखंडता से समझौता किया जाएगा। उदाहरण के लिए, ग्राहक मास्टर टेबल में, एक ही ग्राहक के पास अलग-अलग ग्राहक आईडी के | जब सरोगेट कुंजियाँ प्राकृतिक कुंजियों की जगह लेती हैं, तो डोमेन विशिष्ट संदर्भात्मक अखंडता से समझौता किया जाएगा। उदाहरण के लिए, ग्राहक मास्टर टेबल में, एक ही ग्राहक के पास अलग-अलग ग्राहक आईडी के अनुसार कई रिकॉर्ड हो सकते हैं, तथापि प्राकृतिक कुंजी (ग्राहक का नाम, जन्म तिथि और ई-मेल पते का संयोजन) अद्वितीय हो। समझौता को रोकने के लिए, तालिका की प्राकृतिक कुंजी को प्रतिस्थापित नहीं किया जाना चाहिए: इसे अनूठी बाधा के रूप में संरक्षित किया जाना चाहिए, जिसे प्राकृतिक-कुंजी क्षेत्रों के संयोजन पर अद्वितीय सूचकांक के रूप में प्रयुक्त किया गया है। | ||
=== क्वेरी अनुकूलन === | === क्वेरी अनुकूलन === | ||
संबंधपरक डेटाबेस मानते हैं कि तालिका की प्राथमिक कुंजी पर अद्वितीय [[सूचकांक (डेटाबेस)]] प्रयुक्त होता है। अद्वितीय सूचकांक दो उद्देश्यों को पूरा करता है: | संबंधपरक डेटाबेस मानते हैं कि तालिका की प्राथमिक कुंजी पर अद्वितीय [[सूचकांक (डेटाबेस)]] प्रयुक्त होता है। अद्वितीय सूचकांक दो उद्देश्यों को पूरा करता है: | ||
(i) इकाई अखंडता को प्रयुक्त करने के लिए, क्योंकि प्राथमिक कुंजी डेटा पंक्तियों में अद्वितीय होना चाहिए और (ii) पूछताछ के समय पंक्तियों की त्वरित खोज करना। चूँकि सरोगेट कुंजियाँ किसी तालिका की पहचान करने वाली विशेषताओं को प्रतिस्थापित करती हैं - प्राकृतिक कुंजी - और चूंकि पहचान करने वाली विशेषताओं को क्वेरी किए जाने की संभावना है, इसलिए संभावित प्रश्नों को पूरा करते समय क्वेरी ऑप्टिमाइज़र को पूर्ण तालिका स्कैन करने के लिए | (i) इकाई अखंडता को प्रयुक्त करने के लिए, क्योंकि प्राथमिक कुंजी डेटा पंक्तियों में अद्वितीय होना चाहिए और (ii) पूछताछ के समय पंक्तियों की त्वरित खोज करना। चूँकि सरोगेट कुंजियाँ किसी तालिका की पहचान करने वाली विशेषताओं को प्रतिस्थापित करती हैं - प्राकृतिक कुंजी - और चूंकि पहचान करने वाली विशेषताओं को क्वेरी किए जाने की संभावना है, इसलिए संभावित प्रश्नों को पूरा करते समय क्वेरी ऑप्टिमाइज़र को पूर्ण तालिका स्कैन करने के लिए विवश किया जाता है। पूर्ण तालिका स्कैन का उपाय पहचान करने वाली विशेषताओं, या उनके सेट पर अनुक्रमणिका प्रयुक्त करना है। जहां इस तरह के सेट स्वयं प्रत्याशी कुंजी हैं, इंडेक्स अद्वितीय इंडेक्स हो सकता है। | ||
चूँकि, ये अतिरिक्त अनुक्रमणिकाएँ डिस्क स्थान लेंगी और आवेषण और विलोपन को धीमा कर देंगी। | चूँकि, ये अतिरिक्त अनुक्रमणिकाएँ डिस्क स्थान लेंगी और आवेषण और विलोपन को धीमा कर देंगी। | ||
=== सामान्यीकरण === | === सामान्यीकरण === | ||
सरोगेट कुंजियों के परिणामस्वरूप किसी भी प्राकृतिक कुंजी में डुप्लिकेट मान हो सकते हैं। दोहराव को रोकने के लिए, एसक्यूएल | सरोगेट कुंजियों के परिणामस्वरूप किसी भी प्राकृतिक कुंजी में डुप्लिकेट मान हो सकते हैं। दोहराव को रोकने के लिए, एसक्यूएल के <code>CREATE TABLE</code> कथन या <code>ALTER TABLE ... ADD CONSTRAINT</code> कथन का उपयोग करके तालिका को परिभाषित करते समय प्राकृतिक कुंजियों की भूमिका को अद्वितीय बाधाओं के रूप में संरक्षित करना चाहिए, यदि बाधाओं को बाद के विचार के रूप में जोड़ा जाता है। | ||
=== | ===व्यवसाय प्रक्रिया मॉडलिंग=== | ||
क्योंकि सरोगेट | क्योंकि सरोगेट कुंजियाँ अप्राकृतिक हैं, व्यावसायिक आवश्यकताओं को मॉडलिंग करते समय त्रुटियां दिखाई दे सकती हैं। व्यावसायिक आवश्यकताओं, प्राकृतिक कुंजी पर विश्वास करते हुए, फिर सरोगेट कुंजी में अनुवाद करने की आवश्यकता होती है। रणनीति तार्किक मॉडल (जिसमें सरोगेट कुंजियाँ दिखाई नहीं देती हैं) और उस मॉडल के भौतिक कार्यान्वयन के बीच स्पष्ट अंतर बनाना है, यह सुनिश्चित करने के लिए कि तार्किक मॉडल सही और यथोचित अच्छी तरह से सामान्यीकृत है, और यह सुनिश्चित करने के लिए कि भौतिक मॉडल तार्किक मॉडल का सही कार्यान्वयन है। | ||
=== | === असावधानीपूर्ण प्रकटीकरण === | ||
यदि सरोगेट कुंजियाँ क्रमिक रूप से उत्पन्न की जाती हैं, तो | यदि सरोगेट कुंजियाँ क्रमिक रूप से उत्पन्न की जाती हैं, तो स्वमित्विक जानकारी लीक हो सकती है। हाल ही में उत्पन्न अनुक्रमिक कुंजी से पहले उत्पन्न अनुक्रमिक कुंजी को घटाकर, उस समय अवधि के समय डाली गई पंक्तियों की संख्या सीख सकते हैं। यह उदाहरण के लिए, लेन-देन की संख्या या प्रति अवधि नए | ||