क्या आप इसके साथ डेटाबेस और टेबल बनाना शुरू करने के लिए तैयार हैं स्ट्रक्चर्ड क्वेरी लैंग्वेज? इस लेख में, हम CREATE DATABASE और CREATE TABLE कमांड के साथ मैन्युअल रूप से टेबल बनाने की प्रक्रिया का पता लगाते हैं। यदि आप SQL में नए हैं, तो हो सकता है कि आप कुछ की समीक्षा करना चाहें एसक्यूएल मूल बातें प्रथम।
व्यापार की आवश्यकताओं
इससे पहले कि हम कीबोर्ड पर बैठें, हमें यह सुनिश्चित करने की आवश्यकता है कि हमें ग्राहक की आवश्यकताओं की ठोस समझ है। इस अंतर्दृष्टि को प्राप्त करने का सबसे अच्छा तरीका क्या है? ग्राहक से बात करना, बिल्कुल! एक्सवाईजेड के मानव संसाधन निदेशक के साथ बैठने के बाद, हमने सीखा है कि वे एक विजेट बिक्री कंपनी हैं और मुख्य रूप से अपने बिक्री कर्मियों पर जानकारी ट्रैक करने में रुचि रखते हैं।
XYZ Corporation अपनी बिक्री बल को पूर्वी और पश्चिमी क्षेत्रों में विभाजित करता है, जिनमें से प्रत्येक व्यक्तिगत बिक्री प्रतिनिधि द्वारा कवर किए गए कई क्षेत्रों में विभाजित है। मानव संसाधन विभाग प्रत्येक कर्मचारी द्वारा कवर किए गए क्षेत्र के साथ-साथ प्रत्येक कर्मचारी के वेतन की जानकारी और पर्यवेक्षी संरचना को ट्रैक करना चाहेगा। इन आवश्यकताओं को पूरा करने के लिए, हमने तीन तालिकाओं से युक्त एक डेटाबेस तैयार किया है, जो इसमें दिखाया गया है
एंटिटी रिलेशनशिप डायग्राम इस पृष्ठ पर।डेटाबेस प्लेटफॉर्म चुनना
हमने a. का उपयोग करने का निर्णय लिया है डेटाबेस प्रबंधन प्रणाली (या डीबीएमएस) जो संरचित क्वेरी भाषा (एसक्यूएल) पर बनाया गया है। इसलिए, हमारे सभी डेटाबेस और टेबल निर्माण कमांड को मानक एएनएसआई एसक्यूएल को ध्यान में रखकर लिखा जाना चाहिए।
एक अतिरिक्त लाभ के रूप में, एएनएसआई-संगत एसक्यूएल का उपयोग यह सुनिश्चित करेगा कि ये आदेश किसी भी डीबीएमएस पर काम करेंगे जो ओरेकल और माइक्रोसॉफ्ट एसक्यूएल सर्वर सहित एसक्यूएल मानक का समर्थन करता है। यदि आपने अभी तक अपने डेटाबेस के लिए एक प्लेटफॉर्म का चयन नहीं किया है, तो डेटाबेस सॉफ्टवेयर विकल्प आपको चयन प्रक्रिया के बारे में बताता है।
डेटाबेस बनाना
हमारा पहला कदम खुद डेटाबेस बनाना है। कई डेटाबेस प्रबंधन प्रणालियाँ इस चरण में डेटाबेस मापदंडों को अनुकूलित करने के लिए विकल्पों की एक श्रृंखला प्रदान करती हैं, लेकिन हमारा डेटाबेस केवल एक डेटाबेस के सरल निर्माण की अनुमति देता है। हमारे सभी आदेशों की तरह, आप यह निर्धारित करने के लिए अपने डीबीएमएस के लिए दस्तावेज़ीकरण से परामर्श करना चाह सकते हैं कि आपके विशिष्ट सिस्टम द्वारा समर्थित कोई उन्नत पैरामीटर आपकी आवश्यकताओं को पूरा करता है या नहीं। आइए अपना डेटाबेस सेट करने के लिए CREATE DATABASE कमांड का उपयोग करें:
डेटाबेस कर्मियों बनाएँ
ऊपर दिए गए उदाहरण में प्रयुक्त कैपिटलाइज़ेशन पर विशेष ध्यान दें। SQL प्रोग्रामर के बीच "CREATE" जैसे SQL कीवर्ड के लिए सभी बड़े अक्षरों का उपयोग करना आम बात है। और "डेटाबेस" उपयोगकर्ता द्वारा परिभाषित नामों जैसे "कार्मिक" डेटाबेस के लिए सभी लोअरकेस अक्षरों का उपयोग करते समय नाम। ये सम्मेलन आसान पठनीयता प्रदान करते हैं।
अब जब हमने अपना डेटाबेस डिज़ाइन और बना लिया है, तो हम XYZ Corporation के कार्मिक डेटा को संग्रहीत करने के लिए उपयोग की जाने वाली तीन तालिकाएँ बनाना शुरू करने के लिए तैयार हैं।
हमारी पहली तालिका बनाना
हमारी पहली तालिका में हमारी कंपनी के प्रत्येक कर्मचारी के लिए व्यक्तिगत डेटा होता है। हमें प्रत्येक कर्मचारी का नाम, वेतन, आईडी और प्रबंधक शामिल करना होगा। भविष्य में डेटा खोज और सॉर्टिंग को आसान बनाने के लिए अंतिम और प्रथम नामों को अलग-अलग फ़ील्ड में अलग करना अच्छा डिज़ाइन अभ्यास है। साथ ही, हम प्रत्येक कर्मचारी रिकॉर्ड में प्रबंधक की कर्मचारी आईडी का संदर्भ सम्मिलित करके प्रत्येक कर्मचारी के प्रबंधक का ट्रैक रखेंगे। आइए पहले वांछित कर्मचारी तालिका पर एक नज़र डालें।
ReportsTo विशेषता प्रत्येक कर्मचारी के लिए प्रबंधक आईडी संग्रहीत करती है। दिखाए गए नमूना रिकॉर्ड से, हम यह निर्धारित कर सकते हैं कि सू स्कम्पी टॉम केंडल और जॉन स्मिथ दोनों के प्रबंधक हैं। हालांकि, मुकदमा के प्रबंधक पर डेटाबेस में कोई जानकारी नहीं है, जैसा कि उसकी पंक्ति में NULL प्रविष्टि द्वारा दर्शाया गया है।
अब हम अपने कार्मिक डेटाबेस में तालिका बनाने के लिए SQL का उपयोग कर सकते हैं। ऐसा करने से पहले, आइए एक USE कमांड जारी करके सुनिश्चित करें कि हम सही डेटाबेस में हैं:
उपयोग कर्मियों;
वैकल्पिक रूप से, "डेटाबेस कार्मिक;" कमांड समान कार्य करेगा। अब हम अपने कर्मचारियों की तालिका बनाने के लिए प्रयुक्त SQL कमांड पर एक नज़र डाल सकते हैं:
टेबल कर्मचारी बनाएं
(कर्मचारी पूर्णांक शून्य नहीं है,
अंतिम नाम VARCHAR(25) नल नहीं,
प्रथम नाम वचर (25) शून्य नहीं,
रिपोर्ट टू इंटेगर न्यूल);
जैसा कि ऊपर दिए गए उदाहरण के साथ है, ध्यान दें कि प्रोग्रामिंग कन्वेंशन यह निर्देश देता है कि हम SQL कीवर्ड के लिए सभी बड़े अक्षरों और उपयोगकर्ता-नाम वाले कॉलम और टेबल के लिए लोअरकेस अक्षरों का उपयोग करें। ऊपर दिया गया आदेश पहली बार में भ्रमित करने वाला लग सकता है, लेकिन इसके पीछे वास्तव में एक सरल संरचना है। यहाँ एक सामान्यीकृत दृष्टिकोण है जो चीजों को थोड़ा साफ कर सकता है:
तालिका बनाएं_नाम
(विशेषता_नाम डेटाटाइप विकल्प,
...,
विशेषता_नाम डेटाटाइप विकल्प);
गुण और डेटा प्रकार
पिछले उदाहरण में, तालिका का नाम कर्मचारी है और हम चार शामिल करते हैं गुण: कर्मचारी, अंतिम नाम, प्रथम नाम, और रिपोर्ट करने के लिए। डेटाटाइप उस प्रकार की जानकारी को इंगित करता है जिसे हम प्रत्येक क्षेत्र में संग्रहीत करना चाहते हैं। कर्मचारी आईडी एक साधारण पूर्णांक संख्या है, इसलिए हम कर्मचारी फ़ील्ड और रिपोर्टो फ़ील्ड दोनों के लिए INTEGER डेटाटाइप का उपयोग करेंगे। कर्मचारी नाम परिवर्तनशील लंबाई के वर्ण तार होंगे और हम किसी भी कर्मचारी से 25 वर्णों से अधिक का पहला या अंतिम नाम होने की उम्मीद नहीं करते हैं। इसलिए, हम इन क्षेत्रों के लिए VARCHAR(25) प्रकार का उपयोग करेंगे।
शून्य मान
हम या तो निर्दिष्ट कर सकते हैं न्यूल या नॉट न्यूल क्रिएट स्टेटमेंट के विकल्प क्षेत्र में। यह केवल डेटाबेस को बताता है कि डेटाबेस में पंक्तियों को जोड़ते समय उस विशेषता के लिए NULL (या खाली) मानों की अनुमति है या नहीं। हमारे उदाहरण में, मानव संसाधन विभाग की आवश्यकता है कि प्रत्येक कर्मचारी के लिए एक कर्मचारी आईडी और पूरा नाम संग्रहीत किया जाए। हालांकि, प्रत्येक कर्मचारी के पास एक प्रबंधक नहीं होता है (सीईओ किसी को रिपोर्ट नहीं करता है!) इसलिए हम उस क्षेत्र में NULL प्रविष्टियों की अनुमति देते हैं। ध्यान दें कि NULL डिफ़ॉल्ट मान है और इस विकल्प को छोड़ने से किसी विशेषता के लिए NULL मानों को परोक्ष रूप से अनुमति मिल जाएगी।
शेष तालिकाओं का निर्माण
आइए अब प्रदेशों की तालिका पर एक नजर डालते हैं। इस डेटा पर एक त्वरित नज़र से, ऐसा प्रतीत होता है कि हमें एक पूर्णांक और दो चर-लंबाई वाले तारों को संग्रहीत करने की आवश्यकता है। हमारे पिछले उदाहरण की तरह, हम उम्मीद नहीं करते हैं कि क्षेत्र आईडी 25 से अधिक वर्णों का उपभोग करेगा। हालांकि, हमारे कुछ क्षेत्रों के नाम लंबे हैं, इसलिए हम उस विशेषता की स्वीकार्य लंबाई को 40 वर्णों तक बढ़ा देंगे।
आइए संबंधित SQL को देखें:
तालिका क्षेत्र बनाएं
(क्षेत्रीय पूर्णांक शून्य नहीं है,
क्षेत्र विवरण VARCHAR(40) NOT NULL,
क्षेत्रीय वचर (25) न्यूल नहीं);
अंत में, हम कर्मचारी क्षेत्र तालिका का उपयोग कर्मचारियों और क्षेत्रों के बीच संबंधों को संग्रहीत करने के लिए करेंगे। प्रत्येक कर्मचारी और क्षेत्र की विस्तृत जानकारी हमारी पिछली दो तालिकाओं में संग्रहीत है। इसलिए, हमें इस तालिका में केवल दो पूर्णांक पहचान संख्याओं को संग्रहीत करने की आवश्यकता है। यदि हमें इस जानकारी का विस्तार करने की आवश्यकता है तो हम कई तालिकाओं से जानकारी प्राप्त करने के लिए अपने डेटा चयन कमांड में जॉइन का उपयोग कर सकते हैं।
डेटा स्टोर करने की यह विधि हमारे डेटाबेस में अतिरेक को कम करती है और हमारे स्टोरेज ड्राइव पर स्थान का इष्टतम उपयोग सुनिश्चित करती है। हम भविष्य के ट्यूटोरियल में जॉइन कमांड को गहराई से कवर करेंगे। हमारी अंतिम तालिका को लागू करने के लिए यहां SQL कोड है:
तालिका कर्मचारी क्षेत्र बनाएं
(कर्मचारी पूर्णांक शून्य नहीं है,
टेरिटरीड INTEGER NOT NULL);
निर्माण के बाद डेटाबेस की संरचना को बदलने के लिए तंत्र SQL प्रदान करता है
यदि आप आज विशेष रूप से चतुर हैं, तो आपने देखा होगा कि हमने अपने डेटाबेस तालिकाओं को लागू करते समय "गलती से" डिज़ाइन आवश्यकताओं में से एक को छोड़ दिया था। XYZ Corporation के मानव संसाधन निदेशक ने अनुरोध किया कि डेटाबेस कर्मचारी वेतन जानकारी को ट्रैक करे और हमने इसे अपने द्वारा बनाए गए डेटाबेस तालिकाओं में प्रदान करने की उपेक्षा की।
वैसे, सबकुछ नष्ट नहीं हुआ है। हम इस विशेषता को अपने मौजूदा डेटाबेस में जोड़ने के लिए ALTER TABLE कमांड का उपयोग कर सकते हैं। हम वेतन को एक पूर्णांक मान के रूप में संग्रहीत करना चाहते हैं। सिंटैक्स काफी हद तक CREATE TABLE कमांड के समान है, यहाँ यह है:
ALTER TABLE कर्मचारी
वेतन जोड़ें INTEGER NULL;
ध्यान दें कि हमने निर्दिष्ट किया है कि इस विशेषता के लिए NULL मानों की अनुमति है। ज्यादातर मामलों में, मौजूदा तालिका में कॉलम जोड़ते समय कोई विकल्प नहीं होता है। यह इस तथ्य के कारण है कि तालिका में पहले से ही इस विशेषता के लिए बिना किसी प्रविष्टि के पंक्तियाँ हैं। इसलिए, DBMS शून्य को भरने के लिए स्वचालित रूप से एक NULL मान सम्मिलित करता है।