यह एक पूरी तरह से अनुमानित प्रश्न है: मान लीजिए कि मेरे पास एक डेटाबेस है जहां मुझे किसी उपयोगकर्ता के लिए सदस्यता संग्रहित करने की आवश्यकता है, जो एक विशिष्ट समय (1 महीने, 3 महीने, 6 महीने, 1 वर्ष, आदि) के लिए टिक सकता है।किसी डेटाबेस में, क्या प्रारंभ समय समाप्ति तिथि, या प्रारंभ तिथि और समय की अवधि के रूप में समय अवधि को स्टोर करना बेहतर है?
बेहतर एक मेज Memberships
फ़ील्ड (प्रत्येक तिथि एक यूनिक्स टाइमस्टैम्प के रूप में जमा किया जा रहा है) करने के लिए है:
user_id INT
, start_date INT
, end_date INT
या के रूप में यह स्टोर करने के लिए:
user_id INT
, start_date INT
, length INT
किसी भी तरह से, आप सक्रिय सदस्यों वाले उपयोगकर्ताओं के लिए पूछ सकते हैं हिप (उदाहरण के लिए)। बाद की स्थिति के लिए, जब भी क्वेरी चलती है, अंकगणित को निष्पादित करने की आवश्यकता होती है, जबकि पूर्व स्थिति को केवल एक बार (सम्मिलन पर) की गणना की आवश्यकता होती है। इस दृष्टिकोण से, ऐसा लगता है कि पूर्व डिज़ाइन बेहतर है - लेकिन क्या इसमें कोई कमी है? क्या ऐसी कोई सामान्य समस्या है जिसे लंबाई को संग्रहित करके टाला जा सकता है, जिसे तारीख को संग्रहीत करके टाला जा सकता है?
इसके अलावा, यूनिक्स टाइमस्टैम्प समय/दिनांक डेटा संग्रहीत करते समय जाने के तरीके हैं, या DATETIME पसंद करते हैं? मैंने डेटाटाइप (अत्यधिक रूपांतरण) दोनों के साथ समस्याओं में भाग लिया है लेकिन आमतौर पर यूनिक्स टाइमस्टैम्प पर व्यवस्थित होता है। अगर DATETIME की तरह कुछ पसंद किया जाता है, तो यह मेरे पिछले डिज़ाइन प्रश्न का उत्तर कैसे बदलता है?
क्या इस प्रश्न का उत्तर सिस्टम पर निर्भर नहीं करेगा? दोनों समाधान मेरे लिए अच्छा लगते हैं, लेकिन यदि आपकी कोई भी क्वेरी अवधि की परवाह नहीं करती है, तो पहला मामला बेहतर है। अन्यथा यह दूसरा तरीका हो सकता है। इसके अलावा यदि आपके पास भारी प्रश्न हैं जो लंबाई का उपयोग करते हैं, और अंतिम तारीख का उपयोग करने वाले भारी प्रश्न, तो आप अपने डेटाबेस में दोनों मानों को स्टोर करना चाहेंगे। –