需要幫助規範化媒體網站的數據庫
我創建了一個媒體網站,訪問者可以在其中觀看預告片、查看圖片等。在此過程中,我發現我需要更多的圖片來分享等。我走“簡單”的路線並發展了“媒體” “表到一些變得有些難看的東西。我可以繼續增長 Media 表,但我知道擁有太多列的表是不好的設計。
這是目前模式的要點/圖表(媒體表已縮短為僅包含相關列,總共大約有 40 列):https ://dbdiagram.io/d/5fbbcf413a78976d7b7d1252
我想通過創建一個 MediaVideos 表來“剝離” Media 表,因為我想要一個預告片和一個短片(僅供註冊使用者使用)。然而,當我很快意識到如果我要從根本上重新建構事物時,我停了下來,我應該以正確的方式去做。
所以,我正在考慮創建兩個新表:MediaAssets 和 MediaAssetTypes。像這樣的東西:https ://dbdiagram.io/d/5fbbd2513a78976d7b7d12e8
我覺得問題在於,這意味著該表將包含一些不會用於某些資產的列。那樣可以麼?例如,我只需要某些圖像/資產的高度和寬度,而不是全部。
在我實質上拆開我的應用程序以使其正確之前,我只想獲得第二(或更多)意見。
歡迎任何建議和想法!
謝謝!
更新: 在進一步思考並考慮JD 的回復之後,我想到了第三種情況,我保留 MediaImages 表,但添加一個高度、寬度和 ImageTypeId 以支持我需要知道高度/寬度的圖像。然後創建一個帶有 TrailerTypeId 的 MediaTrailers 表:https ://dbdiagram.io/d/5fbc21363a78976d7b7d1d87
您應該閱讀星型模式和數據庫規範化。儘管無論如何它並不總是適用於所有數據庫設計的解決方案,但我相信在很多情況下(包括您的情況),鬆散地實施它通常是一種很好的做法。(它甚至是整個 Snowflake 數據庫管理系統所基於的衍生產品。)
這是一個關於星型(和雪花)模式設計的非常好的文件:了解星型模式
(雖然這是針對 PowerBI 的,但我認為 Microsoft 在解釋架構設計的概念方面做得很好,所以只關注這些部分。)
這是 Microsoft 關於規範化的一篇很好的直截了當的文章:數據庫規範化基礎的描述
數據庫規範化與您的設計問題更加相關,並且在兩者之間更重要的是要理解。
從使用具有 40 多列的 Media 表查看您的第一個設計,將其分解為不同的表以用於列名中以相同前綴開頭的事物可能是有意義的。例如 TrailerAttributes 和 SocialMediaAttributes 可以是它們自己的表。然後,您的 Media 表中沒有預告片的內容將不會有一個空的和不需要的列。您也可以通過這種方式進一步將事物規範化到它們自己的表格中,例如,一些公共屬性屬於一些預告片和一些社交媒體行。您將創建一個進一步解耦的表,該表儲存在其他表之間共享的那些屬性。(這是標準化的另一個槓桿,在您閱讀我上面的連結之後,這將是有意義的。)
看起來您更新的架構是朝著正確方向邁出的一步,尤其是旨在實現更通用的解決方案。