2012-04-25 48 views
0

我的問題涉及到爲數據的年度變化開發一個數據庫。這個數據庫主要用於大學的課程管理系統,所以我將在這種情況下使用一個簡單的例子。數據庫設計諮詢 - 年度數據

本例中存在兩張表 - CareerField和Course。這些表格可以定義爲多對多 - 職業領域可能有許多課程,一門課程可能屬於許多職業領域(想想像任何學位課程一樣的基礎課程)。

說在2012年有一個職業領域稱爲木工與一個名爲基本木工加工課程。 2013年,職業領域被稱爲木工和設計,並具有基礎木工課程。

職業領域並非新事物 - 只是重新命名,但我必須保留所有2012年(所有歷年)的歷史數據因此,我不能簡單地將Carpentry記錄重命名爲木工和設計。

本質上,我必須根據所有上一年的課程數據創建一個新的一年,然後如果課程被刪除,職業領域改名等,新的一年會發生變化。前端界面將有一個選項來創建一個新年 - 從現有數據中複製2013年的所有表格數據(使用選定的前一年選擇傳輸數據)。有可能增加新的領域,這些領域將不會涉及前幾年。

做這樣的事情的最佳做法是什麼?我使用了更高版本的ERP軟件(例如Datatel),每年都會放一張新表。這似乎是多餘的,也是一種不好的做法,但是再一次,我只開發了不到兩年的數據庫。

我在尋求如何處理這種情況的建議。在設計時,真正的解決方案將包含大約16個表格,因此每個年度表格將在上面的示例中重複。

感謝您的意見。

回答

0

我會使用你提到的當年的表格,並且在存儲歷史信息的結構(不同名稱)中使用相同的表格。 年份結束時,您將當年的信息轉移到歷史表格中。 如果您需要將某些字段添加到現有表格中,則必須將這些更改應用於(歷史和當前年份表格) 歷史表格應該是隻讀的,您的應用程序將訪問「當前年份」用於讀取/寫入/更新的表格以及用於提取報告的歷史記錄。

0

無需每年都進行存檔,您想要的是將每個術語的數據與正確的課程相關聯的列。您首先需要一個表格來描述數據的有效日期。

所以,如果你知道這將永遠是每年,而且從來不學期,創建一個名爲AcademicYear的表,其中包含一個AcademicYearID,它可能是實際的PK年份(如果你可能會將事件分解成小於等於一個自動增量並將其稱爲AcademicPeriod而不是年)以及StartDate(必需和使用日期數據類型)和EndDate(不是必需的,但仍是日期數據類型)。現在將academicYearID添加到您希望能夠按年份拆分的每個父表中。因此,您的CareerField將添加AcademicYearID,並且您的課程僅在您希望能夠按學年進行查詢而無需通過CareerField表時添加。

現在爲了讓生活更輕鬆,創建一個計劃在第一個日期運行的工作,您希望新年數據可用於將所有現有查找數據(課程,職業場所)複製到新學年,然後您可以擁有運行的腳本會刪除不再想要使用的內容或添加新內容。如果你現在在設計階段編寫這個過程,那麼每年填充數據的過程都會很簡單,而且你不會因爲恐嚇而做這件事,因爲突然間你不能安排課程。

你aceademic期間應該有一個觸發器,它可以確保不需要填充當一個新的記錄被添加爲新的記錄或一天以前它取決於對的開始日期的日期結束日期你的商業規則。或者您可以在數據輸入時填寫所需的結束日期並填寫,這取決於數據輸入時是否知道該日期。

最後,您可能希望創建視圖以僅顯示currenlty活動內容。這些視圖將被用來代替除報告之外的所有基表。

+0

謝謝你的非常詳細的答案。這就是我將要做的。我很感激。 – dekron 2012-04-25 21:02:10