2012-03-12 84 views
0

我正在爲K-12學校工作,並且正在開發成績簿系統。我也使用的現有的成績簿系統是基於Excel和VBA開發的。對於我來說,每學期末合併400個Excel工作簿總是一場噩夢。在暑假期間,我打算將所有數據放在數據庫中以便於管理和管理。需要針對學校評分系統的數據庫設計建議

我的問題是這樣的:

對於這樣一個成績簿計算密集型應用,是很好的計算存儲在一個表中字段,或者是它更好地只存儲原始數據並執行計算僅在前端?

Excel的成績簿系統的工作原理是這樣的方式......

  • 教師檔案中得分/最高分的形式,每個分數爲每個學生的每一個評價。 (例如測驗1 = 5/10,家庭作業1 = 20/25等
  • 分數將按百分比計算並按每個組分進行彙總。 「組件」意味着測驗,家庭作業等。所以會有類似於「測驗平均= 90%,家庭作業平均= 80%等等
  • 不同的科目將有不同的最終成績明細,如「科學= 50%測驗+ 50%家庭作業,數學= 60%測驗+ 40%Homeworks「。
  • 然後,每個學生的總平均成績通過獲得所有科目的平均值來計算。

以上所有內容在電子表格中都很容易製作,但我不知道如何在數據庫中實現它。

由於瞬間,我想的東西就像所有的評估都記錄像這樣的表:

tbl_scores 
    id 
    student_id 
    term_id 
    subject_id 
    component_id 
    assessment_id 
    raw_score 
    highest_possible_score #not sure about this cause this can be implied from assessment_id 

難道是存儲計算有用(百分比每個分數項,組件平均,數據庫中的主題平均數,總體平均數等),並使用存儲過程和觸發器在新分數出現時更新它們?

或者,只是在前端存儲原始分數並計算所有內容才更好?這個選項比第一個更快,因爲知道這裏的SELECT查詢由於子查詢而真的會更復雜嗎?

順便說一句,我打算爲此使用PostgreSQL。

在此先感謝您的任何建議。

DashMug

+0

除了我的文章,我想到的其中一個想法是繼續使用Excel作爲數據庫的前端。 Excel每次都進行計算,並且(可能)將計算結果存儲回數據庫。 – dashmug 2012-03-12 16:22:42

回答

1

400名學生,即花生一個RDBMS,旨在處理記錄的百萬。你不用擔心表現。

我在你的描述中沒有看到PostgreSQL在簡單查詢中無法做到的事情。只存儲必要的信息並計算其餘部分。另外,如果不是,那麼將冗餘列highest_possible_score添加到您的表tbl_scores,如果該信息已在鏈接表assessment中。這會造成更多的傷害而不是好處。

如果(且僅當)您以後應該發現查詢速度太慢,則始終可以使用實例化視圖(將查詢輸出寫入表中,然後在更改基礎數據後重新計算該表)。

+0

實際上** 400個工作簿**而不是** 400個學生**。每個練習冊將包含1個學年的1個學科的1個學科的得分信息,其中約有40個學生。這將總計爲每個工作表大約48000個單獨的分數。但我明白你的觀點。謝謝。如果Excel可以做到這一點(雖然以一種古怪的方式),但RDBMS無法做到這一點。 – dashmug 2012-03-12 23:44:15

+0

@dashmug:如果遇到查詢問題,您可以隨時回到這裏。 :) – 2012-03-13 11:57:14

+0

謝謝。我可能會發布關於我所做的最終模式或有關查詢的問題的新問題。我會在這裏添加一個鏈接,以便人們可以看到延續。再次感謝! – dashmug 2012-03-13 13:18:53

0

反規範化取決於總記錄數。我認爲,對於學校來說,這樣做不會太大,更好的決定是將數據與查詢合併(是的,它會更復雜一些連接會出現,這是正常的)