2011-01-19 16 views
17

यहां मुझे भ्रमित करने वाला क्या है। मैं अक्सर डेटाबेस टेबल में समग्र प्राथमिक कुंजी है। उस दृष्टिकोण का खराब पक्ष यह है कि जब मैं प्रविष्टियों को हटाता या संपादित करता हूं तो मेरे पास बहुत अतिरिक्त काम होता है। हालांकि, मुझे लगता है कि यह दृष्टिकोण डेटाबेस डिजाइन की भावना में है।समग्र प्राथमिक कुंजी या नहीं?

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

उदाहरण के लिए:
रास्ता 1

create table ProxUsingDept (
    fkProx int references Prox(ProxID) NOT NULL,  
    fkDept int references Department(DeptID) NOT NULL,  
    Value int,  
    PRIMARY KEY(fkProx,fkDept) 
) 

रास्ता 2

create table ProxUsingDept (
     ID int NOT NULL IDENTITY PRIMARY KEY 
     fkProx int references Prox(ProxID) NOT NULL,  
     fkDept int references Department(DeptID) NOT NULL,  
     Value int 
) 

किस तरह बेहतर है? दूसरे दृष्टिकोण का उपयोग करने के बुरे पक्ष क्या हैं? कोई सुझाव?

+0

देखें http://stackoverflow.com/questions/159087/composite-primary-keys-versus-unique-object-id-field – TechTravelThink

उत्तर

23

मैं व्यक्तिगत रूप से अपने 2 दृष्टिकोण पसंद करते हैं (और यह समय की लगभग 100% का प्रयोग करेंगे) - एक किराए ID क्षेत्र परिचय।

क्यों?

  • जीवन अपनी मेज संदर्भित किसी भी तालिका के लिए एक बहुत आसान बना देता है - शामिल हों स्थिति हैं ज्यादा सिर्फ एक आईडी स्तंभ (बजाय 2, 3, या यहां तक ​​कि अधिक स्तंभ है कि आप पर शामिल होने की आवश्यकता के साथ सरल अपने यौगिक कुंजी

  • से कई स्तंभ नहीं

    जीवन एक बहुत आसान बना देता है -, हर समय)

  • अपनी मेज केवल विदेशी कुंजी क्षेत्र के रूप में एक भी ID ले जाने के लिए की जरूरत है संदर्भित किसी भी तालिका के बाद से जीवन बहुत आसान बना देता है डेटाबेस सीए के बाद से n अद्वितीय ID स्तंभ के निर्माण संभाल (INT IDENTITY का उपयोग कर)

हालांकि, मैं नहीं जानता कि वे कैसे डेटा प्रविष्टियों की विशिष्टता की रक्षा।

बहुत आसान: यौगिक कॉलम पर एक अद्वितीय इंडेक्स डालें जिसे आप अन्यथा अपनी प्राथमिक कुंजी के रूप में उपयोग करेंगे!

CREATE UNIQUE INDEX UIX_WhateverNameYouWant 
    ON dbo.ProxUsingDept(fkProx, fkDept) 

अब, अपनी मेज की गारंटी देता है अपनी तालिका में (fkProx, fkDept) का डुप्लिकेट जोड़ी वहाँ कभी नहीं होगा - समस्या हल हो!

+0

धन्यवाद मैन !!! मुझे अद्वितीय इंडेक्स के बारे में भी पता नहीं था। एक बार फिर धन्यवाद! – sandalone

+3

@askmo। तो मुझे ये ठीक करने दो. सरल कोडिंग के लिए आप (ए) एक ऑटोइनक्रिकमेंट कॉलम (बी) और अतिरिक्त इंडेक्स जोड़ देंगे? पूर्ण गैर-डेटा या गैर-व्यावसायिक आवश्यकता के बारे में कोई चिंता नहीं है? नकारात्मक प्रदर्शन फिर से कोई चिंता नहीं है? खोया नेविगेटन (लैरी का जवाब देखें)? – PerformanceDBA

+4

@marc_s। यह तब होता है जब आप उन लोगों को देते हैं जो अपनी व्यक्तिगत पसंद और नापसंद के बारे में चिंतित हैं; कोडिंग, डिजाइन "डेटाबेस" की उनकी आसानी। पेशेवर डेटाबेस डिजाइनरों के बजाय जो समग्र उपयोग, प्रदर्शन, मानकों, रिलेशनल पावर से चिंतित हैं। उद्योग बहुत दुखी राज्य में है। – PerformanceDBA

0

ऐसे मामले हैं जैसे एम: एन शामिल टेबल जहां समग्र कुंजी सबसे अधिक समझ में आती हैं (और यदि प्रकृति या एम: एन लिंक बदलता है, तो आपको वैसे भी इस तालिका को फिर से काम करना होगा)।

+0

असल में मुझे लगता है कि आप एम: एम के बारे में सोचते हैं जहां संयुक्त कुंजी का सबसे अधिक ज्ञान होता है, लेकिन कृत्रिम (सरोगेट) कुंजी पेश करना बेहतर अभ्यास है। ऐप विकास के प्रबंधन के लिए यह आसान है। – sbrbot

16

आप निम्नलिखित प्रश्न पूछें:

हालांकि, मैं नहीं जानता कि वे कैसे डेटा प्रविष्टियों की विशिष्टता की रक्षा।

विशिष्टता स्तंभों पर एक अलग समग्र अद्वितीय सूचकांक कि अन्यथा प्राकृतिक प्राथमिक कुंजी फार्म होगा की घोषणा के द्वारा संरक्षित किया जा सकता।

किस तरह से बेहतर है?

अलग-अलग लोगों की राय अलग-अलग होती है, कभी-कभी दृढ़ता से आयोजित होती है। मुझे लगता है कि आप पाएंगे कि अधिक लोग सरोगेट पूर्णांक कुंजी का उपयोग करते हैं (ऐसा नहीं है कि यह "सही" समाधान बनाता है)।

2 दृष्टिकोण का उपयोग करने के बुरे पक्ष क्या हैं?

यहाँ एक किराए की कुंजी का उपयोग करने के लिए नुकसान में से कुछ हैं:

  1. आप प्राकृतिक प्राथमिक कुंजी का अनूठा सत्ता बनाए रखने के लिए एक अतिरिक्त सूचकांक की आवश्यकता है।

  2. आपको कभी-कभी परिणाम प्राप्त करने के लिए डेटा चुनते समय अतिरिक्त जॉइन की आवश्यकता होती है (ऐसा तब होता है जब आप समग्र प्राकृतिक कुंजी में केवल कॉलम का उपयोग करके क्वेरी की आवश्यकताओं को पूरा कर सकते हैं; इस मामले में आप विदेशी का उपयोग कर सकते हैं मूल तालिका में वापस जाने के बजाय कुंजी कॉलम)।

+1

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

+1

+1। (यह नहीं कि मैं सरोगेट कुंजी के खिलाफ हूं - वास्तव में इसके विपरीत) –

+0

मेरे पास जितना अधिक उचित हो सकता है। एक किले के रूप में आपके डीबी की अवधारणा नए ढांचे में खो गई है। हां, सरल, सरोगेट कुंजी ओआरएम को स्थापित करना आसान बनाती है।लेकिन समग्र कुंजी और, विशेष रूप से, समग्र प्राकृतिक कुंजी डेटा विश्लेषण को आसान और कच्चे एसक्यूएल लीनर बनाती हैं। मेरे द्वारा किए गए काम के साथ, प्रत्येक तालिका पर एक आईडी कॉलम के साथ काम करना मेगा-थकाऊ है। ऐप्स आते हैं और जाते हैं लेकिन डेटा रहता है और इसका सबसे अधिक मूल्य होता है। सरल कुंजी बनाम समग्र कुंजी, और प्राकृतिक कुंजी बनाम सरोगेट कुंजी वे तर्क हैं जिन्हें कभी हल नहीं किया जाएगा। दान चक द्वारा "एंटरप्राइज़ रेल" पढ़ें। कुछ इसे प्राप्त करते हैं, कुछ नहीं करते हैं, अन्य इसे अनदेखा करते हैं। – juanitogan

-2

मुझे पता है कि यह पोस्ट बनने के बाद से यह बहुत लंबा समय है। लेकिन मुझे समग्र कुंजी के बारे में एक समान परिस्थिति में आना पड़ा ताकि मैं अपने विचार पोस्ट कर रहा हूं।

मान लें कि हमारे पास दो टेबल टी 1 और टी 2 हैं।

टी 1 में कॉलम सी 1 और सी 2 है।

टी 2 कॉलम C1, C2 और C3

C1 और C2 तालिका T1 और टेबल टी 2 के लिए विदेशी चाबी के लिए समग्र प्राथमिक चाबियाँ हैं।

के हम तालिका T1 के लिए एक किराए कुंजी (T1_ID) का इस्तेमाल किया और टेबल टी 2 में एक विदेशी कुंजी के रूप में, सी 1 और टेबल टी 1 परिवर्तन के सी 2 के मूल्यों, यह है अगर निर्देशात्मक लागू करने के लिए है कि अतिरिक्त कार्य के लिए इस्तेमाल किया मान लेते हैं टेबल टी 2 पर इंजेग्रिटी बाधा है क्योंकि हम केवल टेबल टी 1 से सरोगेट कुंजी पर देख रहे हैं जिसका मूल्य तालिका टी 1 में नहीं बदला गया है। यह दूसरे दृष्टिकोण के साथ एक मुद्दा हो सकता है।

+4

सामान्यीकृत डेटाबेस में टी 2 होगा ' टी में सी 1 और सी 2 शामिल हैं इसलिए मुझे डर है कि मुझे नहीं लगता कि यह एक वैध तर्क है। – Caltor

संबंधित मुद्दे