2009-06-19 16 views
6

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

संपादित करें: यह होमवर्क नहीं है; मैं अपने स्वयं के संपादन के लिए किसी मित्र के साथ कुछ बना रहा हूं और हम इसे 3 एनएफ में चाहते हैं।

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

मुझे लगता है कि सख्ती से 3 एनएफ की आवश्यकता नहीं है, लेकिन यह हमारे लिए आसान होगा अगर यह था और बाद में हमारी स्कीमा को बदलने के बजाय बल्ले से इसे सही करना बेहतर होगा।

+0

यह वास्तव में फ़ोरम पर आपके होमवर्क असाइनमेंट पोस्ट करने के लिए लंबे समय तक आपको बहुत अच्छा नहीं करेगा। क्या आपने इसे बिल्कुल सोचा है? आप कितने दूर गए हैं? –

+1

हालांकि यह _could_ होमवर्क हो, यह निश्चित रूप से होमवर्क भी नहीं हो सकता है। मुझे नहीं लगता कि यह एक प्रश्न देने के लिए विशेष रूप से उचित है जब तक कि यह स्पष्ट रूप से होमवर्क का टैग न हो, साथ ही यह * दिलचस्प समाधानों के साथ एक समस्या है। –

+0

... कहा जा रहा है, यह निश्चित रूप से एक डुप्लिकेट है, मैं बस अन्य लोगों को नहीं ढूंढ सकता .... –

उत्तर

2

हाँ मैं निम्नलिखित तरीके से मेरी सहकर्मी के साथ इस समस्या का समाधान कर दिया है:

CREATE TABLE [dbo].[Schedule](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [StartDate] [datetime] NOT NULL, 
    [EndDate] [datetime] NULL 
) 

CREATE TABLE [dbo].[ScheduleInterval](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [ScheduleID] [int] NOT NULL, 
    [ScheduleIntervalUnitID] [int] NOT NULL, 
    [Interval] [smallint] NOT NULL 
) 

CREATE TABLE [dbo].[ScheduleIntervalUnit](
    [ID] [int] NOT NULL, 
    [Name] [varchar](50) NULL 
) 

INSERT INTO ScheduleIntervalUnit (ID, Name) 
SELECT '1' AS [ID], 'Day' AS [Name] UNION ALL 
SELECT '2' AS [ID], 'Week' AS [Name] UNION ALL 
SELECT '3' AS [ID], 'Month' AS [Name] 

एक अनुसूची समय की लंबाई तक फैला और अंतराल समय की है कि लंबाई के भीतर हो। अनुसूची अंतराल इकाई अंतराल की लंबाई निर्धारित करती है (दिन "हर दूसरे" (2) या "हर तीसरे" (3) आदि के रूप में), सप्ताह (सप्ताह का दिन, जैसे सोमवार, मंगलवार, आदि), और महीने (कैलेंडर वर्ष का)। इसका उपयोग करके आप शेड्यूल पुनर्प्राप्त करने के लिए अपने डेटाबेस के विरुद्ध प्रश्न और तर्क कर सकते हैं।

यदि आपके शेड्यूल को बेहतर रिज़ॉल्यूशन की आवश्यकता है - घंटे, मिनट, सेकंड तक - cron के यूनिक्स कार्यान्वयन को देखें। मैंने मूल रूप से उस मार्ग को शुरू कर दिया, लेकिन ऊपर पाया गया कि यह एक और अधिक सरल और रखरखाव योग्य दृष्टिकोण है।

एक दिनांक/समय अवधि - जैसे कि 9 सितंबर से शुरू होने वाले परिभाषित स्कूल सेमेस्टर और 4 नवंबर को समाप्त होने पर - कई कार्यक्रम (इसलिए कला कक्षा के लिए हर सोमवार, और भौतिक एड के लिए "हर दूसरे दिन" - लेकिन आप ' छुट्टियों और सप्ताहांत पर विचार करने के लिए और अधिक काम करने की आवश्यकता होगी!)।

+0

अपवाद और सप्ताह/महीने के प्रकार सूचीबद्ध हैं? –

2

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

संभवतः प्रत्येक निर्धारित कार्यक्रम में अवधि, एक श्रेणी, शायद एक स्थान, एक नाम या वर्णन विवरण होगा।

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

+0

धन्यवाद। मैंने पहले ही इस तरह के समाधान के बारे में सोचा है, हालांकि मैं शायद सप्ताह के एक टेबल की तुलना में एक enum (मैं पोस्टग्रेस पर हूं) का उपयोग करता हूं। जैसा कि मैंने ऊपर उल्लेख किया है, घटनाओं में निश्चित रूप से एक ही अवधि नहीं होगी। संभवतः, उन्हें मनमाने ढंग से अवधि भी होनी चाहिए। – astine

+0

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