JSONBフィールド
JSONBフィールド(インターフェースではjsonbとラベル付けされています)は、オブジェクト{...}や配列[...]などの非構造化または半構造化データセットを保存するために使用されます。
標準的なテキストフィールドとは異なり、このフィールドはJSONB(バイナリJSON)形式を使用します。つまり、データベースは保存する前に入力が有効なJSONであることを検証し、構造内の特定のキーの効率的なインデックス作成とクエリを可能にする分解されたバイナリ形式でデータを保存します。
構成プロパティ
Section titled “構成プロパティ”右側のサイドバーでJSONフィールドを構成する際、以下の設定が利用可能です:
- Name(名前): フィールドの一意のシステム識別子(例:
metadata、settings、api_response)。 - Default Value(デフォルト値): データが提供されない場合に割り当てられる有効なJSONオブジェクトまたは配列(例:
{"theme": "dark"}または[])。 - Description(説明): JSONデータのスキーマまたは目的を説明するためのオプションのテキストボックス。
- Mandatory(必須): 有効にすると、有効なJSONデータが提供されない限り、レコードを保存できません。
- Unique(一意): 有効にすると、まったく同じJSON構造と内容を持つレコードが2つ存在しないようにします。
- 注: これは正確なバイナリ等価性を強制するため、データベースの正規化によっては、
{"a": 1, "b": 2}は{"b": 2, "a": 1}と等しいと見なされる可能性がありますが、{"a": 1}とは異なります。
- 注: これは正確なバイナリ等価性を強制するため、データベースの正規化によっては、
ヒント: なぜJSONBなのか? 私たちは標準のJSONの代わりにJSONBデータタイプを使用しています。書き込みはわずかに遅くなりますが、JSONBはクエリが大幅に高速です。インデックス作成(GIN)をサポートしているため、JSONオブジェクト内のキーと値に対して直接高性能な検索とフィルタリングを実行できます(例:
attributes->'color'が「青」であるすべてのユーザーを検索)。
一般的なユースケース
Section titled “一般的なユースケース”- 構成/設定: 新しいデータベース列を必要とせずに頻繁に変更される可能性のあるユーザー設定を保存する場合(例:
{"notifications": true, "theme": "dark"})。 - 外部APIデータ: サードパーティの統合からの生の応答を保存する場合(例:Stripe Webhookやログのペイロード)。
- 動的属性: カテゴリ間で大きく異なる製品詳細(例:Tシャツには
sizeとcolorがあるが、ラップトップにはramとcpuがある)。 - リスト: 文字列や数値の単純な配列を保存する場合(例:
["tag1", "tag2", "tag3"])。