2010-06-13 13 views
10

मुझे डेटाबेस में जटिल अनुसूची डेटा का प्रतिनिधित्व करने की कोशिश करने में एक दिलचस्प समस्या है। दिशानिर्देश के रूप में, मुझे iCalendar - ics की संपूर्णता का प्रतिनिधित्व करने में सक्षम होना चाहिए - प्रारूप प्रतिनिधित्व कर सकता है, लेकिन डेटाबेस में। मैं वास्तव में ics से संबंधित कुछ भी लागू नहीं कर रहा हूं, लेकिन यह मेरे विशेष प्रोजेक्ट के लिए मॉडल बनाने में सक्षम होने के नियमों के प्रकार का एक अच्छा दायरा देता है।डेटाबेस में जटिल अनुसूचित पुनरावृत्ति का प्रतिनिधित्व

मुझे एक एकल घटना या प्रति दिन कई बार, सप्ताह के दिनों, महीने के सप्ताह, महीने, वर्ष या उनमें से कुछ संयोजन के आधार पर आवर्ती घटना की अनुमति देने की अनुमति देने की आवश्यकता है। उदाहरण के लिए, नवंबर में तीसरा गुरुवार, या 25 दिसंबर, या हर दो सप्ताह 2 नवंबर से शुरू होता है और अगले वर्ष 8 सितंबर तक जारी रहता है।

मुझे सम्मिलन दक्षता की परवाह नहीं है लेकिन क्वेरी दक्षता महत्वपूर्ण है। ऑपरेशन जो मैं अक्सर कर रहा हूं वह या तो एक तिथि/समय या दिनांक/समय सीमा प्रदान कर रहा है, और यह निर्धारित करने की कोशिश कर रहा है कि परिभाषित अनुसूची दिनांक/समय सीमा के किसी भी हिस्से से मेल खाती है या नहीं। अन्य परिचालन धीमे हो सकते हैं। उदाहरण के लिए, 15 जनवरी, 2010 को सुबह 10:00 बजे 15 जनवरी, 2010 को 11:00 बजे के माध्यम से, उस समय के कम से कम हिस्से से मेल खाने वाले सभी शेड्यूल ढूंढें। (यानी एक शेड्यूल जो 10:30 - 11:00 को अभी भी मेल करता है।)

कोई सुझाव? मैंने How would one represent scheduled events in an RDBMS? पर देखा लेकिन इसमें पुनरावृत्ति नियमों के प्रकार के दायरे को शामिल नहीं किया गया है जिन्हें मैं मॉडल करना चाहता हूं।

उत्तर

4

अंत में, इस पोस्ट सबसे उपयोगी था:

iCal "Field" list (for database schema based on iCal standard)

हम बहुत वास्तव में लोग हैं, जो लिखा है कि मानक समस्या डोमेन के लिए एक महान लग रहा था के बाद से iCal मॉडल का अनुसरण करने का निर्णय लिया।

1

जिस तरह से मैंने ऐसा कुछ किया था, वह दो टेबल था। अगर किसी ईवेंट में आवर्ती पैटर्न नहीं होता है, तो बस तिथि, प्रारंभ समय और समाप्ति समय संग्रहित करें। आपकी क्वेरी जांचती है कि क्या आपकी खोज का समय किसी प्रविष्टि के प्रारंभ समय से अधिक है और उसी घटना के अंतिम समय से कम या उसके बराबर है।

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

मुझे उम्मीद है कि इससे मदद मिलती है। मेरे पास अभी बहुत समय नहीं है। यदि आप इस पर चर्चा करना चाहते हैं तो आप बाद में मुझसे संपर्क कर सकते हैं। मैं वर्तमान में मिसौरी में हूं इसलिए अगले सप्ताह के लिए मेरी उपलब्धता अनियमित होने जा रही है।

-1

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

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