2013-10-04 8 views
7

मुझे उम्मीद थी किसी ने मुझे एसक्यूएल कीवर्ड का उद्देश्य समझा सकता है में कीवर्ड संदर्भदें संदर्भ SQLite3

CREATE TABLE wizards(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT, 
    age INTEGER 
, color TEXT); 

CREATE TABLE powers(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name STRING, 
    damage INTEGER, 
    wizard_id INTEGER REFERENCES wizards(id) 
); 

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

तो, प्रश्न पूछने की गति बढ़ाने के लिए कीवर्ड संदर्भ क्या है? इसका असली उद्देश्य क्या है?

धन्यवाद

उत्तर

9

यह अन्य तालिका में एक Foreign Key पैदा करता है। इसमें प्रदर्शन लाभ हो सकते हैं, लेकिन विदेशी कुंजी अधिकतर डेटा अखंडता के बारे में हैं। इसका मतलब है कि (आपके मामले में) wizard_idpowers का दायर किया गया एक मान होना चाहिए जो wizards तालिका के id फ़ील्ड में मौजूद होना चाहिए। दूसरे शब्दों में, शक्तियों को एक वैध विज़ार्ड का संदर्भ लेना चाहिए। कई डेटाबेस इस जानकारी का उपयोग हटाने या अन्य परिवर्तनों को प्रसारित करने के लिए भी करते हैं, इसलिए तालिका सिंक में रहती है।

बस यह ध्यान दिया। एक कारण यह है कि आप कुंजी बाधा को बाईपास करने में सक्षम हैं यह हो सकता है कि विदेशी कुंजी सक्षम नहीं हैं। SQLite3 दस्तावेज़ में Enabling foreign keys देखें।

+0

धन्यवाद कि यह वही है जो वास्तव में है। डिफ़ॉल्ट रूप से विदेशी कुंजी बाधा नहीं पता था बंद कर दिया गया है। – JaTo

+0

यदि यह आपके लिए काम करता है, तो जवाब स्वीकार करना न भूलें। :) –

+0

हो गया, उत्तर के लिए धन्यवाद! – JaTo