“2025年万博コーナー”(当時は”万博コーナー”)にて、2025年08月下旬から2025年10月中旬まで公開した”万博会場直通バス検索”について、そのDBのテーブル構成をここに記録します。このDBは、バス路線がどの県のどの場所から出発しているか、そしてそのバス路線がどの会社によって運行されているかを定義するものです。
ER図

stopテーブルが中間テーブルです。以降、ER図左のテーブルから順に各カラムを説明します。
prefテーブル
| 名前 | データ型 | 制約 | 備考 |
|---|---|---|---|
| id | int | 主キー | |
| name | varchar(4) | 都道府県名 |
バス停が位置する都道府県を扱います。idの値は、JISの都道府県コードに準じたものを採用しました。(JISは01、02、03…と2桁文字列だが、ここでは1、2、3…のintとする)
areaテーブル
| 名前 | データ型 | 制約 | 備考 |
|---|---|---|---|
| id | varchar(20) | 主キー | |
| pref_id | int | 外部キー(pref.id) | |
| name | varchar(20) | 地域名 |
バスの発着地域で、ここではバス停を指します。例えば「’akihabara’, 13, ‘秋葉原駅’」という具合です。
stopテーブル
| 名前 | データ型 | 制約 | 備考 |
|---|---|---|---|
| id | int | 主キー | |
| area_id | varchar(20) | 外部キー(area.id) | |
| route_id | char(6) | 外部キー(route.id) |
バスの発着地域とバス路線を紐づけ、「バス路線がどこから出発しているか」を定義します。
routeテーブル
| 名前 | データ型 | 制約 | 備考 |
|---|---|---|---|
id ![]() | char(6) | 主キー | |
| company_id | char(2) | 外部キー(company.id) | |
| name | varchar(50) | 路線名または便名 | |
| url | varchar(120) | 運行会社の路線ページURL | |
| is_night | tinyint(1) | 1=夜行 | |
| ope_day | tinyint(1) | 1=平日、2=土休日を加算 | |
| started_on | date | 運行開始日 | |
| done_on | date | 最終運行日 | |
| updated_on | date | レコードの更新日 |
バス路線そのものを扱います。idの値は「company_id + 路線名または便名を表す英字」を採用しました。
運行開始日・運行最終日は、「検索した日にバスが走るかどうか」を判別するためのものです。なお、どの日が土休日かはこのDBでは定義せず、利用側で指定することとしました。
companyテーブル
| 名前 | データ型 | 制約 | 備考 |
|---|---|---|---|
| id | char(2) | 主キー | |
| name | varchar(20) | 運行会社名 | |
| url | varchar(50) | 運行会社のサイトURL |
運行会社です。idの値は、運行会社名の英語表記から採用しました。
課題
このテーブル構成で生じた課題もまとめておきます。
日付が変わってから停車するバス停の扱い
始発地を出発した当日に目的地(=万博会場)に着くのであれば何の問題もありませんが、例えば始発地を23:30に発車したあと、0時を回ってからもバス停に停車する路線は少なくありません。今回の公開では運行日の基準を始発地としましたが、どの日を基準とするか・テーブルに追加情報をもたせるかは検討の余地がありそうです。
共同運行路線の扱い
特に高速バスにおいて、1つのバス路線を2つ以上の会社が共同で運行することがあります。今回の公開では、companyテーブルのnameに(共同で運行する)複数の運行会社を入れてしのいだものの、companyテーブルとrouteテーブルの間に中間テーブルを作るのが理想かもしれません。






