| 1 | DROP TABLE IF EXISTS child_ticket CASCADE;
|
|---|
| 2 | DROP TABLE IF EXISTS ticket_relations CASCADE;
|
|---|
| 3 | DROP TABLE IF EXISTS ticket CASCADE;
|
|---|
| 4 | DROP TABLE IF EXISTS payment CASCADE;
|
|---|
| 5 | DROP TABLE IF EXISTS review CASCADE;
|
|---|
| 6 | DROP TABLE IF EXISTS student_ticket CASCADE;
|
|---|
| 7 | DROP TABLE IF EXISTS student CASCADE;
|
|---|
| 8 | DROP TABLE IF EXISTS trip_stops CASCADE;
|
|---|
| 9 | DROP TABLE IF EXISTS trip_days_active CASCADE;
|
|---|
| 10 | DROP TABLE IF EXISTS trip CASCADE;
|
|---|
| 11 | DROP TABLE IF EXISTS route CASCADE;
|
|---|
| 12 | DROP TABLE IF EXISTS favorite CASCADE;
|
|---|
| 13 | DROP TABLE IF EXISTS driver_drives_on_trip CASCADE;
|
|---|
| 14 | DROP TABLE IF EXISTS driver_vehicle_operation CASCADE;
|
|---|
| 15 | DROP TABLE IF EXISTS driver CASCADE;
|
|---|
| 16 | DROP TABLE IF EXISTS transport_organizer CASCADE;
|
|---|
| 17 | DROP TABLE IF EXISTS admin CASCADE;
|
|---|
| 18 | DROP TABLE IF EXISTS account CASCADE;
|
|---|
| 19 | DROP TABLE IF EXISTS location CASCADE;
|
|---|
| 20 | DROP TABLE IF EXISTS train CASCADE;
|
|---|
| 21 | DROP TABLE IF EXISTS van CASCADE;
|
|---|
| 22 | DROP TABLE IF EXISTS bus CASCADE;
|
|---|
| 23 | DROP TABLE IF EXISTS automobile CASCADE;
|
|---|
| 24 | DROP TABLE IF EXISTS vehicle CASCADE;
|
|---|
| 25 |
|
|---|
| 26 | CREATE TABLE account (
|
|---|
| 27 | account_id SERIAL PRIMARY KEY,
|
|---|
| 28 | email VARCHAR(100) NOT NULL UNIQUE,
|
|---|
| 29 | name VARCHAR(50) NOT NULL,
|
|---|
| 30 | surname VARCHAR(50) NOT NULL,
|
|---|
| 31 | password VARCHAR(60) NOT NULL
|
|---|
| 32 | );
|
|---|
| 33 |
|
|---|
| 34 | CREATE TABLE admin (
|
|---|
| 35 | admin_id SERIAL PRIMARY KEY,
|
|---|
| 36 | account_id INT NOT NULL,
|
|---|
| 37 | CONSTRAINT fk_admin_account_id FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE
|
|---|
| 38 | );
|
|---|
| 39 |
|
|---|
| 40 | CREATE TABLE payment (
|
|---|
| 41 | payment_id SERIAL PRIMARY KEY,
|
|---|
| 42 | account_id INT NOT NULL,
|
|---|
| 43 | date DATE NOT NULL,
|
|---|
| 44 | total_price DOUBLE PRECISION NOT NULL CHECK (total_price >= 0),
|
|---|
| 45 | n_tickets INT NOT NULL CHECK (n_tickets > 0),
|
|---|
| 46 | CONSTRAINT payment_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE
|
|---|
| 47 | );
|
|---|
| 48 |
|
|---|
| 49 | CREATE TABLE location (
|
|---|
| 50 | location_id SERIAL PRIMARY KEY,
|
|---|
| 51 | latitude DOUBLE PRECISION NOT NULL,
|
|---|
| 52 | longitude DOUBLE PRECISION NOT NULL,
|
|---|
| 53 | name VARCHAR(100) NOT NULL
|
|---|
| 54 | );
|
|---|
| 55 |
|
|---|
| 56 | CREATE TABLE ticket (
|
|---|
| 57 | ticket_id SERIAL PRIMARY KEY,
|
|---|
| 58 | trip_id INT NOT NULL,
|
|---|
| 59 | gets_on_location_id INT NOT NULL,
|
|---|
| 60 | gets_off_location_id INT NOT NULL,
|
|---|
| 61 | account_id INT NOT NULL,
|
|---|
| 62 | date_purchased DATE NOT NULL,
|
|---|
| 63 | time_purchased TIME WITHOUT TIME ZONE NOT NULL,
|
|---|
| 64 | price DOUBLE PRECISION CHECK (price >= 0),
|
|---|
| 65 | seat VARCHAR(10),
|
|---|
| 66 | payment_id INT NOT NULL,
|
|---|
| 67 | CONSTRAINT gets_on_location_fkey FOREIGN KEY (gets_on_location_id) REFERENCES location(location_id) ON DELETE CASCADE,
|
|---|
| 68 | CONSTRAINT gets_off_location_fkey FOREIGN KEY (gets_off_location_id) REFERENCES location(location_id) ON DELETE CASCADE,
|
|---|
| 69 | CONSTRAINT ticket_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE,
|
|---|
| 70 | CONSTRAINT ticket_payment_id_fkey FOREIGN KEY (payment_id) REFERENCES payment(payment_id) ON DELETE CASCADE
|
|---|
| 71 | );
|
|---|
| 72 |
|
|---|
| 73 | CREATE TABLE review (
|
|---|
| 74 | review_id SERIAL PRIMARY KEY,
|
|---|
| 75 | account_id INT NOT NULL,
|
|---|
| 76 | ticket_id INT NOT NULL,
|
|---|
| 77 | description TEXT,
|
|---|
| 78 | rating INT CHECK (rating >= 1 AND rating <= 5),
|
|---|
| 79 | CONSTRAINT review_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE,
|
|---|
| 80 | CONSTRAINT review_ticket_id_fkey FOREIGN KEY (ticket_id) REFERENCES ticket(ticket_id) ON DELETE CASCADE
|
|---|
| 81 | );
|
|---|
| 82 |
|
|---|
| 83 |
|
|---|
| 84 | CREATE TABLE transport_organizer (
|
|---|
| 85 | transport_organizer_id SERIAL PRIMARY KEY,
|
|---|
| 86 | account_id INT NOT NULL,
|
|---|
| 87 | company_name VARCHAR(100) NOT NULL,
|
|---|
| 88 | company_embg VARCHAR(50) NOT NULL,
|
|---|
| 89 | CONSTRAINT transport_organizer_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE
|
|---|
| 90 | );
|
|---|
| 91 |
|
|---|
| 92 | CREATE TABLE vehicle (
|
|---|
| 93 | transport_organizer_id INT NOT NULL,
|
|---|
| 94 | vehicle_id SERIAL PRIMARY KEY,
|
|---|
| 95 | model VARCHAR(30) NOT NULL,
|
|---|
| 96 | brand VARCHAR(30) NOT NULL,
|
|---|
| 97 | capacity VARCHAR(20) NOT NULL,
|
|---|
| 98 | year_manufactured VARCHAR(10),
|
|---|
| 99 | CONSTRAINT vehicle_transport_organizer_id_fkey FOREIGN KEY (transport_organizer_id) REFERENCES transport_organizer(transport_organizer_id) ON DELETE CASCADE
|
|---|
| 100 |
|
|---|
| 101 | );
|
|---|
| 102 |
|
|---|
| 103 | CREATE TABLE automobile (
|
|---|
| 104 | automobile_id SERIAL PRIMARY KEY,
|
|---|
| 105 | vehicle_id INT NOT NULL UNIQUE,
|
|---|
| 106 | CONSTRAINT automobile_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicle(vehicle_id) ON DELETE CASCADE
|
|---|
| 107 | );
|
|---|
| 108 |
|
|---|
| 109 | CREATE TABLE bus (
|
|---|
| 110 | bus_id SERIAL PRIMARY KEY,
|
|---|
| 111 | vehicle_id INT NOT NULL UNIQUE,
|
|---|
| 112 | CONSTRAINT bus_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicle(vehicle_id) ON DELETE CASCADE
|
|---|
| 113 | );
|
|---|
| 114 |
|
|---|
| 115 | CREATE TABLE van (
|
|---|
| 116 | van_id SERIAL PRIMARY KEY,
|
|---|
| 117 | vehicle_id INT NOT NULL UNIQUE,
|
|---|
| 118 | CONSTRAINT van_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicle(vehicle_id) ON DELETE CASCADE
|
|---|
| 119 | );
|
|---|
| 120 |
|
|---|
| 121 | CREATE TABLE train (
|
|---|
| 122 | train_id SERIAL PRIMARY KEY,
|
|---|
| 123 | vehicle_id INT NOT NULL UNIQUE,
|
|---|
| 124 | CONSTRAINT train_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicle(vehicle_id) ON DELETE CASCADE
|
|---|
| 125 | );
|
|---|
| 126 |
|
|---|
| 127 | CREATE TABLE route (
|
|---|
| 128 | route_id SERIAL PRIMARY KEY,
|
|---|
| 129 | transport_organizer_id INT NOT NULL,
|
|---|
| 130 | from_location_id INT NOT NULL,
|
|---|
| 131 | to_location_id INT NOT NULL,
|
|---|
| 132 | CONSTRAINT route_transport_organizer_id_fkey FOREIGN KEY (transport_organizer_id) REFERENCES transport_organizer(transport_organizer_id) ON DELETE CASCADE,
|
|---|
| 133 | CONSTRAINT route_from_location_id_fkey FOREIGN KEY (from_location_id) REFERENCES location(location_id),
|
|---|
| 134 | CONSTRAINT route_to_location_id_fkey FOREIGN KEY (to_location_id) REFERENCES location(location_id)
|
|---|
| 135 | );
|
|---|
| 136 |
|
|---|
| 137 | CREATE TABLE trip (
|
|---|
| 138 | trip_id SERIAL PRIMARY KEY,
|
|---|
| 139 | transport_organizer_id INT NOT NULL,
|
|---|
| 140 | route_id INT NOT NULL,
|
|---|
| 141 | free_seats INT CHECK (free_seats >= 0),
|
|---|
| 142 | date DATE NOT NULL,
|
|---|
| 143 | status VARCHAR(30),
|
|---|
| 144 | CONSTRAINT trip_transport_organizer_id_fkey FOREIGN KEY (transport_organizer_id) REFERENCES transport_organizer(transport_organizer_id),
|
|---|
| 145 | CONSTRAINT trip_route_id_fkey FOREIGN KEY (route_id) REFERENCES route(route_id) ON DELETE CASCADE
|
|---|
| 146 | );
|
|---|
| 147 |
|
|---|
| 148 | CREATE TABLE driver (
|
|---|
| 149 | driver_id SERIAL PRIMARY KEY,
|
|---|
| 150 | account_id INT NOT NULL,
|
|---|
| 151 | years_experience INT NOT NULL,
|
|---|
| 152 | transport_organizer_id INT,
|
|---|
| 153 | CONSTRAINT driver_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE,
|
|---|
| 154 | CONSTRAINT driver_transport_organizer_id_fkey FOREIGN KEY (transport_organizer_id) REFERENCES transport_organizer(transport_organizer_id) ON DELETE CASCADE
|
|---|
| 155 | );
|
|---|
| 156 |
|
|---|
| 157 | CREATE TABLE driver_vehicle_operation (
|
|---|
| 158 | driver_vehicle_operation_id SERIAL PRIMARY KEY,
|
|---|
| 159 | driver_id INT NOT NULL,
|
|---|
| 160 | vehicle_id INT NOT NULL,
|
|---|
| 161 | CONSTRAINT driver_vehicle_operation_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES driver(driver_id) ON DELETE CASCADE,
|
|---|
| 162 | CONSTRAINT driver_vehicle_operation_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicle(vehicle_id) ON DELETE CASCADE
|
|---|
| 163 | );
|
|---|
| 164 |
|
|---|
| 165 | CREATE TABLE driver_drives_on_trip (
|
|---|
| 166 | driver_drives_on_trip_id SERIAL PRIMARY KEY,
|
|---|
| 167 | driver_id INT NOT NULL,
|
|---|
| 168 | trip_id INT NOT NULL,
|
|---|
| 169 | CONSTRAINT driver_drives_on_trip_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES driver(driver_id) ON DELETE CASCADE,
|
|---|
| 170 | CONSTRAINT driver_drives_on_trip_trip_id_fkey FOREIGN KEY (trip_id) REFERENCES trip(trip_id) ON DELETE CASCADE
|
|---|
| 171 | );
|
|---|
| 172 |
|
|---|
| 173 | CREATE TABLE favorite (
|
|---|
| 174 | favorite_id SERIAL PRIMARY KEY,
|
|---|
| 175 | route_id INT NOT NULL,
|
|---|
| 176 | account_id INT NOT NULL,
|
|---|
| 177 | CONSTRAINT favorite_route_id_fkey FOREIGN KEY (route_id) REFERENCES route(route_id) ON DELETE CASCADE,
|
|---|
| 178 | CONSTRAINT favorite_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE
|
|---|
| 179 | );
|
|---|
| 180 |
|
|---|
| 181 | CREATE TABLE trip_days_active (
|
|---|
| 182 | trip_days_active_id SERIAL PRIMARY KEY,
|
|---|
| 183 | route_id INT NOT NULL,
|
|---|
| 184 | day VARCHAR(20) NOT NULL,
|
|---|
| 185 | CONSTRAINT trip_days_active_route_id_fkey FOREIGN KEY (route_id) REFERENCES route(route_id) ON DELETE CASCADE
|
|---|
| 186 | );
|
|---|
| 187 |
|
|---|
| 188 | CREATE TABLE trip_stops (
|
|---|
| 189 | trip_stop_id SERIAL PRIMARY KEY,
|
|---|
| 190 | trip_id INT NOT NULL,
|
|---|
| 191 | location_id INT NOT NULL,
|
|---|
| 192 | stop_time TIME WITHOUT TIME ZONE NOT NULL,
|
|---|
| 193 | CONSTRAINT trip_stops_trip_id_fkey FOREIGN KEY (trip_id) REFERENCES trip(trip_id) ON DELETE CASCADE,
|
|---|
| 194 | CONSTRAINT trip_stops_location_id_fkey FOREIGN KEY (location_id) REFERENCES location(location_id) ON DELETE CASCADE
|
|---|
| 195 | );
|
|---|
| 196 |
|
|---|
| 197 | CREATE TABLE student (
|
|---|
| 198 | student_id SERIAL PRIMARY KEY,
|
|---|
| 199 | account_id INT NOT NULL,
|
|---|
| 200 | university VARCHAR(100) NOT NULL,
|
|---|
| 201 | index_number VARCHAR(20) NOT NULL,
|
|---|
| 202 | CONSTRAINT student_account_id_fkey FOREIGN KEY (account_id) REFERENCES account(account_id) ON DELETE CASCADE
|
|---|
| 203 | );
|
|---|
| 204 |
|
|---|
| 205 | CREATE TABLE student_ticket (
|
|---|
| 206 | student_ticket_id SERIAL PRIMARY KEY,
|
|---|
| 207 | ticket_id INT NOT NULL,
|
|---|
| 208 | discount DOUBLE PRECISION,
|
|---|
| 209 | CONSTRAINT student_ticket_ticket_id_fkey FOREIGN KEY (ticket_id) REFERENCES ticket(ticket_id) ON DELETE CASCADE
|
|---|
| 210 | );
|
|---|
| 211 |
|
|---|
| 212 | CREATE TABLE child_ticket (
|
|---|
| 213 | child_ticket_id SERIAL PRIMARY KEY,
|
|---|
| 214 | ticket_id INT NOT NULL,
|
|---|
| 215 | discount DOUBLE PRECISION,
|
|---|
| 216 | embg VARCHAR(13) NOT NULL,
|
|---|
| 217 | parent_embg VARCHAR(13) NOT NULL,
|
|---|
| 218 | CONSTRAINT child_ticket_ticket_id_fkey FOREIGN KEY (ticket_id) REFERENCES ticket(ticket_id) ON DELETE CASCADE
|
|---|
| 219 | );
|
|---|
| 220 |
|
|---|
| 221 | CREATE TABLE ticket_relations (
|
|---|
| 222 | ticket_relation_id SERIAL PRIMARY KEY,
|
|---|
| 223 | parent_ticket_id INT NOT NULL,
|
|---|
| 224 | child_ticket_id INT NOT NULL,
|
|---|
| 225 | CONSTRAINT ticket_relations_parent_ticket_id_fkey FOREIGN KEY (parent_ticket_id) REFERENCES ticket(ticket_id) ON DELETE CASCADE,
|
|---|
| 226 | CONSTRAINT ticket_relations_child_ticket_id_fkey FOREIGN KEY (child_ticket_id) REFERENCES ticket(ticket_id) ON DELETE CASCADE
|
|---|
| 227 | );
|
|---|
| 228 | INSERT INTO account values(100, 'duko@outlook.com', 'David', 'Davidov', '$2a$12$pr3az9qix0CnAsX84C2clu9cG9JDlfqfK.sMqaFhPYR7D5fiz8BjO'); -- pw: d
|
|---|
| 229 | INSERT INTO account values(200, 'kiko@outlook.com', 'Kiko', 'Kikoski', '$2a$12$KCpRdwqqm2S0BX8fHjzCBO570ivpoJZ6tuIc1W6gwSpzObvxykZ8y'); -- pw: k
|
|---|
| 230 | INSERT INTO account values(300, 'jama@outlook.com', 'Jana', 'Janoska', '$2a$12$XO94fugzv1B9T.IjEbFSWu4WyCDFTdMM9Vg4Xli7DWiDH1LGwgj7G'); -- pw: j
|
|---|
| 231 | INSERT INTO account values(400, 'verche@outlook.com', 'Verche', 'Verchoska', '$2a$12$XO94fugzv1B9T.IjEbFSWu4WyCDFTdMM9Vg4Xli7DWiDH1LGwgj7G'); -- pw: v
|
|---|
| 232 |
|
|---|
| 233 |
|
|---|
| 234 | INSERT INTO transport_organizer values(100, 100, 'Galeb', '1234512345123');
|
|---|
| 235 | INSERT INTO transport_organizer values(200, 200, 'Delfina', '1234512345124');
|
|---|
| 236 | INSERT INTO transport_organizer values(300, 300, 'Classic', '123453245124');
|
|---|
| 237 |
|
|---|
| 238 |
|
|---|
| 239 | INSERT INTO location values(100, 3.2, 1.3, 'Ohrid');
|
|---|
| 240 | INSERT INTO location values(200, 3.6, 1.4, 'Bitola');
|
|---|
| 241 | INSERT INTO location values(300, 1.1, 4.5, 'Skopje');
|
|---|
| 242 | INSERT INTO location values(400, 1.2, 4.8, 'Veles');
|
|---|
| 243 | INSERT INTO location values(500, 1.3, 4.2, 'Prilep');
|
|---|
| 244 | INSERT INTO location values(600, 1.5, 4.5, 'Vevcani');
|
|---|
| 245 |
|
|---|
| 246 |
|
|---|
| 247 |
|
|---|
| 248 | INSERT INTO route values(100, 100, 100, 300);
|
|---|
| 249 | INSERT INTO route values(200, 200, 100, 200);
|
|---|
| 250 | INSERT INTO route values(300, 200, 200, 300);
|
|---|
| 251 | INSERT INTO route values(400, 200, 300, 200);
|
|---|
| 252 | INSERT INTO route values(500, 200, 300, 100);
|
|---|
| 253 | INSERT INTO route values(600, 100, 300, 100);
|
|---|
| 254 | INSERT INTO route values(700, 300, 300, 100);
|
|---|
| 255 |
|
|---|
| 256 |
|
|---|
| 257 | INSERT INTO trip values(400, 100, 100, 33, '12-02-2025', 'NOT_STARTED');
|
|---|
| 258 | INSERT INTO trip values(500, 200, 100, 40, '02-03-2025', 'NOT_STARTED');
|
|---|
| 259 | INSERT INTO trip values(600, 200, 300, 6, '02-05-2025', 'NOT_STARTED');
|
|---|
| 260 | INSERT INTO trip values(700, 100, 300, 13, '12-01-2025', 'NOT_STARTED');
|
|---|
| 261 | INSERT INTO trip values(800, 200, 300, 50, '02-9-2025', 'NOT_STARTED');
|
|---|
| 262 | INSERT INTO trip values(900, 200, 300, 6, '02-10-2025', 'NOT_STARTED');
|
|---|
| 263 |
|
|---|
| 264 | INSERT INTO trip_stops values(300, 400, 300, '19:00');
|
|---|
| 265 | INSERT INTO trip_stops values(400, 400, 100, '20:00');
|
|---|
| 266 | INSERT INTO trip_stops values(500, 500, 200, '15:30');
|
|---|
| 267 | INSERT INTO trip_stops values(600, 500, 100, '16:45');
|
|---|
| 268 | INSERT INTO trip_stops values(700, 600, 600, '09:10');
|
|---|
| 269 | INSERT INTO trip_stops values(800, 600, 200, '12:30');
|
|---|
| 270 | INSERT INTO trip_stops values(900, 700, 400, '19:00');
|
|---|
| 271 | INSERT INTO trip_stops values(1000, 700, 600, '22:30');
|
|---|
| 272 | INSERT INTO trip_stops values(1100, 800, 500, '11:10');
|
|---|
| 273 | INSERT INTO trip_stops values(1200, 800, 200, '12:30');
|
|---|
| 274 | INSERT INTO trip_stops values(1300, 800, 100, '01:10');
|
|---|
| 275 | INSERT INTO trip_stops values(1499, 800, 200, '02:00');
|
|---|
| 276 |
|
|---|
| 277 |
|
|---|
| 278 | INSERT INTO payment values(100, 300, '02-02-2025', 20.98, 2);
|
|---|
| 279 | INSERT INTO payment values(200, 300, '03-02-2025', 9.99, 1);
|
|---|
| 280 |
|
|---|
| 281 | INSERT INTO ticket values(100, 400, 100, 300, 300, '02-02-2025', '10:03', 10.99, '3', 100);
|
|---|
| 282 | INSERT INTO ticket values(200, 400, 100, 300, 300, '02-02-2025', '10:04', 10.99, '4', 100);
|
|---|
| 283 | INSERT INTO ticket values(300, 600, 100, 300, 300, '03-02-2025', '09:32', 9.99, '30', 200); |
|---|