2.1 カーレースの例、JSONドキュメント

カーレースの例には、3種類のドキュメント(チーム・ドキュメント、ドライバ・ドキュメントおよびレース・ドキュメント)があります。

二面性ビューによってサポートされるドキュメントには、必ず、その最上位(ルート)レベルにドキュメント識別子フィールド_idが含まれています。これは、そのビューの基になるルート表の識別列(すべて)に対応付けられいます。「二面性ビューのドキュメント識別子フィールド」を参照してください。(カーレースの例では、各二面性ビューのルート表に、主キー列である単一の識別列があります。)

このドキュメントでは、次の命名規則に従います:

  • 各種ドキュメント(チーム、ドライバまたはレース)のドキュメント識別子フィールド(_id)は、それらのドキュメントをサポートしている二面性ビューのルート表の識別列に対応付けられています。たとえば、チーム・ドキュメントのフィールド_idは、表team (これは二面性ビューteam_dvの基になるルート表)の識別(主キー)列team_idに対応付けられています。

  • 1つの二面性ビュー(team_dvなど)でサポートされている1種類のドキュメント(チームなど)には、...Idという名前の他のフィールド(driverIdなど)を含めることができます。このフィールドは、他の二面性ビューの基になる表の識別列への外部キー参照(共有されるデータを含む列)を表します。たとえば、チーム・ドキュメントの場合、フィールドdriverIdは、ドライバ・ドキュメントのドキュメント識別子フィールド(_id)を参照する外部キーを表します。

ノート:

ここでは、アプリケーション・ロジックのドキュメント・コンテンツまたは各ドキュメントのペイロードのみを示します。つまり、ここに示すドキュメントには、自動生成および管理される上位レベルのフィールド_metadata(値がフィールドetagおよびasofを持つオブジェクト)は含まれていません。ただし、このドキュメント処理フィールドは、二面性ビューでサポートされるドキュメントに常に含まれます。フィールド_metadataの詳細は、「二面性ビューの作成」を参照してください。

例2-1 チーム・ドキュメント

チーム・ドキュメントには、チームに関連する情報に加えて、チームのドライバに関する情報が含まれていますが、必ずしもそのドライバに関連しているわけではありません。

  • 上位レベルのフィールド_idは、チーム・ドキュメントを一意に識別します。これは、ドキュメント識別子フィールドです。表teamの列team_idはこのフィールドに対応しており、表の主キーです。

  • ドライバ・ドキュメントと共有されないチーム情報は、フィールド_idおよび上位レベルのフィールドnameおよびpointsにあります。

  • ドライバ・ドキュメントと共有されるチーム情報は、フィールドdriverdriverIdnameおよびpointsフィールドにあります。フィールドdriverIdの値は、ドライバ・ドキュメントのドキュメント識別子フィールド(_id)の値です。

{"_id"    : 302,
 "name"   : "Ferrari",
 "points" : 300,
 "driver" : [ {"driverId" : 103,
               "name"     : "Charles Leclerc",
               "points"   : 192},
              {"driverId" : 104,
               "name"     : "Carlos Sainz Jr",
               "points"   : 118} ]}

例2-2 ドライバ・ドキュメント

ドライバ・ドキュメントには、ドライバに関連する情報に加えて、ドライバのチームの識別情報およびドライバが参加したレースに関する情報が含まれていますが、必ずしも、そのチームまたはレースに関連しているわけではありません。

  • 上位レベルのフィールド_idは、ドライバ・ドキュメントを一意に識別します。これは、ドキュメント識別子フィールドです。driver表の列driver_idはこのフィールドに対応しており、表の主キーです。

  • レースまたはチーム・ドキュメントと共有されないドライバ情報は、フィールド_idnameおよびpointsにあります。

  • レース・ドキュメントと共有されるドライバ情報は、フィールドraceにあります。フィールドraceIdの値は、レース・ドキュメントのドキュメント識別子フィールド(_id)の値です。

  • チーム・ドキュメントと共有されるドライバ情報は、teamIdなどのフィールドにあり、その値はチーム・ドキュメントのドキュメント識別子フィールド(_id)の値です。

2つの代替バージョンのドライバ・ドキュメントが表示されますが、ネストされたチームおよびレース情報がある場合とない場合があります。

ネストしたチームおよびレース情報があるドライバ・ドキュメント:

フィールドteamInfoには、ネストされたチーム情報(フィールドteamIdおよびname)が含まれています。フィールドraceInfoには、ネストされたレース情報(フィールドraceIdおよびname)が含まれています。

{"_id"      : 101,
 "name"     : "Max Verstappen",
 "points"   : 258,
 "teamInfo" : {"teamId" : 301, "name" : "Red Bull"},
 "race"     : [ {"driverRaceMapId" : 3,
                 "raceInfo"        : {"raceId" : 201,
                                      "name"   : "Bahrain Grand Prix"},
                 "finalPosition"   : 19},
                {"driverRaceMapId" : 11,
                 "raceInfo"        : {"raceId" : 202,
                                      "name"   : "Saudi Arabian Grand Prix"},
                 "finalPosition"   : 1} ]}

ネストしたチームおよびレース情報がないドライバ・ドキュメント:

フィールドteamIdおよびteamは、teamInfoオブジェクトにネストされていません。フィールドraceIdおよびnameは、raceInfoオブジェクトにネストされていません。

{"_id"      : 101,
 "name"     : "Max Verstappen",
 "points"   : 25,
 "teamId"   : 301,
 "team"     : "Red Bull",
 "race"     : [ {"driverRaceMapId" : 3,
                 "raceId"          : 201,
                 "name"            : "Bahrain Grand Prix",
                 "finalPosition"   : 19},
                {"driverRaceMapId" : 11,
                 "raceId"          : 202,
                 "name"            : "Saudi Arabian Grand Prix",
                 "finalPosition"   : 1} ]}

例2-3 カーレース・ドキュメント

レース・ドキュメントには、特定のレースに関する情報に、表彰者(1位、2位、3位)に関する情報および各ドライバのレースでの結果が含まれています。表彰者には、ドライバ名とチーム名が含まれています。各ドライバの結果には、ドライバの名前が含まれています。

これらの両方には、ドライバ名とチーム名が含まれています。

  • 上位レベルのフィールド_idは、レース・ドキュメントを一意に識別します。これは、ドキュメント識別子フィールドです。race表の列race_idはこのフィールドに対応しており、表の主キーです。

  • ドライバまたはチーム・ドキュメントと共有されないレース情報は、フィールド_idname (上位レベル)、lapsdatetimeおよびpositionにあります。

  • ドライバ・ドキュメントと共有されるレース情報は、driverIdなどのフィールドにあり、その値はドライバ・ドキュメントのドキュメント識別子フィールド(_id)の値です。

  • チーム・ドキュメントと共有されるレース情報は、フィールドteam (podiumの下にあるwinnerfirstRunnerUpおよびsecondRunnerUpの下)にあります。

2つの代替バージョンのレース・ドキュメントが表示されますが、ネストされたドライバ情報がある場合とない場合があります。

ネストしたドライバ情報があるレース・ドキュメント:

{"_id"    : 201,
 "name"   : "Bahrain Grand Prix",
 "laps"   : 57,
 "date"   : "2022-03-20T00:00:00",
 "podium" : {"winner"         : {"name" : "Charles Leclerc",
                                 "team" : "Ferrari",
                                 "time" : "02:00:05.3476"},
             "firstRunnerUp"  : {"name" : "Carlos Sainz Jr",
                                 "team" : "Ferrari",
                                 "time" : "02:00:15.1356"},
             "secondRunnerUp" : {"name" : "Max Verstappen",
                                 "team" : "Red Bull",
                                 "time" : "02:01:01.9253"}},
 "result" : [ {"driverRaceMapId" : 3,
               "position"        : 1,
               "driverInfo"      : {"driverId" : 103,
                                    "name"     : "Charles Leclerc"},
              {"driverRaceMapId" : 4,
               "position"        : 2,
               "driverInfo"      : {"driverId" : 104,
                                    "name"     : "Carlos Sainz Jr"},
              {"driverRaceMapId" : 9,
               "position"        : 3,
               "driverInfo"      : {"driverId" : 101,
                                    "name"     : "Max Verstappen"},
              {"driverRaceMapId" : 10,
               "position"        : 4,
               "driverInfo"      : {"driverId" : 102,
                                    "name"     : "Sergio Perez"} ]}

ネストしたドライバ情報がないレース・ドキュメント:

{"_id"    : 201,
 "name"   : "Bahrain Grand Prix",
 "laps"   : 57,
 "date"   : "2022-03-20T00:00:00",
 "podium" : {"winner"         : {"name" : "Charles Leclerc",
                                 "team" : "Ferrari",
                                 "time" : "02:00:05.3476"},
             "firstRunnerUp"  : {"name" : "Carlos Sainz Jr",
                                 "team" : "Ferrari",
                                 "time" : "02:00:15.1356"},
             "secondRunnerUp" : {"name" : "Max Verstappen",
                                 "team" : "Red Bull",
                                 "time" : "02:01:01.9253"}},
 "result" : [ {"driverRaceMapId" : 3,
               "position"        : 1,
               "driverId"        : 103,
               "name"            : "Charles Leclerc"},
              {"driverRaceMapId" : 4,
               "position"        : 2,
               "driverId"        : 104,
               "name"            : "Carlos Sainz Jr"},
              {"driverRaceMapId" : 9,
               "position"        : 3,
               "driverId"        : 101,
               "name"            : "Max Verstappen"},
              {"driverRaceMapId" : 10,
               "position"        : 4,
               "driverId"        : 102,
               "name"            : "Sergio Perez"} ]}