5 二面性ビューのドキュメント識別子フィールド

二面性ビューでサポートされるドキュメントには、常に上位(ルート)レベルにドキュメント識別子フィールド_idが含まれます。これは、ビューの基礎となるルート表の主キー列に対応します。フィールド値は様々な形式を使用できます。

多くの場合、このような主キー列は1つのみです。複数の場合、主キーがコンポジットとして表現する場合があります。

  • 主キー列が1つのみの場合は、二面性ビューを定義するときにフィールド_idの値としてそれを使用します。

  • あるいは、フィールド_idの値としてオブジェクトを使用できます。オブジェクトのメンバーは、値が主キー列であるフィールドを指定します。

    主キー列が1つのみの場合でも、_idにオブジェクト値を使用できます。そのようにすると、わかりやすいフィールド名を指定できます。

例5-1 ドキュメント識別子フィールドの_id: 主キー列値

単一の主キー列race_idが、フィールド_idの値として使用されます。

CREATE JSON RELATIONAL DUALITY VIEW race_dv AS
  SELECT JSON {'_id'    : r.race_id,
               'name'   : r.name,
               'laps'   : r.laps WITH NOUPDATE,
               'date'   : r.race_date,
               'podium' : r.podium WITH NOCHECK,
               'result' : ...}
  FROM race;

ビューでサポートされるドキュメントは次のようになります: {"_id" : 1,…}

例5-2 ドキュメント識別子フィールドの_id: オブジェクト値

フィールド値は単一のメンバーを持つオブジェクトで、単一の主キー列race_idをわかりやすいフィールド名raceIdにマップします。

CREATE JSON RELATIONAL DUALITY VIEW race_dv AS
  SELECT JSON {'_id'    : {'raceId' : r.race_id},
               'name'   : r.name,
               'laps'   : r.laps WITH NOUPDATE,
               'date'   : r.race_date,
               'podium' : r.podium WITH NOCHECK,
               'result' : ...}
  FROM race;

ビューでサポートされるドキュメントは次のようになります: {"_id" : {"raceId" : 1},...}

代替カーレース設計では、かわりに、複数の主キー列(たとえば、race_iddate)があるrace表を使用できます:

CREATE JSON RELATIONAL DUALITY VIEW race_dv AS
  SELECT JSON {'_id'    : {'raceId' : r.race_id, 'date' : r.race_date},
               'name'   : r.name,
               'laps'   : r.laps WITH NOUPDATE,
               'podium' : r.podium WITH NOCHECK,
               'result' : ...}
  FROM race;

その場合、ビューでサポートされるドキュメントは次のようになります: {"_id" : {"raceId" : 1, "date" : "2022-03-20T00:00:00"},...}