शुरुआती लोगों के लिए एक अच्छा डेटा मॉडलिंग अभ्यास एक ऑनलाइन स्टोर . का डेटा मॉडल बनाना है . जब भी मैं अपने छात्रों को यह अभ्यास देता हूं, मुझे आश्चर्य होता है कि यह उनके लिए कितना कठिन है।
अवधारणाएं ढूंढें...
आइए देखें कि यह कैसे किया जा सकता है। हम जानते हैं कि हमें डोमेन में प्रत्येक अवधारणा के लिए एक तालिका बनानी होगी। संज्ञा के बारे में सोचें और संज्ञा वाक्यांश आप डोमेन का वर्णन करने के लिए उपयोग करेंगे। मोटे तौर पर, प्रत्येक संज्ञा एक अवधारणा है, एक अवधारणा का एक गुण है, या एक उदाहरण है . एक ऑनलाइन स्टोर में बुनियादी अवधारणाएं क्या हैं? दो शब्द तुरंत दिमाग में आते हैं:
- ग्राहक - जो लोग हमारे स्टोर में चीजें खरीदते हैं, और
- उत्पाद - हमारे स्टोर में लोग जो सामान खरीदते हैं।
प्रत्येक ग्राहक के पास डेटा का एक बुनियादी सेट होता है जो उनका वर्णन करता है:आईडी (आपको आमतौर पर अपनी तालिका में एक आईडी विशेषता की आवश्यकता होती है), नाम, ईमेल और पासवर्ड। इसी तरह, एक उत्पाद का एक आईडी और एक नाम होता है। हम ग्राहकों और उत्पादों के लिए और विशेषताएँ जोड़ सकते हैं लेकिन इस उदाहरण के लिए, ये करेंगे। हम अपने मॉडल में दो टेबल जोड़ते हैं।
... साथ ही सार अवधारणाएं
यह एक स्टोर है, तो जाहिर है, हम जानना चाहते हैं कि क्या आदेश दिया गया था और किसके द्वारा . अधिकांश डेटाबेस में "ऑर्डर" एक कीवर्ड है, इसलिए हमें इसका उपयोग किसी तालिका नाम के लिए नहीं करना चाहिए। इसके बजाय, हम purchase
. नाम का इस्तेमाल करेंगे हमारे मॉडल में तीसरी तालिका के लिए। तालिका को किसी तरह customer
. से कनेक्ट करना होगा और product
. के लिए . शुरुआत के लिए, आइए केवल purchase
. के बीच एक संदर्भ बनाएं और customer
, और purchase
. के बीच और product
।
customer-purchase
संदर्भ ठीक है। प्रत्येक खरीद एक ग्राहक द्वारा की जाती है; हर ग्राहक कई खरीदारी कर सकता है। यह संदर्भ यहाँ रहने के लिए है।
हालांकि, purchase-product
. में कुछ गड़बड़ है संदर्भ। एक खरीद में कई उत्पाद खरीदे जा सकते हैं; कई खरीदारियों में एक ही उत्पाद शामिल हो सकता है। लेकिन हमारा संदर्भ केवल एक उत्पाद को एक ही खरीद में खरीदने की अनुमति देता है। आइए संदर्भ को हटा दें और इसे मॉडल करने के एक अलग तरीके के बारे में सोचें।
सभी खरीदे गए उत्पादों के लिए एक बड़ा टेक्स्ट फ़ील्ड?
हम एक बड़ा टेक्स्ट फ़ील्ड जोड़ने के बारे में क्या सोचते हैं जो खरीदे गए उत्पादों के नाम या आईडी संग्रहीत कर सकता है? अब हम एक खरीद में कई उत्पाद खरीद सकते हैं। हालांकि, यहां कुछ समस्याएं हैं:
- सबसे पहले, यह जांचना मुश्किल है कि उत्पाद
purchased_items
में है या नहीं फ़ील्ड वास्तव में डेटाबेस में है। - दूसरा, यदि आप उत्पाद का नाम बदलना चाहते हैं (क्योंकि आपने इसे गलत लिखा है) तो आपको सभी
purchased_items
को अपडेट करना होगाpurchase
में फ़ील्ड इंस्टेंसेस टेबल. - आखिरकार, डेटाबेस में डेटा का विश्लेषण करना मुश्किल है। उदाहरण के लिए, यदि आप यह पता लगाना चाहते हैं कि कौन सा उत्पाद सबसे अधिक बार खरीदा जाता है, तो आपको टेक्स्ट सबस्ट्रिंग ऑपरेशन का उपयोग करना होगा। और यह कभी भी बहुत कारगर नहीं होता।
खरीदारी तालिका में कई उत्पाद कॉलम?
कुछ अन्य विकल्प क्या हैं? हम चाहते हैं कि खरीदारी कई उत्पादों से जुड़ी हो, इसलिए शायद हमें कई purchase_item
जोड़ना चाहिए एक खरीद तालिका में कॉलम? खैर, यह थकाऊ है (मैंने केवल 5 कॉलम जोड़े और थक गया) और एक कृत्रिम और बेवकूफ बनाता है खरीदे गए उत्पादों की संख्या पर सीमा।
मध्यवर्ती तालिका का उपयोग करें!
मूर्खतापूर्ण समाधान सही समाधान का संकेत देता है। हम एक असीमित . चाहते हैं खरीद से जुड़े उत्पादों की संख्या। एक ही तरीका है कि एक मध्यवर्ती कनेक्टिंग टेबल . हो . आइए इसे purchase_item
कहते हैं . purchase_item
तालिका purchase
. से जुड़ी है और product
. अब एक खरीद में हम जितने चाहें उतने उत्पाद शामिल कर सकते हैं। बोनस के रूप में हम तालिका में अतिरिक्त डेटा जोड़ सकते हैं:कितनी बार खरीदा गया, इस आइटम की कुल कीमत, और इसी तरह।
निष्कर्ष:
- मॉडल में तालिकाएं न केवल भौतिक वस्तुओं का प्रतिनिधित्व कर सकती हैं ग्राहक या उत्पाद की तरह। तालिकाएं अधिक सार अवधारणाओं का प्रतिनिधित्व कर सकती हैं एक खरीद की तरह। अन्य उदाहरण होटल आरक्षण प्रणाली में बुकिंग, पुस्तकालय के लिए एक मॉडल में एक पुस्तक_ऋण, चिकित्सा डॉक्टरों के लिए एक प्रणाली में एक नियुक्ति, आदि हो सकते हैं।
- जब आप एक लेन-देन का मॉडल बनाते हैं (यानी, कई चीजों को खरीदना या बेचना), तो आपको आमतौर पर तीन टेबल की आवश्यकता होती है :एक लेन-देन के लिए (होटल आरक्षण प्रणाली में खरीद, या बुकिंग), एक लेन-देन (उत्पाद, होटल के कमरे) में खरीदी / बेची गई चीजों के लिए, और एक लेनदेन वस्तुओं के लिए (purchase_item, Booking_item)। जरूरत पड़ने पर आप मध्यवर्ती तालिका में अतिरिक्त जानकारी जोड़ सकते हैं।
Vertabelo के साथ अपना खुद का स्टोर डेटाबेस मॉडल बनाएं!