Postgresql
我應該對使用者配置文件進行非規範化嗎?
假設選擇是保留關係模型,那麼在大型使用者配置文件的情況下,表的結構如何?我看到的所有範例都只考慮簡單的情況,例如包含姓名、電子郵件和其他一些列的“個人資料”。
假設該應用程序是一個生活儀表板,其中每個使用者個人資料都有各種不同的數據,從最喜歡的電影到金錢支出統計數據,再到圖片。而且由於它是一個破折號,我們希望在使用者登錄時將其全部返回到單頁應用程序。
這是非規範化的案例嗎?如果沒有非規範化,它將需要多個查詢才能返回第一個請求:一個授權查詢,然後是一個針對 userID 上可能存在的 10-15 個不同規範化表中的每一個的查詢。這很常見嗎?或者在這種情況下,非規範化甚至切換到 NoSql 是首選方法?還是逐案取決於我們是否希望規範化表中的每個實體表示和查詢?
規範化不是為了使讀取數據更容易或更高效。進行規範化是為了使更改數據更簡單,風險更小。當您插入、更新或刪除數據時,您將看到規範化的好處。
因此,如果您更新數據的頻率遠低於讀取數據的頻率,例如,如果您的數據幾乎從不改變,那麼針對讀取進行優化可能很有意義。但是,如果您要經常添加新數據和更改現有數據,那麼最好使用第三範式 (3NF) 作為數據庫設計的起點。
似乎每個使用者都有許多列表。應該有單獨的表,每個列表都有單獨的查詢。查看數據庫規範化。第三範式 (3NF) 應該是您的最小起點。隨著時間的推移,較小形式的數據可能會變得不一致。
該設計很可能以一個
profile
表和多個主題區域子表而告終。嘗試在一個查詢中檢索所有數據會在檢索時產生重大問題,因為您需要處理結果集中的笛卡爾積。您可能會發現您的設計以不同的視圖結束,其中視圖與數據庫表匹配。如果您生成報告,則部分可能與表具有高度相關性。