2016-03-03 64 views
0

我剛剛開始在MySQL中建模我的數據庫。數據庫正常化sten百分比t分數

所以我有一個表命名爲 「規範」 有以下的列:

ID(INT) - 主鍵
fk_category_id(INT)---從anothe表
raw_score_min外鍵(INT) ---需要範圍
raw_score_max(最大值)---下界得分上界需要的範圍
斯登(INT)---標準十(值1-10)分數言論
百分(INT)---百分比備註(值1-100)
t-score(int)---另一種說法有怪異的相關
fk_classification_id ---從另一個表

外鍵現在,不是在這個數據庫中的每一行都會使用斯登,百分位和T值。

將會有大多數情況下,只有三個將被使用。 但是,有些特殊情況下,將使用三個中的兩個(即sten和百分位數)

所以如果行堆積起來,表中將會有很多浪費列的值爲sten,percentil和t - 分數

有什麼辦法可以避免使用規範化造成的浪費?謝謝!


UPDATE:
我忘了告訴大家,作爲系統的推移,可能會有額外的類型爲「標準」(斯登,T值,百分位),如CSQ或其他標準。按照上面的表格,這可能意味着每次有新的「標準」類型時,我應該添加一個新列。

回答

0

您可以創建一個新表格,例如stats,其中將包含標準的10個百分點和t分數值的那些記錄。

CREATE TABLE stats 
(
    id int,   -- same id as used in the norms table 
    sten int, 
    percentile int, 
    t-score int 
); 

注意的是,這裏的增益發生,因爲你不會被分配任何數據庫存儲到沒有任何統計數據的記錄。將此與原始問題中的非規範化方法進​​行對比,您可能會在該問題中存儲該記錄的零值。

更新:

如果你真的需要添加統計/列,那麼我希望它是用兩種我的方法或你的原始的方法麻煩。通過標準化數據庫,您仍然可以獲得潛在收益。

但是,也許新的統計數據可以在飛行中計算出來,而不是保存到數據庫中。這將避免不得不添加新列的問題。

+0

你好!感謝您的快速回復。順便說一下,我有問題的更新,請參閱上文。你還會建議相同的答案嗎? –

+0

謝謝!接受這個答案,因爲我遵循這個建議,這是總的意義,並已跟進回答 –

0

要回答你的問題,是的,你可以避免這一點。例如,你可以做一個單獨的表norm_stennorm_percentilenorm_tscore參照norm."id"

但是,您應該仔細檢查這是否不會過分複雜化您的應用程序邏輯。由於整數字段僅使用4個字節,因此除非擁有數百萬和數百萬條記錄,否則通常只會遇到表空間問題。

+0

嗨Bjoern!感謝您的快速回復。你也對上面的Tim有類似的答案,所以這意味着這可能是一個有效的答案。順便說一下,我有問題的更新,請參閱上文。你還會建議相同的答案嗎? –

+0

是的,它仍然有效。根據您的應用程序和數據庫服務器的需求,這可能是矯枉過正或必要的,因此只能給出一般性答覆。 – Bjoern

+0

非常感謝! –