├── README.md └── gtfs-sql.sql /README.md: -------------------------------------------------------------------------------- 1 | gtfs-mysql 2 | ========== 3 | 4 | This repository is a MySQL database schema for the GTFS (General Transit Feed Specification). 5 | This builds on the SQl schema provided at https://github.com/sbma44/py-gtfs-mysql by adding support 6 | for all possible tables and fields within the specification. 7 | -------------------------------------------------------------------------------- /gtfs-sql.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `agency` ( 2 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 3 | transit_system VARCHAR(50) NOT NULL, 4 | agency_id VARCHAR(100), 5 | agency_name VARCHAR(255) NOT NULL, 6 | agency_url VARCHAR(255) NOT NULL, 7 | agency_timezone VARCHAR(100) NOT NULL, 8 | agency_lang VARCHAR(100), 9 | agency_phone VARCHAR(100), 10 | agency_fare_url VARCHAR(100) 11 | ); 12 | 13 | CREATE TABLE `calendar_dates` ( 14 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 15 | transit_system VARCHAR(50) NOT NULL, 16 | service_id VARCHAR(255) NOT NULL, 17 | `date` VARCHAR(8) NOT NULL, 18 | exception_type TINYINT(2) NOT NULL, 19 | KEY `service_id` (service_id), 20 | KEY `exception_type` (exception_type) 21 | ); 22 | 23 | CREATE TABLE `calendar` ( 24 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 25 | transit_system VARCHAR(50) NOT NULL, 26 | service_id VARCHAR(255) NOT NULL, 27 | monday TINYINT(1) NOT NULL, 28 | tuesday TINYINT(1) NOT NULL, 29 | wednesday TINYINT(1) NOT NULL, 30 | thursday TINYINT(1) NOT NULL, 31 | friday TINYINT(1) NOT NULL, 32 | saturday TINYINT(1) NOT NULL, 33 | sunday TINYINT(1) NOT NULL, 34 | start_date VARCHAR(8) NOT NULL, 35 | end_date VARCHAR(8) NOT NULL, 36 | KEY `service_id` (service_id) 37 | ); 38 | 39 | CREATE TABLE `fare_attributes` ( 40 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 41 | transit_system VARCHAR(50) NOT NULL, 42 | fare_id VARCHAR(100), 43 | price VARCHAR(50) NOT NULL, 44 | currency_type VARCHAR(50) NOT NULL, 45 | payment_method TINYINT(1) NOT NULL, 46 | transfers TINYINT(1) NOT NULL, 47 | transfer_duration VARCHAR(10), 48 | exception_type TINYINT(2) NOT NULL, 49 | agency_id INT(100), 50 | KEY `fare_id` (fare_id) 51 | ); 52 | 53 | CREATE TABLE `fare_rules` ( 54 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 55 | transit_system VARCHAR(50) NOT NULL, 56 | fare_id VARCHAR(100), 57 | route_id VARCHAR(100), 58 | origin_id VARCHAR(100), 59 | destination_id VARCHAR(100), 60 | contains_id VARCHAR(100), 61 | KEY `fare_id` (fare_id), 62 | KEY `route_id` (route_id) 63 | ); 64 | 65 | CREATE TABLE `feed_info` ( 66 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 67 | transit_system VARCHAR(50) NOT NULL, 68 | feed_publisher_name VARCHAR(100), 69 | feed_publisher_url VARCHAR(255) NOT NULL, 70 | feed_lang VARCHAR(255) NOT NULL, 71 | feed_start_date VARCHAR(8), 72 | feed_end_date VARCHAR(8), 73 | feed_version VARCHAR(100) 74 | ); 75 | 76 | CREATE TABLE `frequencies` ( 77 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 78 | transit_system VARCHAR(50) NOT NULL, 79 | trip_id VARCHAR(100) NOT NULL, 80 | start_time VARCHAR(8) NOT NULL, 81 | end_time VARCHAR(8) NOT NULL, 82 | headway_secs VARCHAR(100) NOT NULL, 83 | exact_times TINYINT(1), 84 | KEY `trip_id` (trip_id) 85 | ); 86 | 87 | CREATE TABLE `routes` ( 88 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 89 | transit_system VARCHAR(50) NOT NULL, 90 | route_id VARCHAR(100), 91 | agency_id VARCHAR(50), 92 | route_short_name VARCHAR(50) NOT NULL, 93 | route_long_name VARCHAR(255) NOT NULL, 94 | route_type VARCHAR(2) NOT NULL, 95 | route_text_color VARCHAR(255), 96 | route_color VARCHAR(255), 97 | route_url VARCHAR(255), 98 | route_desc VARCHAR(255), 99 | KEY `agency_id` (agency_id), 100 | KEY `route_type` (route_type) 101 | ); 102 | 103 | CREATE TABLE `shapes` ( 104 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 105 | transit_system VARCHAR(50) NOT NULL, 106 | shape_id VARCHAR(100) NOT NULL, 107 | shape_pt_lat DECIMAL(8,6) NOT NULL, 108 | shape_pt_lon DECIMAL(8,6) NOT NULL, 109 | shape_pt_sequence TINYINT(3) NOT NULL, 110 | shape_dist_traveled VARCHAR(50), 111 | KEY `shape_id` (shape_id) 112 | ); 113 | 114 | CREATE TABLE `stop_times` ( 115 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 116 | transit_system VARCHAR(50) NOT NULL, 117 | trip_id VARCHAR(100) NOT NULL, 118 | arrival_time VARCHAR(8) NOT NULL, 119 | arrival_time_seconds INT(100), 120 | departure_time VARCHAR(8) NOT NULL, 121 | departure_time_seconds INT(100), 122 | stop_id VARCHAR(100) NOT NULL, 123 | stop_sequence VARCHAR(100) NOT NULL, 124 | stop_headsign VARCHAR(50), 125 | pickup_type VARCHAR(2), 126 | drop_off_type VARCHAR(2), 127 | shape_dist_traveled VARCHAR(50), 128 | KEY `trip_id` (trip_id), 129 | KEY `arrival_time_seconds` (arrival_time_seconds), 130 | KEY `departure_time_seconds` (departure_time_seconds), 131 | KEY `stop_id` (stop_id), 132 | KEY `stop_sequence` (stop_sequence), 133 | KEY `pickup_type` (pickup_type), 134 | KEY `drop_off_type` (drop_off_type) 135 | ); 136 | 137 | CREATE TABLE `stops` ( 138 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 139 | transit_system VARCHAR(50) NOT NULL, 140 | stop_id VARCHAR(255), 141 | stop_code VARCHAR(50), 142 | stop_name VARCHAR(255) NOT NULL, 143 | stop_desc VARCHAR(255), 144 | stop_lat DECIMAL(10,6) NOT NULL, 145 | stop_lon DECIMAL(10,6) NOT NULL, 146 | zone_id VARCHAR(255), 147 | stop_url VARCHAR(255), 148 | location_type VARCHAR(2), 149 | parent_station VARCHAR(100), 150 | stop_timezone VARCHAR(50), 151 | wheelchair_boarding TINYINT(1), 152 | KEY `zone_id` (zone_id), 153 | KEY `stop_lat` (stop_lat), 154 | KEY `stop_lon` (stop_lon), 155 | KEY `location_type` (location_type), 156 | KEY `parent_station` (parent_station) 157 | ); 158 | 159 | CREATE TABLE `transfers` ( 160 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 161 | transit_system VARCHAR(50) NOT NULL, 162 | from_stop_id INT(100) NOT NULL, 163 | to_stop_id VARCHAR(8) NOT NULL, 164 | transfer_type TINYINT(1) NOT NULL, 165 | min_transfer_time VARCHAR(100) 166 | ); 167 | 168 | CREATE TABLE `trips` ( 169 | id INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT, 170 | transit_system VARCHAR(50) NOT NULL, 171 | route_id VARCHAR(100) NOT NULL, 172 | service_id VARCHAR(100) NOT NULL, 173 | trip_id VARCHAR(255), 174 | trip_headsign VARCHAR(255), 175 | trip_short_name VARCHAR(255), 176 | direction_id TINYINT(1), #0 for one direction, 1 for another. 177 | block_id VARCHAR(11), 178 | shape_id VARCHAR(11), 179 | wheelchair_accessible TINYINT(1), #0 for no information, 1 for at 180 | # least one rider accommodated on wheel chair, 2 for no riders 181 | # accommodated. 182 | bikes_allowed TINYINT(1), #0 for no information, 1 for at least 183 | # one bicycle accommodated, 2 for no bicycles accommodated 184 | KEY `route_id` (route_id), 185 | KEY `service_id` (service_id), 186 | KEY `direction_id` (direction_id), 187 | KEY `block_id` (block_id), 188 | KEY `shape_id` (shape_id) 189 | ); 190 | --------------------------------------------------------------------------------