8 二面性ビューでのJSON列によるスキーマ柔軟性
二面性ビューの基になる表にJSON
データ型の列を含めると、アプリケーションで、そのビューによってサポートされているドキュメントに対して、フィールドの追加と削除、フィールド値の型変更ができるようになります。格納されているJSONデータは、スキーマレスにもJSONスキーマベース(特定の型の値を適用するため)にもできます。
スキーマレスの場合、そのようなフィールドの値は、任意のJSON言語型(スカラー、オブジェクト、配列)にできます。これは、スカラーSQL列から生成されるフィールドとは対照的であり、スカラーSQL列の場合は必ず、事前定義された型となります(また、必ずそのドキュメントに存在します)。
二面性ビューを定義するときは、特定のドキュメント部分またはドキュメント全体に対して、必要なスキーマ柔軟性の種類と程度を宣言的に選択できます。
JSON列の値は、二面性ビューでサポートされているドキュメント内に、そのビュー定義で宣言されているフィールドの値として埋め込むことや、ドキュメントの挿入時または更新時にオブジェクトにそれらを含めるだけで既存のドキュメント・オブジェクトにマージすることができます。
JSON
型列からドキュメントへの値の埋込みは、SQL型からJSONへの変換がないことを除き、別の型の列からの値の埋込みと同じです。JSON
型列から埋め込まれたフィールドの値はどのJSON言語型にもでき、その型をJSONスキーマに準拠するように制約できます。
ドキュメントにマージされたフィールドは、個々の列にマッピングされません。かわりに、指定された1つの表に対して、それらすべてが暗黙的に、フレックス列と呼ばれる同じJSON
型オブジェクト列にマップされます。したがって、フレックス列のデータ型はJSON (OBJECT)
であり、ビュー定義において、フィールドはそれにはマップされません。
二面性ビューの基になる表には、フレックス列と非フレックスJSON
型列の両方を含めることができます。フレックス列に格納されているフィールドはその表によって生成されたドキュメント・オブジェクトにマージされ、非フレックス列に格納されているフィールドはそのオブジェクトに埋め込まれます。
_________________________________________________________
- JSON列からドキュメントへの値の埋込み
二面性ビューの基になるJSON
型列にマッピングされたフィールドの値は、そのビューでサポートされているドキュメントにそのまま埋め込まれます。SQL値からの変換はありません。それはすでにJSON値です(デフォルトで、任意のJSON言語型: オブジェクト、配列、文字列、数値、…)。 - JSONフレックス列からドキュメントへのフィールドのマージ
二面性ビューのフレックス列では、フィールドが事前定義されていないJSONオブジェクトが格納されます(基になる表内)。それらは、基になる特定の列に個別にマップされません。挿入または更新したドキュメント内のオブジェクトの認識されていないフィールドは、そのオブジェクトの、基になる表のフレックス列に自動的に追加されます。 - 二面性ビューにJSON型列を使用する状況
二面性ビューの基になる一部のデータをJSON
データ型として格納するかどうかと、格納する場合はその構造および型指定を強制適用するかどうかは、JSONリレーショナル二面性ビューを定義する際に考慮する、設計上の選択です。 - フレックス列(基本より詳しい説明)
二面性ビューのフレックス列に関するすべて: 使用上のルール。いつ、どこで、何のためにそれらを使用するのか。フィールド名の競合。