डेटाबेस की ज़रूरत क्यों?
फ़ाइल सिस्टम में हर दफ़्तर अपनी फ़ाइलें रखता है। इससे समस्याएँ होती हैं:
- डेटा दोहराव (redundancy): एक ही डेटा बार-बार रखा जाता है, जगह बर्बाद।
- डेटा असंगति (inconsistency): एक कॉपी बदले और दूसरी नहीं, तो कॉपियाँ मेल नहीं खातीं।
- कठिन पहुँच: हर नए प्रश्न के लिए नया प्रोग्राम।
- कम सुरक्षा और साझा करना कठिन: कौन क्या देखे, यह नियंत्रित करना और एक साथ कई लोगों का उपयोग कठिन।
- डेटा निर्भरता: फ़ाइल का प्रारूप बदलो तो हर प्रोग्राम टूटे।
डेटाबेस संबंधित डेटा का व्यवस्थित संग्रह है। DBMS (डेटाबेस मैनेजमेंट सिस्टम) वह सॉफ़्टवेयर है जो इसे बनाता, रखता, बदलता और सुरक्षित करता है, जैसे MySQL, Oracle, PostgreSQL, SQLite। DBMS दोहराव घटाता है, डेटा संगत रखता है, कई उपयोगकर्ताओं को सुरक्षित रूप से बाँटने देता है और प्रश्नों के उत्तर जल्दी देता है।
संबंधपरक मॉडल: रिलेशन, एट्रिब्यूट, ट्यूपल, डोमेन
संबंधपरक डेटा मॉडल (ई. एफ़. कॉड द्वारा) में डेटा द्वि-आयामी तालिकाओं में रहता है।
- रिलेशन: तालिका।
- एट्रिब्यूट: स्तंभ (नाम वाला गुण, जैसे Name)।
- ट्यूपल: पंक्ति (एक रिकॉर्ड)।
- डोमेन: किसी एट्रिब्यूट के मान्य मानों का समूह (Marks: 0 से 100; Gender: M/F/O)।
रिलेशन के नियम: हर एट्रिब्यूट का नाम अलग; पंक्तियों-स्तंभों का क्रम मायने नहीं रखता; कोई दो ट्यूपल बिल्कुल एक जैसे नहीं; हर ख़ाने में एक ही मान (atomic)।
| RollNo | Name | Class | AadhaarNo |
|---|---|---|---|
| 1 | Asha | 12A | 4411… |
| 2 | Ravi | 12B | 5522… |
| 3 | Zoya | 12A | 6633… |
ऊपर तालिका STUDENT।
डिग्री और कार्डिनैलिटी
- डिग्री = एट्रिब्यूट (स्तंभों) की संख्या। ऊपर STUDENT की डिग्री 4।
- कार्डिनैलिटी = ट्यूपल (पंक्तियों) की संख्या। ऊपर STUDENT की कार्डिनैलिटी 3।
पंक्ति जोड़ने से कार्डिनैलिटी बदलती है; स्तंभ जोड़ने से डिग्री।
दो रिलेशनों का कार्टेशियन गुणनफल बनाने पर डिग्री जुड़ती हैं और कार्डिनैलिटी गुणा होती हैं।
कीज़: कैंडिडेट, प्राइमरी, अल्टरनेट
की वह एट्रिब्यूट (या एट्रिब्यूटों का समूह) है जिससे पंक्तियाँ पहचानी जाती हैं।
- कैंडिडेट की: कोई एट्रिब्यूट या न्यूनतम समूह जिसके मान हर ट्यूपल के लिए अलग हों और कभी ख़ाली न हों। STUDENT में RollNo और AadhaarNo दोनों कैंडिडेट की हैं। Name नहीं (दो छात्रों का नाम एक हो सकता है)।
- प्राइमरी की: ट्यूपल पहचानने को चुनी गई एक कैंडिडेट की। यह अनोखी और NOT NULL होनी चाहिए। मान लीजिए RollNo चुनी।
- अल्टरनेट की: प्राइमरी न चुनी गई हर कैंडिडेट की। यहाँ AadhaarNo।
- कंपोज़िट की: दो या ज़्यादा एट्रिब्यूट मिलकर बनी की, जैसे (Class, SectionRoll)।
संबंध: कैंडिडेट कीज़ = प्राइमरी की + अल्टरनेट कीज़।
फ़ॉरेन की
फ़ॉरेन की एक रिलेशन का वह एट्रिब्यूट है जो दूसरे रिलेशन की प्राइमरी की की ओर इशारा करता है। यह दोनों तालिकाएँ जोड़ता है।
| ExamID | RollNo | Subject | Marks |
|---|---|---|---|
| 101 | 1 | CS | 92 |
| 102 | 3 | CS | 81 |
तालिका MARKS में RollNo फ़ॉरेन की है जो STUDENT(RollNo) की ओर इशारा करती है। STUDENT पैरेंट (संदर्भित) तालिका है; MARKS चाइल्ड (संदर्भ देने वाली) तालिका।
रेफ़रेंशियल इंटीग्रिटी: फ़ॉरेन की का मान या तो पैरेंट तालिका की किसी मौजूद प्राइमरी की से मेल खाए या NULL हो। इसलिए छात्र 9 न हो तो RollNo 9 के अंक नहीं डाल सकते, और छात्र 1 के अंक रहते छात्र 1 को नहीं हटा सकते (जब तक नियम न बताएँ क्या करना है)। फ़ॉरेन की दोहरा सकती है (एक छात्र की कई अंक-पंक्तियाँ)।
करके देखें: अपने आस-पास कीज़ ढूँढिए
5 दोस्तों की तालिका बनाइए: Name, Phone, Email, City, BirthDate। इसकी डिग्री और कार्डिनैलिटी लिखिए। कौन-से स्तंभ हर दोस्त को पहचान सकते हैं (कैंडिडेट की)? एक को प्राइमरी चुनिए; बाकी अल्टरनेट हैं। अब दूसरी तालिका CALLS(CallID, Phone, Minutes) बनाइए और फ़ॉरेन की पहचानिए। फिर 3D के आख़िरी कदम में नियम तोड़ने वाली पंक्तियाँ डालकर अपने विचार जाँचिए।
मुख्य सूत्र और परिभाषाएँ
- रिलेशन = तालिका · एट्रिब्यूट = स्तंभ · ट्यूपल = पंक्ति · डोमेन = मान्य मान
- डिग्री = स्तंभों की संख्या · कार्डिनैलिटी = पंक्तियों की संख्या
- कैंडिडेट कीज़ = प्राइमरी की + अल्टरनेट कीज़
- फ़ॉरेन की (चाइल्ड) → प्राइमरी की (पैरेंट); मान मौजूद हो या NULL
हल किए गए उदाहरण
1. तालिका BOOK में स्तंभ BookID, Title, Author, Price, ISBN और 40 पंक्तियाँ हैं। डिग्री और कार्डिनैलिटी?
डिग्री = 5 (स्तंभ)। कार्डिनैलिटी = 40 (पंक्तियाँ)।
2. BOOK में 10 किताबें और एक स्तंभ Publisher जोड़ा गया। नई डिग्री और कार्डिनैलिटी?
डिग्री = 5 + 1 = 6। कार्डिनैलिटी = 40 + 10 = 50।
3. BOOK में BookID और ISBN दोनों हर किताब के लिए अलग हैं। Title दोहरा सकता है। कैंडिडेट, प्राइमरी और अल्टरनेट की बताइए।
कैंडिडेट: BookID, ISBN। BookID प्राइमरी चुनें तो ISBN अल्टरनेट। Title की नहीं है।
4. तालिका ISSUE(IssueNo, BookID, MemberID, Date)। फ़ॉरेन की कौन-सी हैं और किन तालिकाओं की ओर?
BookID → BOOK(BookID); MemberID → MEMBER(MemberID)। IssueNo, ISSUE की अपनी प्राइमरी की है।
5. Name, STUDENT की प्राइमरी की क्यों नहीं हो सकता?
दो छात्रों का नाम एक हो सकता है, इसलिए यह अनोखा नहीं, और प्राइमरी की अनोखी व NOT NULL होनी चाहिए।
6. R1 की डिग्री 3, कार्डिनैलिटी 4; R2 की डिग्री 2, कार्डिनैलिटी 5। कार्टेशियन गुणनफल की डिग्री और कार्डिनैलिटी?
डिग्री = 3 + 2 = 5। कार्डिनैलिटी = 4 × 5 = 20।
आम गलतियाँ
- डिग्री (स्तंभ) और कार्डिनैलिटी (पंक्तियाँ) की अदला-बदली।
- सोचना कि तालिका की दो प्राइमरी की हो सकती हैं; एक ही होती है (कंपोज़िट भी हो सकती है), बाकी कैंडिडेट अल्टरनेट बनती हैं।
- प्राइमरी की स्तंभ में NULL आने देना; यह NOT NULL होनी चाहिए।
- सोचना कि फ़ॉरेन की चाइल्ड तालिका में अनोखी होनी चाहिए; यह दोहरा सकती है।