2011-04-26 16 views
5

आप किसकी सिफारिश करते हैं और क्यों?प्रत्येक फ़ील्ड बनाम इतिहास दिनांक फ़ील्ड का संस्करण?

मेरे पास कुछ तालिकाओं हैं, जब मैं डेटा में परिवर्तन करता हूं ... इसे एक प्रभावी तिथि के साथ एक इतिहास तालिका (लेखा परीक्षा) में जाना चाहिए।

अन्य समाधान डेटा में परिवर्तन करते समय एक नई पंक्ति डालने के लिए प्रत्येक फ़ील्ड को संस्करणित कर रहा है?

चालान जानकारी के लिए सबसे अच्छी विधि कौन सा है? आइटम का नाम और मूल्य हमेशा बदलता है

उत्तर

4

ये slowly changing dimensions, type 2 और type 4 उचित रूप से हैं।

दोनों विधियां मान्य हैं और आपकी मॉडल और क्वेरी आवश्यकताओं के आधार पर आपकी आवश्यकताओं के लिए अधिक उपयुक्त हो सकती हैं।

असल में, type 2 (संस्करण) अधिक उपयुक्त है जब आपको ऐतिहासिक मानों को अक्सर पूछताछ की आवश्यकता होती है, जबकि type 4 (इतिहास तालिका) अधिक उपयुक्त होती है जब आप वर्तमान मूल्य की अधिक पूछताछ कर रहे हैं और अधिक प्रश्न हैं (मेरे मतलब का विकास करने के लिए और अधिक प्रश्न) सबसे हाल के मूल्य के खिलाफ।

+0

मेरे पास पिछले ऑर्डर प्रदर्शित करने के लिए ऑर्डर_इटम्स है .. कौन सा बेहतर है? आइटम नाम और मूल्य का मूल्य हमेशा बदल जाता है। – user622378

+0

@user: आमतौर पर (आमतौर पर) एक इतिहास तालिका बेहतर होती है, क्योंकि आपको वर्तमान मूल्य की आवश्यकता होती है और आप इसके खिलाफ अधिक प्रश्न पूछते हैं। इस तरह, आपको 'isActive' या प्रत्येक क्वेरी के लिए एक समान फ़ील्ड पर एक फ़िल्टर जोड़ने की आवश्यकता नहीं होगी। – Quassnoi

+0

इतिहास तालिका में DATE के बजाय, मैंने संस्करण फ़ील्ड जोड़ा। तालिकाओं का उदाहरण: item.version, item_history.version और order_table तालिका में संस्करण संख्या होगी। तो मुझे तिथि खोज पर रिले करने के बजाय 100% सटीक जानकारी मिल जाएगी। – user622378

2

एक प्रणाली जिसका हम उपयोग करते हैं और खुश हैं:
प्रत्येक तालिका जिसके लिए इतिहास की आवश्यकता होती है, हम एक समान तालिका बनाते हैं और अंत में एक टाइमस्टैम्प फ़ील्ड जोड़ते हैं, जो पीके का हिस्सा बन जाता है।
मूल मेज पर प्रत्येक अद्यतन, हम एक ही शर्तों के साथ इतिहास तालिका में दर्ज करें:

update table x WHERE somthing something 

insert into table x_history 
select * from x WHERE something something 

कि आपके डेटा को साफ रखता है और अपने टेबल स्लिम।

+0

इस समाधान के साथ सटीकता के साथ कोई समस्या नहीं है? उदाहरण के लिए .. इतिहास तालिका (पुराना डेटा) से चालान डेटा दिखा रहा है .. मुझे आशा है कि यह सही मूल्य दिखाएगा – user622378

+0

कोई समस्या क्यों होनी चाहिए? आप वर्जनिंग का उपयोग कर सकते हैं, लेकिन इसमें अधिक तर्क/कोड शामिल है जो मुझे आवश्यक नहीं है –

0

मेरी व्यक्तिगत वरीयता आपके आवेदन में Observer Pattern उपयोगकर्ता को और एक अलग इतिहास तालिका लागू करने के लिए होगी। इसका अर्थ यह है कि जब आप इसकी आवश्यकता होती है तो आप इतिहास तालिका से डेटा खींच सकते हैं और आप मुख्य तालिका से पूछताछ की गति से समझौता नहीं करते हैं।

संबंधित मुद्दे