प्राथमिक कुंजी के अपने नाम क्यों हैं?


19

एक गणितीय दृष्टिकोण से, यह माना जाता है कि एक मेज में अधिकांश एक प्राथमिक कुंजी होती है, यह एक साधारण तालिका संपत्ति के बजाय कुछ मनमानी नाम से प्राथमिक कुंजी को संदर्भित करने के लिए एक शॉर्टसाइट डिजाइन निर्णय प्रतीत होता है।

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

क्या मनमाने नामों का उपयोग करने में कुछ फायदा है जो मुझे नहीं दिखता है या प्राथमिक कुंजी के लिए मनमाने ढंग से नामों का उपयोग नहीं कर रहे हैं?

2011-02-22 को संपादित करें (02/22/2011 उन लोगों के लिए जो वहाँ तारीख नहीं चाहते हैं):

मेरे कार्य को दिखाते हैं, जिसके साथ आप इसके टेबल के नाम से प्राथमिक कुंजी के नाम प्राप्त कर सकते हैं (प्रारंभिक sql-sever उर्फ ​​सिबेस सिस्टम टेबल का उपयोग करके):

create function dbo.get_pk (@tablename sysname)
returns sysname
as
begin
    return (select k.name
    from sysobjects o 
        join sysobjects k   on k.parent_obj = o.id 
    where o.name = @tablename
    and o.type = 'U'
    and k.type = 'k')
end
go

जब तक कोई व्यक्ति स्पष्ट नाम की आपूर्ति नहीं करता है, तब तक gbn कोई भी व्यक्ति वास्तव में उत्पन्न नाम को पसंद नहीं करता है:

create table example_table (
    id int primary key
)

select dbo.get_pk('example_table')  

मुझे अभी मिला

PK__example___3213E83F527E2E1D

लेकिन क्यों sysobjects में नाम अद्वितीय होना चाहिए। यह तालिका और इसकी प्राथमिक कुंजी के लिए ठीक उसी नाम का उपयोग करने के लिए पूरी तरह से ठीक होगा।

इस तरह से करना, हमें नामकरण सम्मेलनों को स्थापित करने की आवश्यकता नहीं थी, जो गलती से उल्लंघन हो सकता है।

अब मैरिएन के जवाब:

  1. मैंने केवल एक गैर-प्राथमिक प्राथमिक कुंजी में एक संकुल को बदलने के कार्य को एक उदाहरण के रूप में उपयोग किया है जहां मुझे इसे छोड़ने में सक्षम होने के लिए पीके के वास्तविक नाम को जानने की आवश्यकता है।
  2. चीजों को उचित नामों की आवश्यकता नहीं है, यह पर्याप्त है अगर वे आसानी से विशिष्ट रूप से निरूपित कर सकते हैं। वह अमूर्तन का आधार है। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग इस तरह से होती है। आपको विभिन्न वर्गों के समान गुणों के लिए अलग-अलग नामों का उपयोग करने की आवश्यकता नहीं है ।
  3. यह मनमाना है, क्योंकि यह एक तालिका की संपत्ति है। तालिका का नाम आप सभी को पता होना चाहिए कि क्या आप इसका उपयोग करना चाहते हैं।

जवाबों:


17

प्राथमिक कुंजी (और अन्य अद्वितीय बाधाएं) अनुक्रमणिका के रूप में कार्यान्वित की जाती हैं, और बिल्कुल उसी तरह से निपटा जाता है - यह प्रोग्रामर के दृष्टिकोण से कोई मतलब नहीं है कि पीके और इंडेक्स के लिए अलग-अलग कोड पथ हैं (यह दोगुना हो जाएगा कीड़ों के लिए संभावित)।

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


1
हाँ, इसका मतलब यह भी है कि पीके को किस कॉलम में बदला जा सकता है। इसलिए पुस्तकों के लिए, आप आईएसके को पीके के रूप में उपयोग कर सकते हैं (जिसे आप आईएसबीएन कॉल करना चाहते हैं ताकि यह स्पष्ट हो), लेकिन फिर विकास के आधे रास्ते में आप यह तय कर सकते हैं कि आप सेकंड हैंड पुस्तकों को भी स्टॉक कर सकते हैं, जिसका अर्थ है आप चाहते हैं। एक अलग रिकॉर्ड (उदाहरण मेरे सिर के ऊपर से)। इसलिए आपको PK फ़ील्ड को कुछ विशिष्ट ID में बदलना होगा।
नाथन मैकइन्नेस

1
मैं वाक्यांश को प्राथमिकता देता हूं: "एक पीके एक बाधा है जो एक सूचकांक का उपयोग करता है " । कभी-कभी दो बाधाएं (एक पीके और एक एफके - या 2 एफके) एक ही सूचकांक का उपयोग कर सकते हैं।
ypercube y

@ypercube मैं पसंद करता हूं "एक पीके एक बाधा है जो 99.99% वास्तविक दुनिया डेटाबेस में एक सूचकांक का उपयोग करता है" , जो निश्चित रूप से इसका मतलब है कि सूचकांक के बिना पीके बाधा होना संभव है, फिर भी कोई भी इस डेटाबेस का उपयोग करने की योजना नहीं बना रहा है। वास्तविक दुनिया प्रदर्शन के कारणों के कारण कभी भी इसे लागू करेगी।
पचेरियर

6

यकीन नहीं होता कि मैं इस सवाल को पूरी तरह से समझता हूं।

यदि आपके पास एक मेज पर एक सूचकांक था और आप सूचकांक को बदलना चाहते थे / चाहते थे, तो क्या आपको इसके नाम के अनुसार इसे बदलने की आवश्यकता नहीं होगी? मुझे लगता है कि आप सूचकांक के लिए ऑब्जेक्ट को देख सकते हैं और इस तरह से अपडेट कर सकते हैं, लेकिन नाम लोगों को तार्किक रूप से समझने में मदद करते हैं कि वे किस ऑब्जेक्ट के साथ काम कर रहे हैं।

तो, शायद इसका उत्तर यह है कि यदि आपके पास उपयोग में एक मजबूत नामकरण सम्मेलन है (जैसे, प्राथमिक कुंजी के लिए name_PK), तो आप आसानी से पहचान पाएंगे कि आप तालिका की प्राथमिक कुंजी के साथ काम कर रहे थे।

मुझे लगता है कि एफके रिश्तों को परिभाषित करने के लिए भी यही बात कही जा सकती है। मुझे लगता है कि नामों का उपयोग तार्किक व्याख्या के लिए किया जाता है, क्योंकि ऑब्जेक्ट स्वयं सभी के पास अलग-अलग ऑब्जेक्ट हैं।


5

मैं कहूंगा कि यह मानव पठनीयता के लिए एक कार्यान्वयन विवरण है।

बाधा नाम वैकल्पिक हैं (कम से कम SQL सर्वर में), लेकिन मैं इसके बजाय के PK_MyTableलिए करना चाहते हैंMyTablePK_MyTabl___16feb6d8a


3

ऐतिहासिक रूप से, प्राइमरी कीज़ और यूनीक कीज़ को सभी कैंडिडेट कीज़ कहते हैं जैसा कि क्रिस्टोफर जे। डेट ने सिखाया था।

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

इसके प्रकाश में, PRIMARY KEY नाम टेबल प्रॉपर्टी के रूप में संलग्न पसंदीदा उम्मीदवार कुंजी का मनमाना नाम है। केवल एक ही प्राथमिक कुंजी हो सकती है।

हकीकत में, कैंडिडेट कुंजी नाम बनाना केवल पर्याप्त होना चाहिए।

क्लस्टर से नॉनक्लेस्टर्ड और बैक में इंडेक्स बदलने के लिए सिर्फ PRIMARY KEY ढूंढने की एक कवायद होगी, जो परिभाषा के हिसाब से अधिकतम 1 पर है। मुझे लगता है कि आप कह सकते हैं कि प्राथमिक कुंजी परिभाषा होना अनिवार्य रूप से डेटाबेस शुद्धतावादियों के लिए उदासीनता की भावना है। डेटाबेस शुद्धता की भावना को वास्तविक शब्द UNIQUE कुंजी के बजाय कीवर्ड कुंजी द्वारा अद्वितीय कुंजी कहा जाना चाहिए।

उम्मीदवार कुंजी की परिभाषा और उस पर CJDate की टिप्पणियों को देखने के लिए यहां क्लिक करें


1

यह कहने के लिए कुछ भी नहीं है कि प्राथमिक कुंजी टेबल ऑब्जेक्ट का प्रतिनिधित्व करेगी। टेबल ऑब्जेक्ट क्लस्टर इंडेक्स है, प्राथमिक कुंजी नहीं। ऐसा कुछ भी नहीं है जो कहता है कि प्राथमिक कुंजी को क्लस्टर इंडेक्स के समान होना चाहिए। अक्सर यह है, लेकिन यह होना जरूरी नहीं है। प्राथमिक कुंजी आसानी से एक गैर-संकुल सूचकांक द्वारा लागू की जा सकती है।

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