इसे करने का एक तरीका यह है:
अनिवार्य रूप से, हम मौजूदा डेटा को कभी भी संशोधित या हटा नहीं देते हैं। हम एक नया संस्करण बनाकर इसे "संशोधित" करते हैं। हम हटाए गए ध्वज को सेट करके इसे "हटा" देते हैं।
उदाहरण के लिए:
- यदि उत्पाद मूल्य बदलता है, तो हम PRODUCT_VERSION में एक नई पंक्ति सम्मिलित करते हैं जबकि पुराने आदेश पुराने PRODUCT_VERSION और पुराने मूल्य से जुड़े रहते हैं।
- जब खरीदार पता बदलता है, तो हम बस CUSTOMER_VERSION में एक नई पंक्ति सम्मिलित करते हैं और पुराने ऑर्डर को पुराने संस्करण से जोड़े रखते हुए नए ऑर्डर लिंक करते हैं।
- यदि उत्पाद हटा दिया जाता है, तो हम वास्तव में इसे हटाते नहीं हैं - हम केवल PRODUCT.DELETED ध्वज सेट करते हैं, इसलिए उस उत्पाद के लिए ऐतिहासिक रूप से किए गए सभी आदेश डेटाबेस में बने रहते हैं।
- यदि ग्राहक हटा दिया गया है (उदाहरण के लिए क्योंकि उसने अपंजीकृत होने का अनुरोध किया है), तो ग्राहक को सेट करें। हटा दिया गया ध्वज।
चेतावनी:
- यदि उत्पाद का नाम अद्वितीय होना चाहिए, तो उसे उपरोक्त मॉडल में घोषणात्मक रूप से लागू नहीं किया जा सकता है। आपको या तो NAME को PRODUCT_VERSION से PRODUCT में "प्रचारित" करना होगा, इसे वहां एक कुंजी बनाना होगा और उत्पाद के नाम को "विकसित" करने की क्षमता देनी होगी, या केवल नवीनतम PRODUCT_VER (शायद ट्रिगर्स के माध्यम से) पर विशिष्टता लागू करनी होगी।
- ग्राहक की गोपनीयता के साथ एक संभावित समस्या है। यदि किसी ग्राहक को सिस्टम से हटा दिया जाता है, तो डेटाबेस से उसके डेटा को भौतिक रूप से हटाना वांछनीय हो सकता है और केवल CUSTOMER.DELETED को सेट करने से ऐसा नहीं होगा। यदि यह चिंता का विषय है, तो या तो ग्राहक के सभी संस्करणों में गोपनीयता-संवेदनशील डेटा को खाली कर दें, या वास्तविक ग्राहक से मौजूदा आदेशों को वैकल्पिक रूप से डिस्कनेक्ट करें और उन्हें एक विशेष "अनाम" ग्राहक से फिर से कनेक्ट करें, फिर सभी ग्राहक संस्करणों को भौतिक रूप से हटा दें।ली>
यह मॉडल कई पहचान वाले रिश्तों का उपयोग करता है। यह "वसा" विदेशी कुंजी की ओर जाता है और भंडारण समस्या का एक सा हो सकता है क्योंकि MySQL अग्रणी-किनारे सूचकांक संपीड़न (इसके विपरीत, ओरेकल) का समर्थन नहीं करता है, लेकिन दूसरी ओर InnoDB हमेशा डेटा को क्लस्टर करता है पीके पर और यह क्लस्टरिंग प्रदर्शन के लिए फायदेमंद हो सकता है। साथ ही, जॉइन कम जरूरी हैं।
गैर-पहचान वाले संबंधों और सरोगेट कुंजियों के साथ समतुल्य मॉडल इस तरह दिखेगा: