1

以前我認爲它很容易儲存的考試數據簡單的表是這樣的:最佳性能的數據庫設計存儲學生的考試結果

id 
subject_id 
student_id 
mark 
date 

但我注意到,這是很愚蠢的想法cuz它使得數據庫非常龐大 假設我們有5000名學生在校,每個學生每月有12個科目......這意味着我們的考試表每年將包含5000 * 12 * 10 = 600000行,如果我們決定從加入日期到當前日期知道學生的歷史 ..我認爲這是非常愚蠢的,我認爲還有最佳的解決方案,使另一種設計,以適應我的需求... 我需要以另一種更輕的方式存儲考試數據 感謝提前:)

+0

5000名學生將於12個考試每*月* ?? – Blorgbeard

+0

無論如何,你不會在這裏存儲任何重複的數據,這會佔用多少空間佔用。這裏沒有 – Blorgbeard

+1

5年來每年600k行仍然只有3M行左右,假設每個datarecord大約40個字節+一些索引,每個記錄大約有100個字節的存儲空間,這使得我們在5年的活動中總共需要300MB的數據存儲空間,這決不會被歸類爲「巨大」甚至「大」......基本設計是可以的,我'堅持下去。 – fvu

回答

1

這是另一種方式。

表學生商店名稱等

表主題具有主題名稱,如閱讀,寫作和算術,也許一個MinimumPassingMark。

表考試有ExamId,ExamDate和SubjectID。它也可能有PercentageOfOverallGrade

表StudentExam有StudentID,ExamId和標記。

科目和考試有一個一對多的關係(一個主體可以有很多考試,每次考試都有一個主題,學生和考試有一個多對多的關係。

所以,如果你想知道約翰尼能看,這是一樣簡單。

select case 
when sum(mark) * PercentageOfOverallGrade >= then 'pass' else 'no' end result 
from Student s join StudentExam se on s.StudentId = se.StudentId 
join Subject su on se.SubjectId = su.SubjectId 
where s.name = 'Johnny' 
and su.name = 'Reading'