मैं आपके साथ अपना डिज़ाइन साझा करने जा रहा हूं और यह आपके दोनों डिज़ाइनों से अलग है, इसमें प्रत्येक इकाई के प्रकार के लिए एक टेबल की आवश्यकता है। मुझे किसी भी डेटाबेस डिज़ाइन का वर्णन करने का सबसे अच्छा तरीका मिला है वह है ERD, यहाँ मेरा है:
इस उदाहरण में हमारे पास कर्मचारी नाम की एक इकाई है । उपयोगकर्ता तालिका में आपके उपयोगकर्ताओं के रिकॉर्ड और एंटिटी और एंट्री_रेविजन दो टेबल हैं, जो आपके सिस्टम में मौजूद सभी यूनिट प्रकारों के लिए संशोधन इतिहास रखती हैं। यहां बताया गया है कि यह डिज़ाइन कैसे काम करता है:
दो फील्ड्स का Unit_id और revision_id
आपके सिस्टम की प्रत्येक इकाई की अपनी एक विशिष्ट इकाई आईडी होगी। आपकी संस्था संशोधन के माध्यम से जा सकती है, लेकिन उसका एंट्री_ड वैसा ही रहेगा। आपको इस इकाई आईडी को कर्मचारी तालिका (एक विदेशी कुंजी के रूप में) में रखने की आवश्यकता है। आपको अपनी इकाई के प्रकार को इकाई तालिका (जैसे 'कर्मचारी') में संग्रहित करना चाहिए । अब revision_id के लिए, जैसा कि इसके नाम से पता चलता है, यह आपकी इकाई संशोधनों का ट्रैक रखता है। इसके लिए मुझे सबसे अच्छा तरीका यह है कि आप अपने revision_id के रूप में कर्मचारी_ का उपयोग करें । इसका मतलब है कि आपके पास विभिन्न प्रकार की संस्थाओं के लिए डुप्लिकेट संशोधन आईडी होंगे, लेकिन यह मेरे लिए कोई व्यवहार नहीं है (मैं आपके मामले के बारे में निश्चित नहीं हूं)। बनाने के लिए केवल महत्वपूर्ण नोट यह है कि Unit_id और revision_id का संयोजन अद्वितीय होना चाहिए।
वहां भी एक राज्य क्षेत्र के अंदर है_ परिशोधन तालिका जो संशोधन की स्थिति का संकेत देती है। यह तीन राज्यों में से एक हो सकता है: latest
, obsolete
याdeleted
(संशोधन की तारीख पर भरोसा नहीं करना आपके प्रश्नों को बढ़ावा देने में बहुत मदद करता है)।
Revision_id पर एक अंतिम नोट, मैंने एक विदेशी कुंजी कनेक्ट करने के लिए कर्मचारी_id को revision_id में नहीं बनाया क्योंकि हम प्रत्येक इकाई प्रकार के लिए Unit_revision तालिका को बदलना नहीं चाहते हैं जिसे हम भविष्य में जोड़ सकते हैं।
प्रविष्टि
प्रत्येक कर्मचारी के लिए जिसे आप डेटाबेस में सम्मिलित करना चाहते हैं, आप इकाई और Unit_revision में एक रिकॉर्ड भी जोड़ देंगे । ये पिछले दो रिकॉर्ड आपको किसके द्वारा और कब एक रिकॉर्ड डेटाबेस में डाले गए हैं, इस पर नज़र रखने में मदद करेंगे।
अपडेट करें
मौजूदा कर्मचारी रिकॉर्ड के लिए प्रत्येक अपडेट को दो आवेषण के रूप में लागू किया जाएगा, एक कर्मचारी तालिका में और एक एंट्री_रेविजन में। दूसरा व्यक्ति आपको यह जानने में मदद करेगा कि रिकॉर्ड किसने और कब अपडेट किया है।
विलोपन
किसी कर्मचारी को हटाने के लिए, एक रिकॉर्ड हटा दिया जाता है और किया गया।
जैसा कि आप इस डिज़ाइन में देख सकते हैं कि कोई भी डेटा कभी भी डेटाबेस से परिवर्तित या हटाया नहीं गया है और इससे भी महत्वपूर्ण बात यह है कि प्रत्येक इकाई के प्रकार के लिए केवल एक तालिका की आवश्यकता होती है। व्यक्तिगत रूप से मुझे यह डिज़ाइन वास्तव में लचीला और काम करने में आसान लगता है। लेकिन मैं आपके बारे में निश्चित नहीं हूं क्योंकि आपकी जरूरतें अलग हो सकती हैं।
[अपडेट करें]
नए MySQL संस्करणों में समर्थित विभाजन होने के बाद, मेरा मानना है कि मेरा डिज़ाइन भी सर्वश्रेष्ठ प्रदर्शनों में से एक है। एक अपने क्षेत्र का उपयोग करते हुए विभाजन का उपयोग entity
करके तालिका का type
विभाजन entity_revision
कर सकता है state
। यह SELECT
डिजाइन को सरल और साफ रखने के लिए दूर तक प्रश्नों को बढ़ावा देगा ।