Postgresql

用於儲存使用者配置文件的可空列或 jsonb?

  • January 29, 2017

我正在決定使用可空欄位或 jsonb 來儲存使用者配置文件。最初,這將用於聯繫人:emailphone. 我預計以後可能會添加其他列,例如mobilewebsite。此外,可能還有其他不相關的欄位,例如設置/首選項、保存的搜尋等。

我已經決定我不想為此使用任何形式的鍵值儲存(或任何涉及多對多關係的模式),除非有非常好的理由。

jsonb的優點:

  • 如有必要,可以為每個“列”儲存多個值
  • 添加新欄位只需要 JS 編碼和文件

jsonb的缺點:

  • 將“列”名稱儲存為每個“行”的字元串的成本
  • 無法執行比較查詢(我認為我的使用場景不適用)
  • 不得不期待意外

還有什麼要添加到這個優點/缺點列表中的嗎?儘管我想簡單地使用可為空的列,但我認為忽略 jsonb 是一種疏忽——這似乎是一個令人信服的選擇。

您可以使用“兩全其美”。將您知道的每個正常列實現為專用列(具有完全正確的數據類型,可能具有 NOT NULL / CHECK / PK / FK 等約束以強制執行詳細規則、預設值和文件註釋)並添加“包羅萬象”jsonb列用於非常罕見的情況/以後添加/不需要上述任何功能的高度易變的屬性。

需要明確的是:“高度易變”並不意味著值更新很多,這顯然會反對任何文件類型,例如jsonb,使更新更加複雜和昂貴。這意味著屬性本身(在元級別上)發生了很大變化(不同的名稱,稀有的,並且隨著時間的推移而出現和消失或類似)。

大多數人低估了 NULL 儲存的實際成本:

有關的:

引用自:https://dba.stackexchange.com/questions/162559