2017-09-23 155 views
0

請考慮以下情況。哪一個更好?

table 1: assessment 

enter image description here

  • 這表明studentID A1001已經採取了assessment_ID:E1。
  • 它顯示studentID A1002已經考取了評估ID:E2。
  • 評估ID:E1有5個問題。
  • 評估ID:E2有9個問題。

我需要一張表來存儲學生的答案。以下哪一項是更好的方法? enter image description here

兩個表中有「REFERENCE_ID」充當引用assessment.id

選項A的外鍵:我需要插入的問題數(行)+其相應的答案。 選項B:我需要在表格中添加一個新列,每當學生對更多問題進行評估時。

假設評估ID:E3有14個問題,那麼我需要將row10〜row14列添加到表中。

我的想法 選項A:在這種情況下創建了許多記錄。選項A有14條記錄,而選項B只有2條記錄。

選項B:某些列被浪費,因爲並非所有評估都有9個問題。

在性能,執行速度和存儲空間方面哪一個更好?

謝謝。

+1

如果你的列名包含數字,你正在做一些非常錯誤的事情。選項B非常有效 –

+0

選項B根本不會擴展......每次接收新數據時,都會增加列。這在Excel中甚至不是一個好選擇。 –

+0

肯定選項A.你永遠不應該與你的價值水平。如果以後通過40個問題進行測試,該怎麼辦?與A一起去,不要忘記定義合適的索引,它會很好。 –

回答

1

簡短版本:選項A是更好的答案最多的時候。這裏有詳細的explanation的原因。

中等版本:選項A將佔用更多空間。執行速度將取決於您正在運行的查詢。

長版本:添加新評估不需要在選項A下進行任何代碼更改。您只需定義問題即可。 (我也可能會添加一個名爲「問題」的表,其中包含問題!)

美中不足:ONE問題會使選項A變得很痛苦,如果你想在列中顯示答案。因爲那樣你就必須擁有支持答案表的代碼。

分割鏡頭:「選擇一個數據表示,使程序變得簡單。」 (Elements of Programming Style,規則12)。因此,當您考慮如何設計數據庫時,請考慮您將如何使用它的方式,並選擇使您的代碼易於編寫的設計。

+0

謝謝!這對我來說非常有幫助。 – ethan17