2009-08-20 9 views
8

हम अपने खेल केंद्र सदस्यता का प्रबंधन करने के लिए एक तृतीय पक्ष उत्पाद का उपयोग करते हैं। हमारे पास कई सदस्यता प्रकार हैं (उदाहरण के लिए जूनियर, छात्र, कर्मचारी, समुदाय) और कई सदस्यता स्थितियां (उदाहरण के लिए वार्षिक, सक्रिय, निष्क्रिय, निलंबित)। दुर्भाग्यवश उत्पाद केवल सदस्य के वर्तमान सदस्यता प्रकार और स्थिति को रिकॉर्ड करता है। मैं समय के साथ हमारे सदस्यों के प्रकार और स्थिति बदल गया है जिस तरह से ट्रैक करने में सक्षम होना चाहते हैं।डाटाबेस डिज़ाइन किसी व्यक्ति की जानकारी को पकड़ने के लिए जो समय के साथ बदलता है?

वर्तमान में, हमारे पास उत्पाद के डेटाबेस डिज़ाइन तक पहुंच है। यह SQL सर्वर पर चलता है और हम नियमित रूप से अपने स्वयं के टेबल बनाने के लिए उत्पाद की तालिकाओं के खिलाफ अपने स्वयं के SQL क्वेरी चलाते हैं। फिर हम एक्सेल में चार्ट बनाने के लिए हमारी टेबल को पिवट-टेबल से लिंक करते हैं। तो हम डेटाबेस डिजाइन और एसक्यूएल से परिचित हैं। हालांकि हम इस समस्या से सबसे अच्छी तरह से संपर्क करने के तरीके के रूप में अटक गए हैं।

उत्पाद सदस्य की सदस्यता खरीद और उनकी शुरुआत और समाप्ति तिथियां रिकॉर्ड करता है। इसलिए हम किसी भी समय किसी सदस्य के प्रकार और स्थिति को निर्धारित करने के लिए उस डेटा के माध्यम से वापस काम कर सकते हैं। उदाहरण के लिए, यदि उन्होंने 1 जनवरी, 2007 को जूनियर सदस्यता खरीदी और यह 31 दिसंबर, 2007 को समाप्त हो गया और फिर उन्होंने 1 जून, 2008 को छात्र सदस्यता खरीदी, तो हम देख सकते हैं कि उनकी स्थिति सक्रिय से निष्क्रिय तक सक्रिय है (जनवरी को 1, 2008 और जून 1, 2008 क्रमशः) और उनका प्रकार जूनियर से छात्र (1 जून, 2008 को) चला गया।

अनिवार्य रूप से हम सदस्य के प्रकार और स्थिति गुणों को temporal properties या effectivities ए-ला फाउलर (या कुछ अन्य चीज़ जो समय के साथ बदलती हैं) में बदलना चाहते हैं।

हमारा प्रश्न (आखिरकार :) - उपरोक्त दिया गया: आप किस सदस्य तालिका डिज़ाइन की सिफारिश करेंगे, हम इस सदस्य की जानकारी को रखने के लिए उपयोग करेंगे। मुझे लगता है कि इसमें सदस्य आईडी के लिए एक कॉलम होगा ताकि हम मौजूदा सदस्य तालिका में जा सकें। इसे किसी सदस्य की स्थिति और प्रकार और दिनांक सीमा के लिए आयोजित करने की भी आवश्यकता होगी। हम इस तालिका के खिलाफ आसानी से प्रश्न लिखने में सक्षम होना चाहते हैं कि यह निर्धारित करने के लिए कि प्रत्येक समय और स्थिति के कितने सदस्य हमारे पास किसी दिए गए बिंदु पर थे।

अद्यतन 200 9 -25-25: साइड-ट्रैक किया गया है और अभी तक प्रस्तावित समाधानों को आजमाने का मौका नहीं मिला है। जल्द ही ऐसा करने की उम्मीद है और परिणामों के आधार पर एक उत्तर का चयन करेंगे।

+0

टाइम सीरीज डेटा मॉडल पर संबंधित प्रश्न: http://stackoverflow.com/questions/4083464/design-database-relating-to-time-attribute/ – Vadzim

उत्तर

7

यह देखते हुए कि आपकी प्रणाली पहले से ही लिखी गई है और इस समस्या के लिए सबसे सरल दृष्टिकोण (और जो मौजूदा डेटाबेस/कोड को कम से कम प्रभावित करता है), सदस्यता इतिहास तालिका जोड़ना है जिसमें सदस्य आईडी, स्थिति, प्रकार और तारीख कॉलम। फिर मुख्य सदस्य तालिका में एक अद्यतन और एक INSERT ट्रिगर जोड़ें। जब ये आग लगती हैं, तो आप सदस्य इतिहास तालिका में सदस्य (स्थिति परिवर्तन की तिथि के साथ) के लिए नए मान लिखते हैं। आप प्रत्येक सदस्य के लिए इतिहास प्राप्त करने के लिए बस इस तालिका से पूछ सकते हैं।

यह लागू करने के लिए काफी सरल है, और मौजूदा सिस्टम को बिल्कुल प्रभावित नहीं करेगा।

मैं इसे मुफ्त सदस्यता के लिए आपके लिए लिखूंगा। :)

+0

ग्रिन। जवाब के लिए धन्यवाद। मुझे मुफ्त सदस्यता देने में खुशी होगी, लेकिन ऐसा लगता है कि आप संयुक्त राज्य अमेरिका में हैं और हम ऑस्ट्रेलिया में हैं, इसलिए यह आपके लिए बहुत अधिक मूल्यवान नहीं हो सकता है। – dave

+1

इस उत्तर का मेरा एकमात्र जोड़ा इतिहास तालिका में सदस्यता तालिका में सभी फ़ील्ड शामिल करना होगा - साथ ही परिवर्तन की तिथि/समय के लिए एक टाइमस्टैम्प फ़ील्ड और संभवतः "उपयोगकर्ता" फ़ील्ड को रिकॉर्ड करने के लिए यह रिकॉर्ड करना होगा। इस तरह आप सभी परिवर्तन रिकॉर्ड करते हैं। –

+0

मैं तैराकी लेने के बारे में सोच रहा हूं, इसलिए आप मुझे जितनी जल्दी सोच सकते हैं उससे मुझे देख सकते हैं। – MusiGenesis

0

मैं सदस्यता की जानकारी प्रारंभ और समाप्ति तिथियों के साथ अपनी तालिका में रखूंगा। ग्राहक को अलग टेबल में रखते हुए। यह एक दर्द है यदि आपको हर समय "वर्तमान" सदस्यता जानकारी की आवश्यकता होती है लेकिन प्रश्न या ट्रिगर्स के माध्यम से या तो इसके आसपास जाने के कई तरीके हैं।

1

मैं एक रिपोर्टिंग डेटाबेस तैयार करता हूं जो स्टार स्कीमा में आयोजित किया गया था। सदस्यता आयाम अस्थायी रूप से व्यवस्थित किया जाएगा, ताकि समय के अलग-अलग बिंदुओं पर एक ही सदस्य के लिए अलग-अलग पंक्तियां होंगी। इस तरह तथ्य तालिका में विभिन्न पंक्तियां इतिहास में विभिन्न बिंदुओं से संबंधित हो सकती हैं।

फिर मैं मुख्य डेटाबेस से एक सप्ताह में, रिपोर्टिंग डेटाबेस को समय-समय पर अद्यतन करने के लिए अद्यतन प्रक्रियाएं तैयार करूंगा। यह वह जगह है जहां मुख्य काम आएगा।

फिर, मैं रिपोर्टिंग डेटाबेस से रिपोर्ट चलाऊंगा। स्टार स्कीमा को एक ही चीज एक पिवोट टेबल करने के लिए करना बहुत आसान है। यदि आवश्यक हो, तो मुझे रिपोर्टिंग डेटाबेस के सामने बैठने के लिए किसी प्रकार का ओलाप टूल मिल जाएगा।

यह बहुत काम है, लेकिन यह समय के साथ भुगतान करेगा।

2

मैं जो सेल्को के "स्मार्टज़ के लिए एसक्यूएल - उन्नत एसक्यूएल प्रोग्रामिंग" पढ़ने के लिए पर्याप्त अनुशंसा नहीं कर सकता। उनके पास अस्थायी डेटाबेस डिज़ाइन पर एक संपूर्ण अध्याय है और कैसे (प्रभावशाली और प्रभावी ढंग से) टेम्पोरल प्रोजेक्शन, चयन और टेम्पोरल क्वेरी में शामिल हों। और मैं इस पद में उनके अध्याय में जो कुछ कहता हूं उसे समझाने का प्रयास करने के लिए भी न्याय नहीं करता।

+0

बस अपनी प्रोफ़ाइल पढ़ें और ध्यान दें कि आप सिडनी में भी दोस्त हैं :) –

+0

मैं सिडनी में हूं। मैं आपके द्वारा सुझाए गए संदर्भ को आज़माकर ट्रैक करूँगा। एक बार जब मैं एशेज खत्म हो जाता हूं। – dave

+0

उत्तरी सिडनी में बुकवेयर देखें - कंप्यूटर किताबों को समर्पित। सेल्को किसी भी डेटाबेस/एसक्यूएल - कार्यान्वयन अज्ञेयवादी में संदर्भ है। मैंने कभी भी एक किताब में सबसे अच्छा निवेश किया है। –

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