कुछ सह-कार्यकर्ता और मैं ऐतिहासिक डेटा को स्टोर करने के सर्वोत्तम तरीके पर एक बहस में पड़ गए। वर्तमान में, कुछ प्रणालियों के लिए, मैं ऐतिहासिक डेटा को संग्रहीत करने के लिए एक अलग तालिका का उपयोग करता हूं, और मैं वर्तमान, सक्रिय रिकॉर्ड के लिए एक मूल तालिका रखता हूं। तो, मान लें कि मेरे पास तालिका FOO है। मेरे सिस्टम के तहत, सभी सक्रिय रिकॉर्ड FOO में जाएंगे, और सभी ऐतिहासिक रिकॉर्ड FOO_Hist में जाएंगे। FOO में कई अलग-अलग फील्ड्स को यूजर द्वारा अपडेट किया जा सकता है, इसलिए मैं अपडेट की गई हर चीज का सही हिसाब रखना चाहता हूं। FOO_Hist एक ऑटो-इंक्रीमेंटिंग HIST_ID के अपवाद के साथ FOO के समान सटीक फ़ील्ड रखता है। जब भी FOO अपडेट किया जाता है, मैं FOO_Hist में सम्मिलित विवरण देता हूं:insert into FOO_HIST select * from FOO where id = @id
।
मेरे सह-कार्यकर्ता का कहना है कि यह खराब डिज़ाइन है क्योंकि मेरे पास ऐतिहासिक कारणों के लिए एक तालिका की सटीक प्रतिलिपि नहीं होनी चाहिए और बस एक और रिकॉर्ड को सक्रिय तालिका में सम्मिलित करना चाहिए जिसमें यह संकेत हो कि यह ऐतिहासिक उद्देश्यों के लिए है।
क्या ऐतिहासिक डेटा भंडारण से निपटने के लिए कोई मानक है? यह मुझे लगता है कि मैं अपने सभी ऐतिहासिक रिकॉर्डों के साथ अपने सक्रिय रिकॉर्ड को एक ही तालिका में शामिल नहीं करना चाहता हूं, यह देखते हुए कि यह एक लाख से अधिक रिकॉर्ड हो सकता है (मैं दीर्घकालिक सोच रहा हूं)।
आप या आपकी कंपनी इसे कैसे संभालती है?
मैं एमएस SQL सर्वर 2008 का उपयोग कर रहा हूं, लेकिन मैं किसी भी DBMS के उत्तर को सामान्य और मनमाना रखना चाहूंगा।