2012-12-19 103 views
0

我設計數據庫以包含一個表reference,類型與列type即幾個預定義值(例如,bookmoviemagazine,等)中的一個。我打算隨着時間的推移擴大可能的價值範圍(例如,如果我意識到我錯過了academic_paper類型,我希望能夠將其納入)。SQL數據庫設計:存儲行

最簡單的解決方案似乎只是將表示類型的字符串存儲到表中。但這聽起來像會造成很多浪費空間。

我想到的另一個解決方案是創建一個新表reference_types,其中type列在其外鍵引用。這似乎有額外的好處,確保有效的外鍵(以便我不會意外錯誤地在我的代碼中的某處「雜誌」),可能允許更快的查詢某種類型的所有媒體(因爲整數比較應該是多比字符串比較更快),但也會減慢我的應用程序,因爲每當我需要引用類型時都需要連接,並且由於這些額外的連接可能會使邏輯複雜化。

你對這個問題的模式設計有什麼想法?

回答

1

你的第二個解決方案是正確的。創建一個輔助表來存儲您的引用類型並使用外鍵將它們鏈接起來。

要進一步閱讀這個主題,您想使用的搜索詞是'數據庫規範化'。

1

創建reference_types表。並在您的參考表中使用整數,並添加一個reference_type_name字段。

您可以查詢引用表以獲取整數鍵並在需要時輸出其名稱,而不需要執行到其他表的連接,並仍然使用該表執行其他操作,只需使用相同類型名稱保留兩個表即可。

我知道它是多餘的,但它確實是通過int key做一個簡單查詢並將它們放在一起的最快方法。

1

這取決於,如果你想添加一些其他信息引用類型,然後使用第二種方法。如果沒有,請使用第一個,因爲速度更快,存儲的信息只是一個字符串(您始終可以選擇唯一的來檢索您的類型)。請閱讀article瞭解更多信息。