web-dev-qa-db-ja.com

ユーザープロファイルを格納するためのnull可能な列またはjsonb?

ユーザープロファイルを格納するためにnull許容フィールドまたはjsonbを使用することを決定しています。当初、これは連絡先に使用されます:emailおよびphonemobilewebsiteなどの他の列が後で追加される可能性があると思います。さらに、設定/設定、保存された検索など、関連しない他のフィールドがある場合があります。

非常に正当な理由がない限り、これにはどのような形式のKey-Valueストア(または多対多の関係を含むスキーマ)も使用しないことをすでに決定しています。

Jsonbの長所:

  • 必要に応じて、各「列」に複数の値を格納できます
  • 新しいフィールドを追加するには、JSコーディングとドキュメントが必要です

Jsonbの短所:

  • 「列」の名前を各「行」の文字列として保存するオーバーヘッド
  • 比較クエリを実行するのは面倒です(私の使用シナリオではN/Aだと思います)
  • 予期しないことを期待する必要があります

この賛否両論のリストに追加するものはありますか?私が単にnull許容列を使用したいのと同じくらい、jsonbを無視するのは過失だと思います-説得力のある選択のようです。

2
dvtan

「両方の長所」を利用できます。知っているすべての通常の列を専用列として実装し(正確な適切なデータ型を使用し、NOT NULL/CHECK/PK/FKなどの制約を使用して、詳細なルール、デフォルト値、およびドキュメントのコメントを適用)、「キャッチオール」を追加します上記の機能を必要としない非常にまれなケース/後の追加/揮発性の高い属性のjsonb列。

明確にするために:「非常に揮発性が高い」とは、値が頻繁に更新されることを意味しません。これにより、jsonbなどのドキュメントタイプが明確にで示され、更新がより複雑で高価になります。これは、属性自体(メタレベルで)が大きく変化することを意味します(異なる名前、まれなandは、時間の経過などにより、存在の有無を問わず)。

ほとんどの人は、NULLストレージの実際の安さを過小評価しています。

関連:

5