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