ठीक है, यह एक पुनर्लेखन है। जब मैंने पहली बार जवाब दिया तो मुझे याद आया कि एप्लिकेशन अपने इतिहास को मुख्य तालिका में संग्रहीत कर रहा है। अब मुझे समझ में आया कि @NickCraver कोड के बारे में इतना क्षमाप्रार्थी क्यों है।
अच्छी तरह से करने वाली पहली बात यह है कि इस डिजाइन के अपराधियों का शिकार करें और सुनिश्चित करें कि वे इसे फिर कभी न करें। इस तरह के इतिहास को संग्रहित करना स्केल नहीं करता है, सामान्य (गैर-ऐतिहासिक) प्रश्नों को अधिक जटिल बनाता है और संबंधपरक अखंडता को तोड़ देता है। स्पष्ट रूप से ऐसे परिदृश्य हैं जहां इनमें से कोई भी मायने नहीं रखता है, और शायद आपकी साइट उनमें से एक है, लेकिन सामान्य तौर पर यह एक बहुत ही खराब कार्यान्वयन है।
ऐसा करने का सबसे अच्छा तरीका है Oracle 11g Total Recall . यह पूरी तरह से अदृश्य और कुशल कार्यान्वयन के साथ एक सुरुचिपूर्ण समाधान है, और - Oracle के अन्य प्रभार्य अतिरिक्त के मानकों के अनुसार - काफी उचित मूल्य।
लेकिन अगर टोटल रिकॉल का कोई सवाल नहीं है और आपको वास्तव में इसे करना ही होगा, तो अपडेट की अनुमति न दें . मौजूदा संपर्क रिकॉर्ड में परिवर्तन एक प्रविष्टि होना चाहिए। यह काम करने के लिए आपको ट्रिगर के बजाय एक दृश्य बनाने की आवश्यकता हो सकती है। यह अभी भी yucky है लेकिन उतना yucky नहीं है जितना अभी आपके पास है।
Oracle 11.2.0.4 के रूप में टोटल रिकॉल को फ्लैशबैक आर्काइव को रीब्रांड किया गया है और इसे एंटरप्राइज लाइसेंस के हिस्से के रूप में शामिल किया गया है (हालाँकि जब तक हम एडवांस्ड कंप्रेस विकल्प नहीं खरीदते हैं, तब तक कंप्रेस्ड जर्नल टेबल्स को बंद कर दिया जाता है)।
Oracle की इस उदारता को FDA को इतिहास को संग्रहीत करने का सामान्य तरीका बनाना चाहिए:यह कुशल है, यह प्रदर्शनकारी है, यह ऐतिहासिक प्रश्नों का समर्थन करने के लिए मानक सिंटैक्स के साथ Oracle अंतर्निहित है। काश, मैं कई वर्षों तक स्पैचकॉक्ड ट्रिगर्स, टूटी हुई प्राथमिक कुंजियों और भयानक प्रदर्शन के साथ आधे-पके हुए कार्यान्वयन को देखने की उम्मीद करता हूं। क्योंकि जर्नलिंग उन विकर्षणों में से एक प्रतीत होता है, जिससे डेवलपर्स प्रसन्न होते हैं, इस तथ्य के बावजूद कि यह निम्न-स्तरीय प्लंबिंग है जो सभी व्यावसायिक कार्यों के 99.99% के लिए काफी हद तक अप्रासंगिक है।