同じ構造のjsonbカラムと複合タイプのカラムを選択する際に考慮すべきことは何ですか?
たとえば、Postgresのドキュメントで使用されているような列について考えてみます。
CREATE TYPE inventory_item AS (
name text,
supplier_id integer,
price numeric
);
このアプローチと、この構造をミラーリングするjsonbカラムとの間のトレードオフは何ですか?
たとえば、複合型ではすべてのレコードのキー名を格納する必要がないのではないかと思いますが、jsonb型では必要です。
パフォーマンスの問題ではなく、
さらに、JSONにはユースケースがありますが、複合型ではほとんど決して使用したくないので、ほとんどの場合、それらを独自の関係に正規化する方が適切です。ただし、例外が1つあります。一連のデータの周りにライブラリ全体を作成する場合、複合型を使用すると、すべてがより良くなります。たとえば、PostGISの stdaddr はそのような例の1つです。そのタイプは物理アドレスを表し、複数のものがそのタイプを取ることができます(PostGISジオコーダーなど)。
だからできる
CREATE TABLE foo ( foo_id int, address postgis.stdaddr );
複合型の使用長所
複合型の短所の使用
別のテーブルを使用している構造化データを保存するためのオプションがもう1つあります:)。 2つのテーブルを作成して、自分でテストできます。