最近,小菜遇到了數據庫設計上的一個問題,希望各位大俠再次,直抒己見,幫忙分析一下。也可有更好的設計,請直接提出來。
要求:數據庫(SQL Server 2005)存儲每個學生,單個客觀題答案、分數,主觀題單個分數。
問題:設計網上閱卷數據庫,其中數據庫掃描數據存儲設計,遇到問題。問題難點在於數據量龐大,中型聯考,預計考試人數10萬人左右,每人預計考試9科目(未分文理之前),粗略估計每科考試主觀與客觀總共100道題左右,10*9*100估計源數據在5000萬~9000萬左右,如多次考試的話,數據量將會翻倍增長,如何在數據庫中存儲這龐大的數據,給我帶來的非常頭問題的問題。
我的思路:
1. 每次考試每次科目學生作答內容存儲為單個表,每個小題為此表的一列,這樣一張表的行數為10萬(以10萬人聯考做參考),但是動態創建的列數為120+列(以每科120個題做參考),則每次考試要創建9張此類。
優點:每次考試不必過多創建表(9張/次),且單表數據少(10萬級左右)
缺點:單表列數不固定,且單表列數120列左右(沒用過這么多列不知道,性能如何),列數太多且不易統計。
2. 每次考試各個科目各個小題存儲為單個表,即要創建9(以9科目作參考)*100(單科100題做參考)=900張/每次,里面存儲此科目此小題下所有參加考試人員的答題記錄,10萬/張表。
優點:每次考試單表結構簡單,單表數據少(10萬級左右),列數固定且列數簡單
缺點:每次考試新建900(以9科目900小題做參考)表,數據庫壓力大。
3. 按照平常小數據量存儲模式,各科各個小題各人員,存儲一張表,單表數據量(100*9*10萬)9000萬左右。
優點:結構簡單,數據合理,方便統計。
缺點:數據量龐大,查詢速度慢。
以上,是我的三個既定思路,不知道哪個更好一些,希望大家幫忙分析一下,更希望有大數據量數據庫設計的大俠指點一下。歡迎拍磚,但請提出您的理由或者是更好的設計思路!
