Postgresql
用於儲存使用者配置文件的可空列或 jsonb?
我正在決定使用可空欄位或 jsonb 來儲存使用者配置文件。最初,這將用於聯繫人:
phone
. 我預計以後可能會添加其他列,例如mobile
和website
。此外,可能還有其他不相關的欄位,例如設置/首選項、保存的搜尋等。我已經決定我不想為此使用任何形式的鍵值儲存(或任何涉及多對多關係的模式),除非有非常好的理由。
jsonb的優點:
- 如有必要,可以為每個“列”儲存多個值
- 添加新欄位只需要 JS 編碼和文件
jsonb的缺點:
- 將“列”名稱儲存為每個“行”的字元串的成本
- 無法執行比較查詢(我認為我的使用場景不適用)
- 不得不期待意外
還有什麼要添加到這個優點/缺點列表中的嗎?儘管我想簡單地使用可為空的列,但我認為忽略 jsonb 是一種疏忽——這似乎是一個令人信服的選擇。
您可以使用“兩全其美”。將您知道的每個正常列實現為專用列(具有完全正確的數據類型,可能具有 NOT NULL / CHECK / PK / FK 等約束以強制執行詳細規則、預設值和文件註釋)並添加“包羅萬象”
jsonb
列用於非常罕見的情況/以後添加/不需要上述任何功能的高度易變的屬性。需要明確的是:“高度易變”並不意味著值更新很多,這顯然會反對任何文件類型,例如
jsonb
,使更新更加複雜和昂貴。這意味著屬性本身(在元級別上)發生了很大變化(不同的名稱,稀有的,並且隨著時間的推移而出現和消失或類似)。大多數人低估了 NULL 儲存的實際成本:
有關的: