我們是否應該使用興趣、音樂、影片、體育等欄位來規範使用者配置文件表?
我讀過一篇關於社交網路數據庫模式的文章,發現他們已將 varchar 用於我在問題標題中提到的那些列。沒有標準化!有一個運動表然後將外鍵放在使用者的個人資料表中不是更好嗎?在這種情況下,我們的冗餘會少得多嗎?如果我錯了,請糾正我。哪種方法更好地為 fav_sports、fav_videos、fav_music 等設置另一個表,或者將它們全部放在使用者表中?
我會選擇的解決方案取決於幾件事。如果這些列的數量相對較少(並且不是頻繁更改的主題),那麼我會採用您建議的解決方案,即。每個屬性和外鍵一個表。這樣,您必須定義一個新表並為每個新屬性添加一列並相應地修改您的查詢。
如果這不是你的情況,那麼應該考慮@Zachariha 建議的 EAV,但之前值得閱讀這個答案。它很容易擴展(只需在表格中添加一個新行),但可能很難維護——在我看來,主要是因為很難跟踪誰在哪個團隊中打球。
您在目前模式中看到的場景可能是未規範化數據或稍後為了加快查詢而進行非規範化的結果。通常,我將高度非規範化的表與基表分開,以保護我的數據免受違反參照完整性的影響。
我看不到如何添加評論,所以我正在回答,但部分是對第一個答案的評論。
在我看來,@Zachariha Robichaud 建議的模式是在 Extra 表上放置不同的興趣類型,可能是足球、籃球、重金屬、流行音樂、科幻小說。然後在類型表上,運動、音樂、書籍。最後,Map_User_Extra 將指出您可以組合所有 3 個表的三元組。建立多對多的關係會有所幫助。
對於我們的案例,eComm 應用程序,我們將一切標準化,我不是 100% 同意,但那是另一回事。在您的情況下,正如您對您的問題所評論的那樣,我將只使用一張桌子。但是由於很少有運動或任何其他興趣,根據您的評論,我會為所有這些使用一張桌子,而不是每張桌子。該表將具有興趣的 ID 和名稱。在使用者表上,我將添加一個參考特定興趣的列。