2012-08-11 22 views
5

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

PERSON   ROOM  START_TIME  END_TIME 
Col. Mustard Library  08:00   10:00 
Prof. Plum  Library  10:00   12:00 
  1. क्या एक मौजूदा शेड्यूल में ओवरलैप, का कहना है कि अगर मिस स्कारलेट 11:00 से पुस्तकालय को आरक्षित करना चाहता है की तरह से नई प्रविष्टियां को रोकने का सबसे अच्छा तरीका है 11:30? एक इनलाइन बाधा काम नहीं करेगी और मुझे नहीं लगता कि यह आसानी से ट्रिगर में किया जा सकता है। ऐसी प्रक्रिया जो सभी प्रविष्टियों को संभालती है जो प्रारंभ में तालिका में मौजूदा संघर्ष की तलाश में हैं?

  2. दूसरा, समवर्ती मुद्दों को संभालने का सबसे अच्छा तरीका क्या है? कहें मिस स्कारलेट लाइब्रेरी को 13:00 से 15:00 तक चाहता है और श्रीमती व्हाइट इसे 14:00 से 16:00 तक चाहता है। (1) की प्रक्रिया को इन दोनों कार्यक्रमों को स्वीकार्य मिलेगा, लेकिन स्पष्ट रूप से एक साथ लिया जाएगा, वे नहीं हैं। एकमात्र चीज जिसे मैं सोच सकता हूं वह तालिका के मैन्युअल लॉकिंग या कुछ प्रकार के म्यूटेक्स है।

  3. उपरोक्त तालिका के लिए एक अच्छी प्राथमिक कुंजी क्या है, (कमरा, start_time)? मामलों में, जहाँ आप समय अवधियों के लिए तय कर दी है

+0

संभावित डुप्लिकेट [उपस्थिति डेटा कैप्चर करने के लिए स्कीमा को अनुकूलित करने का सबसे अच्छा तरीका क्या है] (http://stackoverflow.com/questions/3193227/what-is-the-best-way-to-optimize-chechema-for -कैप्चरिंग-उपस्थिति-डेटा) – APC

उत्तर

4

फास्ट काम कर रहे इस तरह, आप अलग तालिका में सभी श्रेणियों तो बस की दुकान "भंडार" तालिका से लिंक कर सकते हैं। यह निश्चित श्रेणियों के लिए चाल कर सकता है, उदाहरण के लिए आप केवल 30min अंतराल के साथ लाइब्रेरी पुनर्विक्रेता कर सकते हैं और कामकाजी घंटे 8am से 8pm तक की तरह है, केवल 24 रिकॉर्ड की आवश्यकता है।

--Person table--------------- 
ID PERSON   ROOM 
1 Col. Mustart Library 
2 Proof. Plum Library 

--Timeshift table------------ 
ID START_TIME END_TIME 
1 08:00  08:30 
2 08:30  09:00 
.... 
24 19:30  20:00 

--Occupy table---- 
DATE   TIMESHIFT PERSON 
TRUNC(SYSDATE) TS_ID  P_ID 
08/12/2012   4   1 
08/12/2012   5   1 
08/12/2012   9   2 
08/12/2012   10   2 

अब आप इसे पीके या यूके बनाते हैं और आपका डेटाबेस संचालित चेक तैयार है। यह थोड़ा डेटा ओवरहेड के साथ तेजी से होगा। हालांकि हर दूसरे के लिए एक ही दिनचर्या का उपयोग करना प्रभावी नहीं होगा।

अधिक सार्वभौमिक और जटिल तरीका कुछ प्रक्रिया (या ट्रिगर) जांच करने देना है, क्या आपकी सीमा पर कब्जा है या नहीं और आपको सभी मौजूदा रिकॉर्ड देखना होगा।

+0

+1, छोटे अलग समय अंतराल की एक तालिका बनाएं और लोगों को कई बुक करने दें। – Ben