मैं शायद daterange के लिए जाना चाहूंगा। कॉलम।
यह आपको अलग-अलग आकार के टुकड़े रखने की सुविधा देता है और आपको बहिष्करण प्रतिबंध ओवरलैपिंग रेंज को रोकने के लिए।
किसी दिए गए सप्ताह के लिए पंक्ति ढूँढना अभी भी "contains" ऑपरेटर @>
का उपयोग करके काफी सरल है। , जैसे where the_column @> to_date('2019-24', 'iyyy-iw')
2019 में सप्ताह संख्या 24 वाली पंक्तियों को ढूंढता है।
व्यंजक to_date('2019-24', 'iyyy-iw')
निर्दिष्ट सप्ताह का पहला दिन (सोमवार) लौटाता है।
दो सप्ताह के बीच की सभी पंक्तियों को ढूँढना भी किया जा सकता है, हालाँकि संबंधित तिथि सीमा का निर्माण थोड़ा बदसूरत लगता है। आप या तो पहले और आखिरी दिन के साथ एक समावेशी श्रेणी का निर्माण कर सकते हैं:daterange(to_date('2019-24', 'iyyy-iw'), to_date('2019-24', 'iyyy-iw') + 6, '[]')
या आप अगले सप्ताह के पहले दिन के साथ एक विशेष ऊपरी सीमा के साथ एक श्रेणी बना सकते हैं:daterange(to_date('2019-24', 'iyyy-iw'), to_date('2019-25', 'iyyy-iw'), '[)')
जबकि श्रेणियों को काफी कुशलता से अनुक्रमित किया जा सकता है और दो पूर्णांक स्तंभों पर बी-ट्री इंडेक्स की तुलना में आवश्यक जीआईएसटी इंडेक्स बनाए रखने के लिए थोड़ा अधिक महंगा है।
श्रेणियों का उपयोग करने का एक और पहलू (यदि आपको वास्तव में लचीलेपन की आवश्यकता नहीं है) यह है कि वे दो पूर्णांक स्तंभों (8 के बजाय 14 बाइट, या यहां तक कि दो छोटे के साथ 4) की तुलना में अधिक स्थान लेते हैं। तो यदि तालिका का आकार किसी चिंता का विषय है, तो वर्ष/सप्ताह कॉलम के साथ आपका वर्तमान समाधान अधिक कुशल है।
यदि आपका इनपुट प्रारंभ और समाप्ति तिथि है ("सप्ताह संख्या" के बजाय), तो मैं निश्चित रूप से daterange
के लिए जाऊंगा कॉलम। यदि वह प्रारंभ और समाप्ति तिथि एक सप्ताह से अधिक की होती है, तो आप एकाधिक पंक्तियों के बजाय केवल एक पंक्ति संग्रहीत करते हैं।