2010-01-02 69 views
2

我正在創建一個應用程序,爲學生的學業生涯表現生成統計信息。爲了達到這個目標,我需要存儲學生獲得的每一個成績。我該如何優化這個數據庫設計?

但我不知道如何最佳地存儲這些信息。這是一個初步設計,但不知道它在實踐中會如何運作。 database design

所以每個學生在完整的16年教育後,將有288個等級數據,每年18個。除此之外,還有他們的個人信息,其中包含他們的姓名,出生日期等。

那麼,我怎樣才能最佳地保存這些數據呢?

回答

11

您的設計太具體。每次評分方案改變或添加新課程時,您都需要更改模式!

取而代之,您可以使用Course,GradeSubGrade表進行抽象設計。課程將具有名稱,而成績和SubGrades將具有類型。這會給你很大的靈活性。

1

不是每個課程都有獨立的表格,只需要一張表格,所有課程的課程編號和學生編號都是主鍵。

1

我要做的第一件事是反規範化它,取大約10個表格,並用1個表格和主題列替換它們。查詢和擴展將成爲一場噩夢。

2

這將是太難添加另一個級別或當前設計的另一場

其實,這將是更好的有4個表,「學生」,「等級」,「課程」 &「筆記」 。

  • 學生表保存所有的學生 需要的信息,

  • 每個學生在給定時刻屬於某個
    「等級」

  • 每個等級包含若干
    給定時間
  • 每門課程有0+筆記(例如:
    閱讀,聽英語,...)
1

這聽起來像你想要做的是什麼報告,也被稱爲Online Analytical Processing (OLAP)。報告查詢往往會觸及大量數據,使得它們的可視化與標準數據庫完全不同。數據趨於大規模非標準化。這使得保持交易數據與報告數據分離的重要性。如果您嘗試報告用於讓教師輸入成績的相同數據,學生將查看一小部分成績等,則數據庫操作將因爲對OLAP或OLTP設計不理想而拖延。

執行此操作的標準方法是使用一個數據庫存儲非規範化數據,該數據庫將用於您的網站/事務性系統。然後,您使用其中一個OLAP工具構建數據倉庫,並以某個固定間隔(如每天一次)使用ETL進程將新的事務數據加載到報告數據庫中。

...

現在,這一切都是假設,這是一個fiarly大的項目,你有你的手顯著的時間,你想獲得真正深入到數據倉庫的概念,如星型模式和類似。

+0

只是回頭看過去的帖子,我想我應該讓你知道我繼續做下去。在研究和實施OLAP系統方面有驚人的幾個月,學習過的負載。該項目得到了幾乎滿分,並且在當地一所學校得到了積極使用。感謝您的回答! – tom 2012-03-02 01:11:32