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"} ]}
関連トピック
親トピック: カーレース二面性ビューの例の概要