2011-09-06 12 views
5

मैं एक किताब पॉल DuBois द्वारा और किताब वे कहते हैं में "MySQL डेवलपर के पुस्तकालय" कहा जाता है पढ़ रहा हूँ:क्या कोई मुझे बता सकता है कि प्राथमिक कुंजी वास्तव में क्या करती है?

CREATE TABLE score 
(
student_id INT UNSIGNED NOT NULL, 
event_id INT UNSIGNED NOT NULL, 
score INT NOT NULL, 
PRIMARY KEY (event_id, student_id), 
INDEX (student_id), 
FOREIGN KEY (event_id) REFERENCES grade_event (event_id), 
FOREIGN KEY (student_id) REFERENCES student (student_id) 
) ENGINE = InnoDB; 

हम प्राथमिक कुंजी दो स्तंभों के संयोजन बनाया है। यह सुनिश्चित करता है कि हमारे पास किसी दिए गए प्रश्नोत्तरी या परीक्षण के लिए छात्र के लिए डुप्लिकेट स्कोर नहीं होंगे। ध्यान दें कि यह event_id और student_id का संयोजन है जो अद्वितीय है। स्कोर तालिका में, न तो मूल्य अद्वितीय है। एक से अधिक स्कोर पंक्तियों प्रत्येक EVENT_ID मूल्य (छात्र प्रति एक) के लिए, और प्रत्येक student_id मूल्य (प्रत्येक प्रश्नोत्तरी और परीक्षण के लिए एक) छात्र

द्वारा उठाए गए क्या करने के लिए स्पष्ट नहीं है के लिए कई पंक्तियां हो जाएगा मैं एक प्राथमिक कुंजी के रूप में दो कॉलम संयोजन कर रहा हूं ... मतलब, मुझे लगता है कि वास्तव में हुड के नीचे क्या चल रहा है ... यह संख्याओं का संग्रह ले रहा है [95, 210] उदाहरण के लिए और इसका उपयोग करना एक "कुंजी" ... क्या हैश की कुंजी के रूप में प्राथमिक कुंजी के बारे में सोचना उचित है?

पहले मैंने हमेशा प्राथमिक कुंजी के बारे में सोचा था क्योंकि तालिका के लिए अद्वितीय आईडी से ज्यादा कुछ नहीं .. लेकिन अब इस संदर्भ में, मैं खुद को ढूंढ रहा हूं कि वास्तव में प्राथमिक कुंजी क्या कर रही है। क्या कोई मुझे एसक्यूएल कुंजी पर कम कर सकता है?

उत्तर

1

एक प्राथमिक कुंजी अनिवार्य रूप से यह एक अनूठी कुंजी नहीं है जिसमें शून्य बाधा नहीं है।

यह बस प्राथमिक कुंजी एक अलग प्रकार का है (पहले ही उल्लेख किया है, यह आपके डेटा के रेफेरेंन्शिअल सत्यनिष्ठा लागू करने के लिए प्रयोग किया जाता है):

किराए की कुंजी/कृत्रिम कुंजी = आम तौर पर एक अनुक्रमिक संख्या

http://en.wikipedia.org/wiki/Surrogate_key

प्राकृतिक कुंजी = स्तंभ (रों) उस पंक्ति अद्वितीय बनाने

http://en.wikipedia.org/wiki/Natural_key

और यहां http://www.geeksengine.com/database/design/primary-key-constraint.php अंतरों की एक बहुत अच्छी व्याख्या है।

3

"प्राथमिक कुंजी" संबंधपरक डेटाबेस में एक मौलिक अवधारणा है। वे एक तालिका में पंक्ति की पहचान करने के लिए विधि हैं (होने के लिए) हैं।

प्राथमिक कुंजी बहुत निश्चित रूप से सिर्फ एक "अद्वितीय आईडी" नहीं है।

और हां, एक "प्राथमिक कुंजी" (और अक्सर होगा) केवल एक कॉलम से अधिक हो सकती है।

यहाँ पर "कई-से-अनेक" संबंध टेबल एक अच्छा लिंक है:

http://www.tekstenuitleg.net/en/articles/software/database-design-tutorial/many-to-many.html

पुनश्च: लगभग

  1. आपका उदाहरण एक होगा: अपने विशिष्ट प्रश्न का उत्तर देने निश्चित रूप से कम से कम दो अन्य टेबल हैं: एक "छात्रों" के लिए, दूसरा "घटनाओं" के लिए।

  2. इस उदाहरण में, "स्कोर" तालिका किसी विशेष छात्र को किसी विशेष घटना में मिलने वाले स्कोर का प्रतिनिधित्व करती है। "समग्र प्राथमिक कुंजी" में "छात्र आईडी" ("छात्र" तालिका में "विदेशी कुंजी") और "ईवेंट आईडी" (ईवेंट तालिका में एक विदेशी कुंजी) दोनों शामिल होते हैं।

  3. यदि आप चाहते थे कि स्कोर स्कोर हों, तो "स्कोर" तालिका पर्याप्त होगी।

  4. आप अपने स्कोर के साथ छात्र का नाम प्रिंट आउट करना चाहता था अगर, हालांकि, आप

  5. "में शामिल होने" के लिए छात्र मेज और स्कोर तालिका (एक "आंतरिक में शामिल होने के" "student_id" पर करते हैं) की आवश्यकता होगी
  6. इसी प्रकार, यदि आप स्कोर के साथ ईवेंट नाम या स्थान मुद्रित करना चाहते हैं, तो आपको शायद "event_id" पर स्कोर और ईवेंट के आंतरिक शामिल होने की आवश्यकता होगी।

'उम्मीद है कि मदद करता है!

2

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

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

तो, प्राथमिक कुंजी तालिका के लिए ट्यूपल-स्तर या पंक्ति-स्तर एड्रेसिंग तंत्र है।

2

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

अपने विशेष उदाहरण में, यदि प्रति घटना और छात्र के लिए कई पंक्तियां दर्ज करना संभव था तो एक छात्र के पास प्रति ईवेंट एक से अधिक स्कोर हो सकते थे। कुंजी एक नियम लागू करती है कि एक छात्र प्रति घटना केवल एक अंक प्राप्त कर सकता है।