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にあります。 -
ドライバ・ドキュメントと共有されるチーム情報は、フィールド
driverのdriverId、nameおよび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はこのフィールドに対応しており、表の主キーです。 -
レースまたはチーム・ドキュメントと共有されないドライバ情報は、フィールド
_id、nameおよび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はこのフィールドに対応しており、表の主キーです。 -
ドライバまたはチーム・ドキュメントと共有されないレース情報は、フィールド
_id、name(上位レベル)、laps、date、timeおよびpositionにあります。 -
ドライバ・ドキュメントと共有されるレース情報は、
driverIdなどのフィールドにあり、その値はドライバ・ドキュメントのドキュメント識別子フィールド(_id)の値です。 -
チーム・ドキュメントと共有されるレース情報は、フィールド
team(podiumの下にあるwinner、firstRunnerUpおよび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"} ]}
関連トピック
親トピック: カーレース二面性ビューの例の概要