2011-12-21 40 views
19

मैं इन दोनों के बीच बहुत उलझन में हूं। क्या वे समान या अलग हैं? कुछ किताबें या लोग कहते हैं कि वे समान हैं और अन्य कहते हैं कि वे अलग हैं। मैंने कोशिश की लेकिन कोई प्रामाणिक जवाब नहीं मिला।
कृपया इसे हल करें।विदेशी कुंजी और संदर्भ कुंजी के बीच क्या अंतर है?

उत्तर

9

"संदर्भ कुंजी" संबंधपरक मॉडलिंग में या यूएस अंग्रेज़ी में एसक्यूएल कार्यान्वयन में एक सामान्य तकनीकी शब्द नहीं है।

किसी अन्य तालिका में एक विदेशी कुंजी "संदर्भ" एक कुंजी; क्या वह भ्रम हो सकता है?

5

आप वास्तव में कुछ कॉल नहीं करते एक संदर्भ कुंजी ... वे एक ही बात कर रहे हैं ... आप शब्द संदर्भ SQLite में उदाहरण के लिए प्रयोग किया जाता देख सकते हैं: आप इस तरह सिंटैक्स का उपयोग हो सकता है एक शुरू करने के लिए लेखकों और किताबों के डीबी। यह आपको दिखाता है कि एक लेखक के पास कई किताबें हो सकती हैं। यह बताता है कि डाटाबेस कि books.author_id (ऊपर लाइनों के एक जोड़े में परिभाषित) का संदर्भ author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

शायद आप शब्द "संदर्भ कुंजी" का उपयोग कर रहे कुछ हद तक शिथिल?

एक पंक्ति में एक विदेशी कुंजी मान को पंक्ति के "संदर्भ" कहा जाता है जिसमें संबंधित कुंजी मान होता है। ध्यान दें कि पूर्व वाक्य में "संदर्भ" शब्द एक क्रिया है, इसलिए हम कह सकते हैं कि हमारे पास एक संदर्भित विदेशी कुंजी मान और एक संदर्भित कुंजी मान है।

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

36

मुझे लगता है कि आप REFERENCES का उपयोग करने के बारे में बात कर रहे हैं जहां FOREIGN KEY कीवर्ड का उपयोग नहीं किया जाता है, उदाहरण के लिए।

author_id INTEGER REFERENCES author(id) 

... के बजाय ...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

जवाब यह है कि यह केवल एक ही बात के लिए आशुलिपि वाक्य रचना है, है। मुख्य चिंता जब दोनों के बीच बदलना पठनीयता होना चाहिए।

+0

हालांकि पहला विदेशी कुंजी सक्षम किए बिना काम करेगा और दूसरा वाला नहीं होगा। क्या दूसरा तरीका अभी और उपयोग नहीं किया गया है? – schwiz

+0

यह भी मायने रखता है कि यदि आप MySQL वर्कबेंच में अपने डेटाबेस से आरेख बनाने के लिए रिवर्स इंजीनियरिंग का उपयोग करने का प्रयास करते हैं। यदि आपने अपना डेटाबेस बनाते समय firs विकल्प का उपयोग किया है, तो टूल आरेख तत्वों के बीच कनेक्शन बनाने में सक्षम नहीं होगा। –

2

किसी अन्य तालिका में एक विदेशी कुंजी "संदर्भ" एक कुंजी। किसी अन्य तालिका में उस कुंजी को संदर्भित कुंजी कहा जाता है। यदि आप phpmyadmin पर ग्राफिक सुविधा का उपयोग कर रहे हैं तो आप शायद इसके बारे में बहुत कुछ सुनेंगे।

1

वहाँ एक विदेशी कुंजी (रों) घोषित करने के लिए 2 तरीके हैं:

  1. अगर विदेशी कुंजी एक एकल विशेषता है:
    दें संदर्भ()

  2. अगर विदेशी कुंजी की एक सूची रहे हैं गुण

विदेशी कुँजी() संदर्भ

1

दो कीवर्ड 'विदेशी कुंजी "और" संदर्भ "कीवर्ड के बीच एकमात्र और सबसे महत्वपूर्ण अंतर यह है कि उनमें से दोनों डेटा को मूल तालिका के बाल डेटा के रूप में बनाते हैं," तालिका कुंजी "का उपयोग टेबल स्तर बनाने के लिए किया जाता है बाधा जबकि संदर्भ कीवर्ड का उपयोग कॉलम स्तर की बाधा बनाने के लिए किया जा सकता है। कॉलम स्तर की बाधा केवल तालिका बनाने के दौरान ही बनाई जा सकती है। लेकिन तालिका स्तर की बाधाओं को ALTER तालिका कमांड का उपयोग करके जोड़ा जा सकता है।

1

एक विदेशी कुंजी प्राथमिक कुंजी का संदर्भ लें। बस संदर्भों की बाधा का उपयोग करते समय, यह आवश्यक नहीं है कि संदर्भित कुंजी प्राथमिक कुंजी हो।

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