Skip to content

Latest commit

 

History

History
177 lines (137 loc) · 13 KB

DBStructure.md

File metadata and controls

177 lines (137 loc) · 13 KB

データベース構造

将来的にはデータベース作成ツールを組み込むつもりですが、現在は未実装です。 ただし、本アプリはSQLite3をDBエンジンとして使用しており、フリーソフトを用いて簡単にデータベースを作成することができます。

以下に、データベース構造を示します。 なお、DB作成に使用できるSQLファイルを用意しているので、DB作成時はこちらをご活用ください。

データベースは、以下のような6テーブルから構成されます。

Table Name Description
work_group 仕業グループを記録する
work 仕業データに関する情報を記録する
train_data 列車データを記録する
station 駅データを記録する
station_track 各駅の番線情報を記録する
timetable_row 各列車の各駅到着時刻等を記録する

注意事項

HTMLで表示内容を書くことができるColumnがありますが、HTMLを利用する場合は何らかのタグで表示内容全体を囲んで記録してください。 実装の都合上、文字列の先頭に<、加えて末尾に>が存在する場合にHTMLで描画するようにしています。

例えば、一部を太文字にしたい場合は、ABC<b>D</b>EFではなく、<span>ABC<b>D</b>EF</span>のようにします。

work_groupテーブル

CREATE TABLE "work_group" (
"id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"db_version" INTEGER,
PRIMARY KEY("id" AUTOINCREMENT)
);

Column Type Description Version
id INTEGER NOT NULL WorkGroupテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
name TEXT NOT NULL WorkGroupの名前 0 ~
db_version INTEGER データベース構造のバージョン 1 ~

workテーブル

CREATE TABLE "work" (
"id" INTEGER NOT NULL,
"work_group_id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"affect_date" TEXT NOT NULL,
"affix_content_type" INTEGER,
"affix_content" BLOB,
"remarks" TEXT,
"has_e_train_timetable" INTEGER,
"e_train_timetable_content_type" INTEGER,
"e_train_timetable_content" BLOB,
FOREIGN KEY("work_group_id") REFERENCES "work_group"("id"),
PRIMARY KEY("id" AUTOINCREMENT)
);

Column Type Description Version
id INTEGER NOT NULL Workテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
work_group_id INTEGER NOT NULL 関連づけるWorkGroupのid (work_groupで作成したWorkGroupのIDを指定する) 0 ~
name TEXT NOT NULL WorkGroupの名前 0 ~
affect_date TEXT NOT NULL 「行路施行日」に表示する日付
YYYY-MM-DD形式で指定できます。あるいは、空文字列にすることで、アプリで読み込んだ当日の日付が表示されます
0 ~
affix_content_type INTEGER 「行路添付」に表示するデータのデータ形式 1 ~
affix_content BLOB 「行路添付」に表示するデータ 1 ~
remarks TEXT 行路の注意事項 (HTMLを書くと、任意のスタイルで文字を表示できます) 1 ~
has_e_train_timetable INTEGER 「E電時刻表」を持っているか 1 ~
e_train_timetable_content_type INTEGER 「E電時刻表」に表示するデータのデータ形式 1 ~
e_train_timetable_content BLOB 「E電時刻表」に表示するデータ 1 ~

train_dataテーブル

列車ごとの情報を記録するテーブルです。各駅の停車時刻等はtimetable_rowテーブルに記録します。

CREATE TABLE "train_data" (
"id" INTEGER NOT NULL,
"work_id" INTEGER NOT NULL,
"train_number" TEXT NOT NULL,
"max_speed" TEXT,
"speed_type" TEXT,
"ntc" TEXT,
"car_count" INTEGER,
"destination" TEXT,
"begin_remarks" TEXT,
"after_remarks" TEXT,
"remarks" TEXT,
"before_departure" TEXT,
"train_info" TEXT,
"direction" INTEGER NOT NULL,
"after_arrive" TEXT,
"before_departure_on_station_track_col" TEXT,
"after_arrive_on_station_track_col" TEXT,
"day_count" INTEGER,
"is_ride_on_moving" INTEGER,
"color_id" INTEGER,
FOREIGN KEY("work_id") REFERENCES "work"("id"),
FOREIGN KEY("color_id") REFERENCES "color"("id"),
PRIMARY KEY("id" AUTOINCREMENT)
);

Column Type Description Version
id INTEGER NOT NULL TrainDataテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
work_id INTEGER NOT NULL 関連づけるWorkのid (work_groupで作成したWorkGroupのIDを指定する) 0 ~
train_number TEXT NOT NULL 列車番号 (「列番」として表示される) 0 ~
max_speed TEXT 「最高速度」として表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
speed_type TEXT 「速度種別」として表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
ntc TEXT 「けん引定数」として表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
car_count INTEGER 編成両数。NULLにしても、両数表示は消えません。 0 ~
destination TEXT (XXX 行)」のXXX部分に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます)
NULLにすると(XXX 行)部分が丸ごと表示されなくなります。
0 ~
begin_remarks TEXT 「着」の直上あたりに表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
after_remarks TEXT 時刻表部分の一番下に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
remarks TEXT 「注意事項」に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
before_departure TEXT 「発前」に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
train_info TEXT 「発前」の上部分に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
direction INTEGER NOT NULL 列車の進行方向を表す値
0以上の値を設定することで、駅位置について昇順(0 to 9の順)で表示されます。逆に、0未満で降順(9 to 0)です。
0 ~
after_arrive TEXT 「着後」に表示される内容 (HTMLを書くと、任意のスタイルで文字を表示できます) 1 ~
before_departure_on_station_track_col TEXT 「発前」に表示される内容のうち、「着発線」と同じ列に表示されるもの 1 ~
after_arrive_on_station_track_col TEXT 「着後」に表示される内容のうち、「着発線」と同じ列に表示されるもの 1 ~
day_count INTEGER 仕業の初日からの経過日数 (初日ならNULLまたは0、明けなら1) 1 ~
is_ride_on_moving INTEGER 便乗かどうか (便乗なら1、そうでないなら0) 1 ~
color_id INTEGER E電時刻表で使用する、線の色ID 1 ~

stationテーブル

各駅の情報を記録するテーブルです。駅の情報はWorkGroupごとに分けることができます。

CREATE TABLE "station" (
"id" INTEGER NOT NULL,
"work_group_id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"location" REAL NOT NULL,
"location_lon_deg" REAL,
"location_lat_deg" REAL,
"on_station_detect_radius_m" REAL,
"full_name" TEXT,
"record_type" INTEGER,
PRIMARY KEY("id" AUTOINCREMENT),
FOREIGN KEY("work_group_id") REFERENCES "work_group"("id")
);

Column Type Description Version
id INTEGER NOT NULL Stationテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
work_group_id INTEGER NOT NULL 関連づけるWorkGroupのid (work_groupで作成したWorkGroupのIDを指定する) 0 ~
name TEXT NOT NULL 時刻表に表示するのに使用する文字列 (駅名の場合は4文字以下) 0 ~
full_name TEXT 駅の完全な名前 (5文字以上の格納が可能) 1 ~
location REAL NOT NULL 駅の位置 [m] (駅の並び順を決定するのに使用) 0 ~
location_lon_deg REAL 駅の経度を度数法で表したもの [deg] 1 ~
location_lat_deg REAL 駅の緯度を度数法で表したもの [deg] 1 ~
on_station_detect_radius_m REAL 駅に在線しているかどうかを検出する円の半径 [m] 1 ~
record_type INTEGER 駅の種類 1 ~

なお、record_typeにて使用する数字と意味の対照は以下の通りです。

Value Meaning
0 通常の駅 (E電時刻表に表示させる)
1 通常の駅 (E電時刻表に表示させない)
2 情報を表示する行 (ほぼ全ての列車に表示させるもの)
(例: 「交直切換」など)
3 情報を表示する行 (一部の列車に表示させるもの)
(例: 工臨の現場情報など)

station_trackテーブル

CREATE TABLE "station_track" (
"id" INTEGER NOT NULL,
"station_id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT),
FOREIGN KEY("station_id") REFERENCES "station"("id")
);

Column Type Description Version
id INTEGER NOT NULL Station_Trackテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
station_id INTEGER NOT NULL 関連づけるStationのid (stationで作成したStationのIDを指定する) 0 ~
name TEXT NOT NULL 「着線/発線」列に表示する名前 (全角2文字以下を推奨)
(HTMLを書くと、任意のスタイルで文字を表示できます)
0 ~

nameには、例えば13番線であれば13を指定します。

timetable_rowテーブル

CREATE TABLE "timetable_row" (
"id" INTEGER NOT NULL,
"train_id" INTEGER NOT NULL,
"station_id" INTEGER NOT NULL,
"drive_time_mm" INTEGER,
"drive_time_ss" INTEGER,
"is_operation_only_stop" INTEGER,
"is_pass" INTEGER,
"has_bracket" INTEGER,
"is_last_stop" INTEGER,
"arrive_hh" INTEGER,
"arrive_mm" INTEGER,
"arrive_ss" INTEGER,
"departure_hh" INTEGER,
"departure_mm" INTEGER,
"departure_ss" INTEGER,
"station_track_id" INTEGER,
"run_in_limit" INTEGER,
"run_out_limit" INTEGER,
"remarks" TEXT,
"arrive_str" TEXT,
"departure_str" TEXT,
"marker_color_id" INTEGER,
"marker_text" TEXT,
"work_type" INTEGER,
PRIMARY KEY("id" AUTOINCREMENT),
UNIQUE("train_id", "station_id"),
FOREIGN KEY("station_id") REFERENCES "station"("id"),
FOREIGN KEY("station_track_id") REFERENCES "station_track"("id"),
FOREIGN KEY("train_id") REFERENCES "train_data"("id"),
FOREIGN KEY("marker_color_id") REFERENCES "color"("id")
);

Column Type Description Version
id INTEGER NOT NULL Timetable_Rowテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 0 ~
train_id INTEGER NOT NULL 関連づけるTrainのid (trainで作成したTrainのIDを指定する) 0 ~
station_id INTEGER NOT NULL 関連づけるStationのid (stationで作成したStationのIDを指定する) 0 ~
drive_time_mm INTEGER 「運転時分」列の「分」部分に表示する数字 (NULLで非表示) 0 ~
drive_time_ss INTEGER 「運転時分」列の「秒」部分に表示する数字 (NULLで非表示 09の場合は、0009のように、ゼロ埋めして表示される) 0 ~
is_operation_only_stop INTEGER 運転停車かどうか
(1で「運転停車駅である」ということを表す。0またはNULLで「運転停車駅ではない」ということを表す)
0 ~
is_pass INTEGER 通過駅かどうか。通過駅の場合は着時刻と発時刻が赤文字で表示されます。
(1で「通過駅である」ということを表す。0またはNULLで「通過駅ではない」ということを表す)
0 ~
has_bracket INTEGER 着時刻に()を表示するかどうか
(1で「表示」、0またはNULLで「非表示」)
0 ~
is_last_stop INTEGER 終着駅かどうか (「発(通)」列に「=」を表示させるかどうか)
(1で「表示」、0またはNULLで「非表示」)
0 ~
arrive_hh INTEGER 着時刻の「時」部分に表示する名前 (NULLで非表示) 0 ~
arrive_mm INTEGER 着時刻の「分」部分に表示する名前 (NULLで非表示 但し、「時」がNULLでない場合は00が表示される) 0 ~
arrive_ss INTEGER 着時刻の「秒」部分に表示する名前 (NULLで非表示) 0 ~
arrive_str TEXT 「着」列に表示する文字列 (NULL または、着時刻が設定されている場合は表示されない。)
を設定することで、通過を表す赤い矢印が表示される
(HTMLを書くと、任意のスタイルで文字を表示できます)
0 ~
departure_hh INTEGER 発(通過)時刻の「時」部分に表示する名前 (NULLで非表示) 0 ~
departure_mm INTEGER 発(通過)時刻の「分」部分に表示する名前 (NULLで非表示 但し、「時」がNULLでない場合は00が表示される) 0 ~
departure_ss INTEGER 発(通過)時刻の「秒」部分に表示する名前 (NULLで非表示) 0 ~
deaprture_str TEXT 「発(通)」列に表示する文字列 (NULL または、発(通過)時刻が設定されている場合は表示されない。)
を設定することで、通過を表す赤い矢印が表示される
(HTMLを書くと、任意のスタイルで文字を表示できます)
0 ~
station_track_id INTEGER 関連づけるStation_Trackのid (station_trackで作成したStation_TrackのIDを指定する)
NULLで非表示
0 ~
run_in_limit INTEGER 「制限速度」列に進入制限として表示する速度。NULLで非表示 0 ~
run_out_limit INTEGER 「制限速度」列に進出制限として表示する速度。NULLで非表示 0 ~
remarks TEXT 「記事」列に表示する文字列 (HTMLを書くと、任意のスタイルで文字を表示できます) 0 ~
marker_color_id INTEGER デフォルトで表示させるマーカーの色ID 1 ~
marker_text TEXT デフォルトで表示させるマーカーのテキスト 1 ~
work_type INTEGER 仕業の情報 1 ~

なお、record_typeにて使用する数字と意味の対照は以下の通りです。

Value Meaning
0 なし

(現在策定中)

languageテーブル

CREATE TABLE "language" (
"id" INTEGER NOT NULL,
"language_code" TEXT NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT),
UNIQUE("language_code")
);

多言語対応用言語情報を記録するテーブル

現在準備中

colorテーブル

CREATE TABLE "color" (
"id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"rgb" INTEGER NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT)
);

Column Type Description Version
id INTEGER NOT NULL Colorテーブル内での一意の番号 (AUTOINCREMENTなため、自動で付与される) 1 ~
name TEXT 色の名前 1 ~
rgb INTEGER 色の情報 (0xRRGGBB) 1 ~