अपडेट किया गया:22 जनवरी, 2018 रिचर्ड होलोव्ज़ाक द्वारा
निम्नलिखित सामग्री एक छोटे हेयर सैलून का समर्थन करने के लिए डेटाबेस एप्लिकेशन के डिजाइन और विकास का दस्तावेजीकरण करती है। परियोजना व्यवसाय के विवरण के साथ शुरू होती है और वैचारिक (ई-आर) मॉडलिंग, तार्किक (रिलेशनल) मॉडलिंग, भौतिक मॉडलिंग और अंत में डेटाबेस एप्लिकेशन के कार्यान्वयन के माध्यम से आगे बढ़ती है। किए जा रहे चरणों की कुछ विशिष्ट विशेषताओं को समझाने के लिए प्रत्येक अनुभाग के अंत में नोट्स (टिप्पणी) प्रदान किए गए हैं।
सामग्री की तालिका
मैं. व्यवसाय परिदृश्य
II. यूएमएल नोटेशन का उपयोग कर ईआर मॉडल
III. संबंधपरक मॉडल में रूपांतरण
IV. सामान्यीकरण
वी. SQL के साथ डेटाबेस स्कीमा बनाना
VI. डेटाबेस अनुप्रयोग
VII. निष्कर्ष
.
मैं. व्यवसाय परिदृश्य
हमारी कंपनी ने 7 वर्षों के लिए मिडटाउन मैनहट्टन में एक हेयर एंड नेल सैलून का स्वामित्व और संचालन किया है। हम ग्राहकों, नियुक्तियों और भुगतानों पर नज़र रखने के लिए स्प्रेडशीट और एक पेपर लॉग बुक का उपयोग कर रहे हैं। हम व्यवसाय को ट्रैक करने की इस मैन्युअल पद्धति को डेटाबेस से बदलना चाहेंगे।
हमारे व्यवसाय में, ग्राहक अपने पसंदीदा हेयर स्टाइलिस्ट (ग्राहकों के बालों को काटने और स्टाइल करने वाले लोग) या अन्य कर्मचारियों के साथ अपॉइंटमेंट लेते हैं और कई सेवाओं में शामिल हो सकते हैं जैसे कि बेसिक हेयर कट / स्टाइलिंग, हेयर कलर, हाइलाइट्स, पर्म, फेशियल, मैनीक्योर, पेडीक्योर, आदि। हमें सामग्री (शैम्पू, बालों का रंग) और प्रत्येक सेवा को पूरा करने में लगने वाले समय का ध्यान रखना होगा। जबकि प्रत्येक सेवा का एक मानक मूल्य होता है, प्रचार और अन्य कारक दी गई सेवा के लिए ग्राहक को दी गई वास्तविक कीमत को प्रभावित कर सकते हैं।
हमें अपने कर्मचारियों के घर का पता, संपर्क जानकारी और वेतन की दर सहित उन पर भी नज़र रखनी होगी। हमें प्रत्येक ग्राहक की संपर्क जानकारी के साथ-साथ उनके लिंग पर भी नज़र रखने की आवश्यकता है। अपॉइंटमेंट के लिए हमें अपॉइंटमेंट की तारीख और समय जानना होगा और अपॉइंटमेंट किस ग्राहक के लिए है।
टिप्पणी
उपरोक्त विवरण के आधार पर, यूएमएल नोटेशन का उपयोग करके एक इकाई संबंध मॉडल बनाएं जो व्यवसाय की सभी डेटा आवश्यकताओं को कैप्चर करेगा।
द्वितीय। यूएमएल नोटेशन का उपयोग कर ईआर मॉडल
उपरोक्त विवरण के आधार पर, हम UML संकेतन का उपयोग करते हुए निम्नलिखित निकाय संबंध मॉडल विकसित करते हैं।
टिप्पणी
हमें इस मॉडल के बारे में क्या पसंद है:
- सभी संबंध रेखाएं क्षैतिज या लंबवत स्थिति में जा रही हैं। कोई रेखा पार नहीं की गई है।
- विशेषता नामों की वर्तनी नामों में रिक्त स्थान के बिना लिखी जाती है। किसी संक्षिप्ताक्षर का उपयोग नहीं किया गया है।
- प्रत्येक रिश्ते में दो बहुत ही वाक्यांश होते हैं जिनसे हम संबंध वाक्य बना सकते हैं (अगला भाग देखें)।
- आरेख में ऊपरी-दाएं कोने में एक "किंवदंती" भी है, ताकि हम बता सकें कि आरेख क्या दर्शाता है और आरेख को अंतिम बार किसने संशोधित किया था।
संबंध वाक्य
एक ग्राहक हो सकता है एक या अधिक नियुक्तियां करना
एक नियुक्ति होना चाहिए एक और केवल एक ग्राहक . के लिए आरक्षण
एक सैलून सेवा हो सकता है एक या अधिक के रूप में प्रदान की गई सेवा सेवा प्रदान की गई
एक सेवा प्रदान की गई होना चाहिए एक और केवल एक का प्रतिपादन सैलून सेवा
एक कर्मचारी हो सकता है प्रतिपादन एक या अधिक सेवा प्रदान की गई
एक सेवा प्रदान की गई होना चाहिए एक और केवल एक कर्मचारी . द्वारा प्रदान किया गया
एक नियुक्ति हो सकता है एक या अधिक सेवा प्रदान की गई . प्रदान करने के लिए आरक्षण
एक सेवा प्रदान की गई होना चाहिए एक और केवल एक नियुक्ति . के दौरान प्रदान की गई विशिष्ट सेवा
टिप्पणी
संबंध वाक्यों का अर्थ होना चाहिए। इस उदाहरण में, क्रिया वाक्यांशों को रेखांकित किया गया है। इकाई के नाम मोटे अक्षरों में हैं। न्यूनतम कार्डिनैलिटी (हो सकता है 0 के लिए और होना चाहिए 1 के लिए) इटैलिक में लिखे गए हैं। अधिकतम कार्डिनैलिटी * के लिए "एक या अधिक" और 1 के लिए "एक और केवल एक" के रूप में लिखी जाती है।
ईआर मॉडल को अंतिम रूप देने के साथ, हम अगले चरण पर आगे बढ़ते हैं - वैचारिक ईआर मॉडल को तार्किक संबंधपरक मॉडल में बदलने के लिए।
III. संबंधपरक मॉडल में रूपांतरण
अगला कदम एंटिटी रिलेशनशिप डायग्राम को रिलेशनल मॉडल में बदलना है। इस चरण के दौरान, संस्थाओं में पहचानकर्ता संबंधों में कुंजी बन जाते हैं। वन-टू-मैनी संबंधों के परिणामस्वरूप एक विदेशी कुंजी को एक तरफ से रिश्ते के कई पक्षों में कॉपी किया जा रहा है।
ग्राहक ( CustomerID (कुंजी), FirstName, LastName, PhoneNumber, Street, City, State, ZipCode )
सैलून सेवा (सेवा आईडी (कुंजी), सेवा का नाम, सेवा अवधि, सेवा मूल्य, सेवा सामग्री)
कर्मचारी (कर्मचारी आईडी (कुंजी), प्रथम नाम, अंतिम नाम, सड़क, शहर, राज्य, ज़िप कोड, वेतन दर)
नियुक्ति ( अपॉइंटमेंट आईडी (कुंजी), अपॉइंटमेंट दिनांक, नियुक्ति समय, ग्राहक आईडी (एफके) )
सेवा प्रदान की गई ( अपॉइंटमेंट आईडी (एफके) (कुंजी), लाइनइटम नम्बर (कुंजी), सर्विस आईडी (एफके), सर्विस एक्सटेंडेडप्राइस, कर्मचारी आईडी (एफके))
यह "संबंधों का प्रारंभिक सेट" है।
टिप्पणी
- ध्यान दें कि सेवा प्रदान की गई ईआर मॉडल से इकाई आईडी-निर्भर है जिसका अर्थ है कि इसे समग्र कुंजी बनाने के लिए LineItemNumber के अतिरिक्त एक विशेषता की आवश्यकता है।
- कुंजी (कुंजी) पदनाम के साथ दिखाई जाती हैं और विदेशी कुंजी (fk) पदनाम के साथ दिखाई जाती हैं।
अगला कदम संबंधों के प्रारंभिक सेट को सामान्य बनाना है।
चतुर्थ। सामान्यीकरण
अगला कदम संबंधों को सामान्य बनाना है।
प्रत्येक संबंध के लिए अनुसरण करने के चरण हैं:
- सभी विशेषता नामों सहित संबंध लिखें। कुंजियाँ और विदेशी कुंजियाँ इंगित करें।
- संबंध के लिए कुछ नमूना डेटा प्रदान करें।
- कुंजी बताएं संबंध के लिए और सभी कार्यात्मक निर्भरता लिखें .
- 1NF से शुरू होकर BCNF (या 3NF आपकी परियोजना आवश्यकताओं के आधार पर) तक जाने वाले प्रत्येक सामान्य रूप की परिभाषाओं को देखें।
- यदि कोई संबंध सामान्य रूप की परिभाषा को पूरा करता है, तो अगले उच्चतर सामान्य रूप में आगे बढ़ें।
- यदि कोई संबंध सामान्य रूप की परिभाषा को पूरा करने में विफल रहता है (उदाहरण के लिए, इसमें आंशिक-कुंजी निर्भरता है या इसमें एक संक्रमणीय निर्भरता है), तो संबंध को दो नए संबंधों में विभाजित करें।
सामान्यीकरण प्रक्रिया शुरू करें शुरुआत से इन दो नए संबंधों में से प्रत्येक के साथ।
ग्राहक संबंध
ग्राहक (ग्राहक आईडी (कुंजी), प्रथम नाम, उपनाम, ग्राहक फोन, सड़क, शहर, राज्य, ज़िप कोड, लिंग)
नमूना डेटा
CustomerID | <थ>पहला नाम <थ>अंतिम नामफ़ोन नंबर | सड़क | शहर | राज्य | ज़िपकोड | <थ>लिंग|||
---|---|---|---|---|---|---|---|---|
C101 | एलिया | फॉसेट | 201-222-2222 | 8989 स्मिथ रोड | गारफ़ील्ड | एनजे | 07026 | एफ |
C102 | ईश्वर्या | रॉबर्ट्स | 201-222-3333 | 65 आशा रोड | गारफ़ील्ड | एनजे | 07026 | एम |
C103 | फ़्रेडरिक | फॉसेट | 201-222-2222 | 8989 स्मिथ रोड | गारफ़ील्ड | एनजे | 07026 | एम |
C104 | गोल्डी | मोंटैंड | 201-222-4321 | 5235 आयरनवुड एलएन | गारफ़ील्ड | एनजे | 07026 | एफ |
C105 | धीरज | सिकंदर | 201-222-4545 | 666 22वें एवेन्यू | बर्गनफ़ील्ड | एनजे | 07621 | एम |
C106 | जोसी | डेविस | 201-333-6789 | 4200 ब्लूजे एवेन्यू | बर्गनफ़ील्ड | एनजे | 07621 | एफ |
C107 | फेय | ग्लेन | 201-333-4242 | 1522 मेन सेंट | क्लिफसाइड पार्क | एनजे | 07010 | एफ |
C108 | लॉरेन | हर्शी | 201-444-1313 | 2360 मैक्सन रोड | एंगलवुड | एनजे | 07631 | एफ |
कुंजी:ग्राहक आईडी
FD1:CustomerID -> FirstName, LastName, PhoneNumber, Street, City, State, ZipCode, Gender
FD2:ज़िपकोड -> शहर, राज्य
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:सकर्मक निर्भरता मौजूद है:CustomerID -> ZipCode और ZipCode -> शहर, राज्य
समाधान:ग्राहक संबंध को CustomerData और ZipCodes नामक दो नए संबंधों में विभाजित करें:
CustomerData (CustomerID (कुंजी), FirstName, LastName, CustPhone, Street, ZipCode (fk), Gender )
कुंजी:ग्राहक आईडी
FD1:CustomerID -> FirstName, LastName, PhoneNumber, Street, ZipCode (fk), Gender
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई ट्रांजिटिव निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
ज़िप कोड (ज़िपकोड (कुंजी), शहर, राज्य)
कुंजी:ज़िप कोड
FD1:ज़िपकोड -> शहर, राज्य
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई ट्रांजिटिव निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
सैलून सेवा संबंध
सैलून सेवा (सेवा आईडी (कुंजी), सेवा का नाम, सेवा अवधि, सेवा मूल्य, सेवा सामग्री)
नमूना डेटा:
ServiceID | सेवा अवधि | सेवा मूल्य | सेवा सामग्री | |
---|---|---|---|---|
SV101 | पुरुषों के बाल कटवाने | 20 | 22.00 | कोई नहीं |
SV102 | महिलाओं के बाल कटवाने | 30 | 32.00 | कोई नहीं |
SV103 | बाल कटाने | 20 | 15.00 | कोई नहीं |
SV104 | महिलाओं के बालों का रंग | 60 | 76.00 | रंग, अभिकर्मक, दस्ताने, अभिकर्मक ब्रश, पन्नी |
SV105 | महिलाओं की हेयर स्टाइल | 45 | 56.00 | शैम्पू, कंडीशनर |
SV106 | पुरुषों की हेयर स्टाइल | 45 | 46.00 | शैम्पू, कंडीशनर |
कुंजी:सर्विसआईडी
FD1:ServiceID -> ServiceName, ServiceDuration, ServicePrice, ServiceMaterials
1NF:ServiceMaterials को एक बहु-मूल्यवान विशेषता के रूप में माना जा सकता है। इस मामले में SalonService 1NF में नहीं है।
समाधान:ServiceMaterials को एक अलग संबंध में विभाजित करें।
इस उदाहरण के लिए, हालांकि हम ServiceMaterials को SalonService संबंध की विशेषता के रूप में रखेंगे।
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई ट्रांजिटिव निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
कर्मचारी संबंध
कर्मचारी (कर्मचारी आईडी (कुंजी), प्रथम नाम, अंतिम नाम, सड़क, शहर, राज्य, ज़िप कोड, वेतन दर)
कर्मचारी आईडी | <थ>पहला नाम <थ>अंतिम नामसड़क | शहर | राज्य | ज़िपकोड | पेरेट | ||
---|---|---|---|---|---|---|---|
E300 | खुशी | अवेदा | 46 ईस्टन एवेन्यू. | गारफ़ील्ड | एनजे | 07026 | 18.00 |
E400 | गेराल्डो | गेराल्डो | 12 फोर्टिस ब्लाव्ड। उपयुक्त 2ए | गारफ़ील्ड | एनजे | 07026 | 22.00 |
E500 | कोय | पेट्रूज़ियो | 70 विलार्ड सेंट | गारफ़ील्ड | एनजे | 07026 | 20.00 |
E600 | लैंड्री | मुनरो | 73 होली टेरेस | क्लिफसाइड पार्क | एनजे | 07010 | 18.00 |
ई700 | पैट | रीज़ | 2 लिंकन प्लेस | क्लिफसाइड पार्क | एनजे | 07010 | 23.00 |
E800 | सर्दी | टैनर | 215 एल्म एवेन्यू | टीनेक | एनजे | 07665 | 23.00 |
कुंजी:कर्मचारी आईडी
FD1:EmployeeID -> FirstName, LastName, Street, City, State, ZipCode, PayRate
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:सकर्मक निर्भरता मौजूद है:कर्मचारी आईडी -> ज़िप कोड और ज़िप कोड -> शहर, राज्य
समाधान:ग्राहक संबंध को दो नए संबंधों में विभाजित करें, जिनका नाम कर्मचारी डेटा और ज़िप कोड है:
कर्मचारी डेटा (कर्मचारी आईडी (कुंजी), प्रथम नाम, अंतिम नाम, सड़क, ज़िप कोड (एफके), वेतन दर)
कुंजी:कर्मचारी आईडी
FD1:EmployeeID -> FirstName, LastName, Street, ZipCode (fk), PayRate
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई सकर्मक निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
नोट:ग्राहक संबंध विभाजित होने के समय से हमारे पास पहले से ही एक ज़िपकोड संबंध है। इसलिए हम उस ज़िपकोड संबंध का पुन:उपयोग करते हैं। दूसरा ज़िपकोड संबंध बनाने की कोई आवश्यकता नहीं है।
नियुक्ति संबंध
अपॉइंटमेंट ( अपॉइंटमेंट आईडी (कुंजी), अपॉइंटमेंट दिनांक, अपॉइंटमेंट समय, ग्राहक आईडी (fk))
नमूना डेटा:
अपॉइंटमेंट आईडी | अपॉइंटमेंट दिनांक | अपॉइंटमेंट समय | ग्राहक आईडी |
---|---|---|---|
A400 | 10/22/2017 | 11:00:00 पूर्वाह्न | C101 |
A401 | 11/6/2017 | 12:45:00 अपराह्न | C102 |
A402 | 12/7/2017 | 2:00:00 अपराह्न | C106 |
A403 | 12/18/2017 | 3:30:00 अपराह्न | C106 |
A404 | 12/21/2017 | 11:30:00 पूर्वाह्न | C108 |
A405 | 12/31/2017 | सुबह 10:00:00 | C107 |
A406 | 1/11/2018 | 3:15:00 अपराह्न | C103 |
A407 | 1/12/2018 | 2:30:00 अपराह्न | C104 |
A408 | 1/22/2018 | 4:00:00 अपराह्न | C105 |
कुंजी:अपॉइंटमेंट आईडी
FD1:अपॉइंटमेंट आईडी -> अपॉइंटमेंट दिनांक, अपॉइंटमेंट समय, ग्राहक आईडी (fk)
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई ट्रांजिटिव निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
सेवा प्रदान किया गया संबंध
सेवा प्रदान की गई ( अपॉइंटमेंट आईडी (एफके) (कुंजी), लाइनआइटम नंबर (कुंजी), सर्विसआईडी (एफके), सर्विसएक्सटेंडेडप्राइस, कर्मचारी आईडी (एफके) )
नमूना डेटा:
अपॉइंटमेंट आईडी | लाइनआइटम नंबर | <थ>सर्विसआईडीServiceExtendedPrice | कर्मचारी आईडी | |
---|---|---|---|---|
A400 | 1 | SV104 | 75.00 | E400 |
A400 | 2 | SV102 | 25.00 | E400 |
A401 | 1 | SV101 | 22.00 | E500 |
A402 | 1 | SV104 | 75.00 | E600 |
A402 | 2 | SV102 | 30.00 | E800 |
A403 | 1 | SV105 | 50.00 | E300 |
A404 | 1 | SV105 | 55.00 | E300 |
A405 | 1 | SV102 | 30.00 | E700 |
A405 | 2 | SV104 | 70.00 | E700 |
A405 | 3 | SV105 | 50.00 | E700 |
कुंजी:अपॉइंटमेंट आईडी, LineItemNumber
FD1:अपॉइंटमेंट आईडी, लाइनइटम नंबर -> सर्विसआईडी (एफके), सर्विसएक्सटेंडेडप्राइस, कर्मचारी आईडी (एफके)
1NF:एक रिश्ते की परिभाषा को पूरा करता है
2NF:कोई आंशिक कुंजी निर्भरता नहीं
3NF:कोई ट्रांजिटिव निर्भरता नहीं
बीसीएनएफ:सभी निर्धारक उम्मीदवार कुंजी हैं
संबंधों का अंतिम सेट
ग्राहक ( CustomerID (कुंजी), FirstName, LastName, PhoneNumber, Street, ZipCode (fk), Gender )
ज़िप कोड ( ज़िप कोड (कुंजी), शहर, राज्य)
सैलून सेवा (सेवा आईडी (कुंजी), सेवा का नाम, सेवा अवधि, सेवा मूल्य, सेवा सामग्री)
कर्मचारी (कर्मचारी आईडी (कुंजी), प्रथम नाम, अंतिम नाम, सड़क, ज़िपकोड (एफके), भुगतान दर)
नियुक्ति ( अपॉइंटमेंट आईडी (कुंजी), अपॉइंटमेंट दिनांक, नियुक्ति समय, ग्राहक आईडी (एफके) )
सेवा प्रदान की गई ( अपॉइंटमेंट आईडी (एफके) (कुंजी), लाइनइटम नम्बर (कुंजी), सर्विस आईडी (एफके), सर्विस एक्सटेंडेडप्राइस, कर्मचारी आईडी (एफके))
टिप्पणी
- ध्यान दें कि केवल एक ज़िप कोड संबंध की आवश्यकता है। इसे ग्राहक और कर्मचारी दोनों संबंधों के साथ साझा किया जाता है।
- जैसा कि पहले उल्लेख किया गया है, इस उदाहरण में ServiceMaterials विशेषता को सामान्यीकृत नहीं किया गया है। शायद यह भविष्य के असाइनमेंट या मॉडल में वृद्धि में किया जा सकता है।
अब जबकि संबंध सामान्य हो गए हैं, स्कीमा को संरचित क्वेरी भाषा (एसक्यूएल) का उपयोग करके डेटाबेस प्रबंधन प्रणाली में बनाया जा सकता है।
वी. संरचित क्वेरी भाषा के साथ डेटाबेस स्कीमा बनाना
संबंधों के अंतिम सेट में प्रत्येक संबंध के लिए डेटाबेस में एक तालिका बनाएं।
निम्न SQL कोड छह टेबल बनाता है और प्रत्येक के लिए प्राथमिक कुंजी बाधा जोड़ता है:
टेबल ज़िप कोड बनाएं (ज़िपकोड VARCHAR(12) NOT NULL, शहर VARCHAR(36), राज्य VARCHAR(4), CONSTRAINT pk_zipcodes PRIMARY KEY (zipcode)) CREATE TABLE Customer(CustomerID VARCHAR(10) NOT NULL, FirstName VARCHAR( 35), अंतिम नाम VARCHAR(35), फोन नंबर VARCHAR(15), स्ट्रीट VARCHAR(35), ज़िप कोड VARCHAR(12), लिंग VARCHAR(2), CONSTRAINT pk_customer प्राथमिक कुंजी (ग्राहक आईडी)) तालिका नियुक्ति बनाएं ( नियुक्ति आईडी VARCHAR(10) न्यूल नहीं, अपॉइंटमेंट दिनांक समय दिनांक, ग्राहक आईडी VARCHAR(10) न्यूल नहीं, बाधा pk_appointment प्राथमिक कुंजी (अपॉइंटमेंट आईडी)) टेबल सैलून सेवा बनाएं (सर्विस आईडी VARCHAR(10) न्यूल नहीं, सर्विसनाम VARCHAR(35), सेवा अवधि पूर्णांक, सेवा मूल्य संख्या VARCHAR(255) ), बाधा pk_salonservice प्राथमिक कुंजी (सेवा आईडी)) तालिका कर्मचारी बनाएं (कर्मचारी VARCHAR(10) नहीं एन ULL, FirstName VARCHAR(35), LastName VARCHAR(25), Street VARCHAR(45), ZipCode VARCHAR(12), PayRate NUMBER, CONSTRAINT pk_employee PRIMARY KEY (कर्मचारी आईडी) क्रिएट टेबल सर्विसरेंडर (अपॉइंटमेंट आईडी VARCHAR(10) NOT NULL, LineItemNumber INTEGER NOT NULL, ServiceID VARCHAR(10) NOT NULL, ServiceExtendedPrice NUMBER, EmployeeID VARCHAR(10) NOT NULL, CONSTRAINT pk_ServiceRendered PRIMARY KEY (AppointmentID, LineItemNumber))
विदेशी कुंजी जोड़ना
निम्न SQL कोड तालिकाओं को एक साथ जोड़ने के लिए FOREIGN KEY बाधाओं को जोड़ते हैं:
वैकल्पिक तालिका ग्राहक जोड़ें प्रतिबंध fk_customer_zipcodes विदेशी कुंजी (ज़िपकोड) संदर्भ ज़िप कोड (ज़िपकोड) वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें fk_employee_zipcodes विदेशी कुंजी (ज़िप कोड) संदर्भ ज़िप कोड (फ़ाइनर ग्राहक_ज़िप कोड) ) वैकल्पिक तालिका सेवा प्रदान की गई सीमा जोड़ें fk_ServiceRendered_Service विदेशी कुंजी (सेवा आईडी) संदर्भ सैलून सेवा (सेवा आईडी) वैकल्पिक तालिका सेवा प्रदान की गई प्रतिबंध जोड़ें fk_ServiceRendered_कर्मचारी विदेशी कुंजी (कर्मचारी आईडी) fk_ServiceRendered_Service विदेशी कुंजी (सेवा आईडी) /पूर्व>SQL पर कमेंट्री:
- अधिकांश DBMS DATE और TIME को एक ही कॉलम में स्टोर करेंगे। तो अपॉइंटमेंटडेट और अपॉइंटमेंटटाइम को अपॉइंटमेंटडेटटाइम नामक डेटाबेस में एक कॉलम में जोड़ा गया था
- कुंजी और विदेशी कुंजियों का सटीक नाम और डेटा प्रकार समान होना चाहिए। उदाहरण के लिए, ग्राहक तालिका में कुंजी CustomerID VARCHAR(10) और अपॉइंटमेंट तालिका में VARCHAR(10) भी है।
- एक प्राथमिक कुंजी के लिए pk_customer और एक विदेशी कुंजी के लिए fk_customer_zipcodes जैसे अर्थपूर्ण नाम दिए गए हैं।
- कॉलम जैसे फ़ोन नंबर और ज़िपकोड में VARCHAR डेटा प्रकार का उपयोग करना चाहिए। यदि NUMBER या INTEGER डेटा प्रकार का उपयोग किया जाता है, तो अग्रणी शून्य गायब हो जाएंगे।
टेबल बनाने और विदेशी कुंजी बाधाओं को जोड़ने के बाद, डेटाबेस स्कीमा अब निम्न जैसा दिखता है:
रिलेशनशिप व्यू
डेटाबेस टूल्स के अंतर्गत रिलेशनशिप व्यू का उपयोग करके, हम तालिकाओं के बीच संबंध (विदेशी कुंजी) देख सकते हैं:
SQL INSERT कथनों का उपयोग करके तालिका में डेटा जोड़ना
ज़िपकोड मानों में डालें ('07026', 'गारफ़ील्ड', 'एनजे'); ज़िपकोड मानों में डालें ('07621', 'बर्गनफ़ील्ड', 'एनजे'); ज़िपकोड मानों में डालें ('07010', 'क्लिफ़साइड'); पार्क', 'एनजे'); ज़िपकोड मानों में डालें ('07631', 'एंगलवुड', 'एनजे'); ज़िपकोड मानों में डालें ('07665', 'टीनेक', 'एनजे'); ग्राहक मूल्यों में डालें (' C101', 'एलिया', 'फॉसेट', '201-222-2222', '8989 स्मिथ रोड', '07026', 'एफ'); ग्राहक मूल्यों में डालें ('C102', 'ईश्वर्या', 'रॉबर्ट्स') , '201-222-3333', '65 होप रोड', '07026', 'एम'); ग्राहक मूल्यों में डालें ('सी103', 'फ्रेडरिक', 'फॉसेट', '201-222-2222', ' 8989 स्मिथ रोड', '07026', 'एम'); ग्राहक मूल्यों में डालें ('सी104', 'गोल्डी', 'मोंटैंड', '201-222-4321', '5235 आयरनवुड एलएन', '07026', ' F'); ग्राहक मूल्यों में सम्मिलित करें ('C105', 'धीरज', 'अलेक्जेंडर', '201-222-4545', '666 22nd Ave', '07621', 'M'); ग्राहक मूल्यों में सम्मिलित करें (' C106', 'Josie', 'Davis', '201-333-6789', '4200 Bluejay Ave', '07621', 'F'); ग्राहक मूल्यों में सम्मिलित करें ('C107', 'Faye', 'Glenn') , '201-333-4242', '1 522 मेन सेंट', '07010', 'एफ'); ग्राहक मूल्यों में डालें ('सी108', 'लॉरेन', 'हर्शी', '201-444-1313', '2360 मैक्सन रोड', '07631', ' F'); सैलून सेवा मूल्यों में सम्मिलित करें ('SV101', 'पुरुषों के बाल कटवाने', 20, 22, 'कोई नहीं'); सैलून सेवा मूल्यों में सम्मिलित करें ('SV102', 'महिलाओं के बाल कटवाने', 30, 32 , 'कोई नहीं'); सैलून सेवा मूल्यों में सम्मिलित करें ('SV103', 'बाल बाल कटवाने', 20, 15, 'कोई नहीं'); सैलून सेवा मूल्यों में सम्मिलित करें ('SV104', 'महिलाओं के बालों का रंग', 60, 76 , 'रंग, अभिकर्मक, दस्ताने, अभिकर्मक ब्रश, पन्नी'); सैलून सेवा मूल्यों में सम्मिलित करें ('SV105', 'महिलाओं की हेयर स्टाइल', 45, 56, 'शैम्पू, कंडीशनर'); सैलून सेवा मूल्यों में सम्मिलित करें (' SV106', 'पुरुषों की हेयर स्टाइल', 45, 46, 'शैम्पू, कंडीशनर'); कर्मचारी मूल्यों में सम्मिलित करें ('E300', 'जॉय', 'अवेदा', '46 ईस्टन एवेन्यू।', '07026' , 18); कर्मचारी मूल्यों में सम्मिलित करें ('E400', 'गेराल्डो', 'गेराल्डो', '12 Fortis Blvd. उपयुक्त 2ए', '07026', 22);कर्मचारियों के मूल्यों में डालें ('ई500', 'कोय', 'पेट्रूज़ियो', '70 विलार्ड सेंट', '07026', 20);कर्मचारी मूल्यों में डालें ('ई600', 'लैंड्री', 'मोनरो', '73 होली टेरेस', '07010', 18); कर्मचारी मूल्यों में सम्मिलित करें ('ई700', 'पैट', 'रीज़', '2 लिंकन प्लेस', '07010', 23);कर्मचारी मूल्यों में सम्मिलित करें ('E800', 'विंटर', 'टान्नर', '215 एल्म एवेन्यू', '07665', 23); नियुक्ति मूल्यों में सम्मिलित करें ('A400', '10/22/2017 11:00:00 AM', 'C101'); नियुक्ति मूल्यों में सम्मिलित करें ('A401', '11/06/2017 12:45:00 PM', 'C102'); नियुक्ति मूल्यों में सम्मिलित करें ('A402', '12/07 /2017 02:00:00 अपराह्न', 'C106'); नियुक्ति मूल्यों में सम्मिलित करें ('A403', '12/18/2017 03:30:00 अपराह्न', 'C106'); नियुक्ति मूल्यों में सम्मिलित करें ('A404') ', '12/21/2017 11:30:00 पूर्वाह्न', 'सी108'); नियुक्ति मूल्यों में डालें ('ए405', '12/31/2017 10:00:00 पूर्वाह्न', 'सी107'); INSERT नियुक्ति मूल्यों में ('A406', '01/11/2018 03:15:00 अपराह्न', 'C103'); नियुक्ति मूल्यों में सम्मिलित करें ('A407', '01/12/2018 02:30:00 अपराह्न', 'C104'); नियुक्ति मूल्यों में सम्मिलित करें ('A408', '0 1/22/2018 04:00:00 अपराह्न', 'सी105'); सेवा प्रदान किए गए मानों में डालें ('ए400', 1, 'एसवी104', 75, 'ई400'); सेवा प्रदान किए गए मानों में डालें ('ए400', 2 , 'SV102', 25, 'E400'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A401', 1, 'SV101', 22, 'E500'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A402', 1, 'SV104', 75 , 'E600'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A402', 2, 'SV102', 30, 'E800'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A403', 1, 'SV105', 50, 'E300'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A404', 1, 'SV105', 55, 'E300'); सेवा प्रदान किए गए मानों में सम्मिलित करें ('A405', 1, 'SV102', 30, 'E700'); सेवा प्रदान किए गए मानों में सम्मिलित करें (' A405', 2, 'SV104', 70, 'E700');सेवा प्रदान किए गए मानों में डालें ('A405', 3, 'SV105', 50, 'E700');
डेटा नमूनों पर टिप्पणी
- हम तालिकाओं के बीच संबंधों का परीक्षण करने और एप्लिकेशन डेवलपर्स को काम करने के लिए कुछ देने में सक्षम होने के लिए पर्याप्त डेटा जोड़ते हैं।
- डेटा जोड़ने के क्रम से सावधान रहें। उदाहरण के लिए, ग्राहक या कर्मचारी (जो दोनों एक विदेशी कुंजी के रूप में ज़िपकोड का उपयोग करते हैं) डालने से पहले सभी ज़िपकोड को पहले सम्मिलित करने की आवश्यकता होती है।
- एम्बेडेड उद्धरणों के साथ VARCHAR डेटा जोड़ते समय, दो उद्धरणों का एक साथ उपयोग करें। उदा., 'महिलाओं की हेयर स्टाइल'
- इस बिंदु पर एप्लिकेशन डेवलपर्स के लिए डेटाबेस स्कीमा तैयार है ताकि वे फॉर्म, रिपोर्ट और प्रश्नों को डिजाइन करने के लिए काम कर सकें।
अब जब डेटाबेस स्कीमा बनाया गया है और कुछ नमूना डेटा के साथ पॉप्युलेट किया गया है, तो डेटाबेस एप्लिकेशन विकसित किया जा सकता है।
VI. डेटाबेस अनुप्रयोग
डेटाबेस एप्लिकेशन में फॉर्म, रिपोर्ट और क्वेरी का एक सेट होता है जो एक नेविगेशन फॉर्म पर एक साथ जुड़े होते हैं।
नेविगेशन फॉर्म पहला फॉर्म है जो डेटाबेस के खुलने पर दिखाई देता है।
नेविगेशन फ़ॉर्म
बाईं ओर चयन पर क्लिक करके विभिन्न डेटा प्रविष्टि प्रपत्र और रिपोर्ट प्रदर्शित की जा सकती हैं।
ग्राहक डेटा प्रविष्टि प्रपत्र
ग्राहक डेटा प्रविष्टि फॉर्म का उपयोग मौजूदा ग्राहकों को देखने और नई ग्राहक जानकारी इनपुट करने के लिए किया जाता है। शहर और राज्य फ़ील्ड स्वचालित रूप से एक ज़िपकोड फॉर्म कॉम्बो बॉक्स का चयन करके भर जाते हैं। फॉर्म में कई कस्टम वीबीए कोड होते हैं जो पहले और अंतिम नामों को उचित मामले में परिवर्तित करते हैं और एक खाली ग्राहक आईडी फ़ील्ड दिखाई देने पर एक नया, अद्वितीय ग्राहक आईडी उत्पन्न करते हैं। एक नया रिकॉर्ड बनाने के बाद।
सैलून सेवा डाटा एंट्री फॉर्म
सैलून सर्विस डेटा एंट्री फॉर्म का उपयोग नई सैलून सेवाओं को क्वेरी करने, अपडेट करने और जोड़ने के लिए किया जाता है।
अपॉइंटमेंट डेटा एंट्री फॉर्म
अपॉइंटमेंट डेटा एंट्री फॉर्म का उपयोग ग्राहक के लिए एक नया अपॉइंटमेंट बनाने के लिए किया जाता है। जैसा कि ग्राहक प्रपत्र के साथ होता है, एक नया रिकॉर्ड बनने के बाद रिक्त अपॉइंटमेंट आईडी फ़ील्ड में क्लिक करके एक नया अपॉइंटमेंट आईडी बनाया जा सकता है। ग्राहक को ग्राहक आईडी कॉम्बो बॉक्स से चुना जा सकता है जैसा कि नीचे दिखाया गया है:
यदि यह एक नया ग्राहक है जो अपॉइंटमेंट ले रहा है, तो उपयोगकर्ता ग्राहक डेटा प्रविष्टि फॉर्म लाने के लिए नए ग्राहक बटन पर क्लिक कर सकता है। नए ग्राहक की जानकारी सहेजे जाने के बाद, उपयोगकर्ता अपॉइंटमेंट डेटा एंट्री फॉर्म पर वापस आ सकता है और अपॉइंटमेंट ले सकता है।
नियुक्ति और सेवा प्रपत्र
इस फॉर्म का उद्देश्य अपॉइंटमेंट से जुड़ी विभिन्न सेवाओं में प्रवेश करना है। इस फॉर्म का उपयोग ग्राहक के लिए बिल बनाने के लिए भी किया जा सकता है। सेवा और कर्मचारी को उनके संबंधित कॉम्बो बॉक्स से चुना जा सकता है जैसा कि नीचे दिखाया गया है:
ग्राहक नियुक्तियों की कुल रिपोर्ट
यह रिपोर्ट प्रत्येक ग्राहक द्वारा नियुक्तियों की संख्या और खर्च की गई कुल राशि का सारांश प्रदान करती है।
क्वेरी के आधार पर:
ग्राहक चुनें। CustomerID, FirstName, LastName, SUM(q.TotalSpent) AS TotalSpent, COUNT(q.AppointmentID) AS NumberOfApointmentsFROM ग्राहक, अपॉइंटमेंट, Query_Total_Spent_Each_Appointment AS qWHERE CustomerID =q.CustomerID =Appointment.CustomerID और अपॉइंटमेंट Customer.CustomerID, FirstName, LastNameORDER by LastName, FirstName; द्वारा अपॉइंटमेंट आईडीग्रुप;
और क्वेरी Total_Spent_Each_appointment
सेलेक्ट अपॉइंटमेंट। अपॉइंटमेंट आईडी, एसयूएम (सर्विसएक्सटेंडेडप्राइस) कुल खर्च के रूप में नियुक्ति से, सेवा प्रदान की गई जहां नियुक्ति। नियुक्ति आईडी =सेवा प्रदान की गई। नियुक्ति के अनुसार नियुक्ति आईडी। नियुक्ति द्वारा नियुक्ति। नियुक्ति आईडी;
सेवाएं और छूट रिपोर्ट
यह रिपोर्ट प्रत्येक सेवा को नियमित सेवा मूल्य के योग, विस्तारित मूल्य और अतीत में प्रदान की गई सेवाओं पर लागू छूट की राशि के संकेत के साथ दिखाती है।
क्वेरी के आधार पर:
SalonService.ServiceID, ServiceName, SUM(ServicePrice) as TotalServicePrice, SUM(ServiceExtendedPrice) जैसे TotalExtPrice, FORMAT (1.0 - (SUM(ServiceExtendedPrice) / SUM(ServicePrice)), "0.00%") को डिस्काउंट के रूप में SalonService, ServiceRenderedWHERE से चुनें SalonService.ServiceID =ServiceRendered.ServiceIDGROUP द्वारा SalonService.ServiceID, ServiceNameORDER by SalonService.ServiceID, ServiceName;
ग्राहक पते की रिपोर्ट
यह रिपोर्ट प्रत्येक ग्राहक का पूरा नाम और पता दिखाती है।
सातवीं। निष्कर्ष
एक डेटाबेस एप्लिकेशन विकसित करना एक सिस्टम डेवलपमेंट जीवनचक्र का अनुसरण करता है जो वैचारिक मॉडलिंग से शुरू होता है और चरणों के एक संरचित सेट के माध्यम से आगे बढ़ता है जिसमें तार्किक मॉडलिंग, सामान्यीकरण, भौतिक कार्यान्वयन और अनुप्रयोग विकास शामिल हैं। हेयर सैलून परियोजना उदाहरण इन प्रमुख चरणों में से प्रत्येक को दिखाता है। हालांकि कुछ विवरण पूरी तरह से प्रलेखित नहीं किए गए हैं। उदाहरण के लिए, प्रत्येक सेवा के लिए उपयोग की जाने वाली विभिन्न सामग्रियों के लिए सैलून सेवाओं के संबंध को सामान्य करने के लिए कुछ अतिरिक्त कार्य की आवश्यकता हो सकती है। अतिरिक्त आवेदन कार्यान्वयन विवरण जैसे अन्य वीबीए कोड और प्रत्येक फॉर्म और रिपोर्ट के उपयोग के अधिक विस्तृत विवरण भी जोड़े जा सकते हैं।