SQL सर्वर 2008+ में, हम एक परिचालन डेटाबेस में "ग्राहक" तालिका में ऐतिहासिक परिवर्तनों की ट्रैकिंग को सक्षम करना चाहते हैं।ऑडिट तालिका बनाम टाइप 2 धीरे-धीरे बदलते आयाम
यह एक नई टेबल है और हमारा ऐप डेटाबेस पर सभी लेखन को नियंत्रित करता है, इसलिए हमें ट्रिगर जैसे बुराई हैक की आवश्यकता नहीं है। इसके बजाए हम अपनी व्यावसायिक ऑब्जेक्ट परत में परिवर्तन ट्रैकिंग का निर्माण करेंगे, लेकिन हमें उपयोग करने के लिए सही डेटाबेस स्कीमा को समझने की आवश्यकता है।
पंक्तियों की संख्या 100,000 से कम होगी और प्रति रिकॉर्ड में परिवर्तन प्रति वर्ष औसत 1.5 होगा।
वहाँ कम से कम दो तरीके हम इस मॉडलिंग को देखकर किया गया है कर रहे हैं: एक Type 2 Slowly Changing Dimension तालिका के रूप में
ग्राहक के वर्तमान संस्करण के लिए
CustomersHistory
कहा जाता है, कॉलम के साथEffectiveStartDate
के लिए,NULL
करने के लिएEffectiveEndDate
(सेट), औरChangeReason
औरChangedByUsername
जैसे ऑडिटिंग कॉलम। फिर हम उस तालिका परCustomers
देखेंगे जिसेEffectiveEndDate=NULL
पर फ़िल्टर किया गया है। हमारे ऐप के अधिकांश भाग उस दृश्य का उपयोग करके पूछताछ करेंगे, और केवल वे हिस्सों जिन्हें इतिहास-जागरूक होने की आवश्यकता है, अंतर्निहित तालिका से पूछेंगे। प्रदर्शन के लिए, हम दृश्य को पूरा कर सकते हैं और/या EffectiveEndDate = NULL पर फ़िल्टर किए गए इंडेक्स को जोड़ सकते हैं।एक अलग ऑडिट तालिका के साथ।
Customer
रिकॉर्ड में प्रत्येक परिवर्तनCustomer
तालिका में और फिरCustomerHistory
ऑडिट तालिका में लिखता है।
StackOverflow सवाल की एक त्वरित समीक्षा से, # 2 अधिक लोकप्रिय हो रहा है। लेकिन ऐसा इसलिए है क्योंकि अधिकांश डीबी ऐप्स को विरासत और दुष्ट लेखकों से निपटना पड़ता है?
यह देखते हुए कि हम एक खाली स्लेट से शुरू कर रहे हैं, तो किसी भी दृष्टिकोण के पेशेवर और विपक्ष क्या हैं? आप किसकी सिफारिश करेंगे?
यह एक ओएलटीपी डेटाबेस एक अलग डेटा गोदाम नहीं है, लेकिन प्रश्न में तालिका अक्सर बदलती नहीं है। –
मुझे कल्पना है कि आवेदन में एक आम ऑपरेशन दिए गए ग्राहक के लेनदेन की एक सूची दिखाएगा। एससीडी 2 प्रत्येक बार जरूरी अतिरिक्त जुड़ाव करेगा - 'ग्राहकवर्ती देखें जहां ग्राहक =' जॉन डो 'ग्राहक शामिल हों हिस्ट्री जॉइन लेनदेन'। मेरा सुझाव है - यदि ऐतिहासिक डेटा अक्सर उपयोग नहीं किया जाता है, तो अलग ऑडिट तालिका के सेट में रखें; एससीडी 2 पर विचार करें यदि इतिहास-जागरूक घटक आवेदन का एक महत्वपूर्ण टुकड़ा बनाते हैं। एक बहुत ही रोचक सवाल के लिए +1! –