RelationalSchema: RouteMK.sql

File RouteMK.sql, 12.1 KB (added by 222077, 2 days ago)
Line 
1DROP TABLE IF EXISTS child_ticket CASCADE;
2DROP TABLE IF EXISTS ticket_relations CASCADE;
3DROP TABLE IF EXISTS ticket CASCADE;
4DROP TABLE IF EXISTS payment CASCADE;
5DROP TABLE IF EXISTS review CASCADE;
6DROP TABLE IF EXISTS student_ticket CASCADE;
7DROP TABLE IF EXISTS student CASCADE;
8DROP TABLE IF EXISTS trip_stops CASCADE;
9DROP TABLE IF EXISTS trip_days_active CASCADE;
10DROP TABLE IF EXISTS trip CASCADE;
11DROP TABLE IF EXISTS route CASCADE;
12DROP TABLE IF EXISTS favorite CASCADE;
13DROP TABLE IF EXISTS driver_drives_on_trip CASCADE;
14DROP TABLE IF EXISTS driver_vehicle_operation CASCADE;
15DROP TABLE IF EXISTS driver CASCADE;
16DROP TABLE IF EXISTS transport_organizer CASCADE;
17DROP TABLE IF EXISTS admin CASCADE;
18DROP TABLE IF EXISTS account CASCADE;
19DROP TABLE IF EXISTS location CASCADE;
20DROP TABLE IF EXISTS train CASCADE;
21DROP TABLE IF EXISTS van CASCADE;
22DROP TABLE IF EXISTS bus CASCADE;
23DROP TABLE IF EXISTS automobile CASCADE;
24DROP TABLE IF EXISTS vehicle CASCADE;
25
26CREATE 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
34CREATE 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
40CREATE 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
49CREATE 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
56CREATE 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
73CREATE 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
84CREATE 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
92CREATE 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
103CREATE 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
109CREATE 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
115CREATE 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
121CREATE 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
127CREATE 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
137CREATE 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
148CREATE 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
157CREATE 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
165CREATE 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
173CREATE 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
181CREATE 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
188CREATE 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
197CREATE 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
205CREATE 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
212CREATE 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
221CREATE 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);
228INSERT INTO account values(100, 'duko@outlook.com', 'David', 'Davidov', '$2a$12$pr3az9qix0CnAsX84C2clu9cG9JDlfqfK.sMqaFhPYR7D5fiz8BjO'); -- pw: d
229INSERT INTO account values(200, 'kiko@outlook.com', 'Kiko', 'Kikoski', '$2a$12$KCpRdwqqm2S0BX8fHjzCBO570ivpoJZ6tuIc1W6gwSpzObvxykZ8y'); -- pw: k
230INSERT INTO account values(300, 'jama@outlook.com', 'Jana', 'Janoska', '$2a$12$XO94fugzv1B9T.IjEbFSWu4WyCDFTdMM9Vg4Xli7DWiDH1LGwgj7G'); -- pw: j
231INSERT INTO account values(400, 'verche@outlook.com', 'Verche', 'Verchoska', '$2a$12$XO94fugzv1B9T.IjEbFSWu4WyCDFTdMM9Vg4Xli7DWiDH1LGwgj7G'); -- pw: v
232
233
234INSERT INTO transport_organizer values(100, 100, 'Galeb', '1234512345123');
235INSERT INTO transport_organizer values(200, 200, 'Delfina', '1234512345124');
236INSERT INTO transport_organizer values(300, 300, 'Classic', '123453245124');
237
238
239INSERT INTO location values(100, 3.2, 1.3, 'Ohrid');
240INSERT INTO location values(200, 3.6, 1.4, 'Bitola');
241INSERT INTO location values(300, 1.1, 4.5, 'Skopje');
242INSERT INTO location values(400, 1.2, 4.8, 'Veles');
243INSERT INTO location values(500, 1.3, 4.2, 'Prilep');
244INSERT INTO location values(600, 1.5, 4.5, 'Vevcani');
245
246
247
248INSERT INTO route values(100, 100, 100, 300);
249INSERT INTO route values(200, 200, 100, 200);
250INSERT INTO route values(300, 200, 200, 300);
251INSERT INTO route values(400, 200, 300, 200);
252INSERT INTO route values(500, 200, 300, 100);
253INSERT INTO route values(600, 100, 300, 100);
254INSERT INTO route values(700, 300, 300, 100);
255
256
257INSERT INTO trip values(400, 100, 100, 33, '12-02-2025', 'NOT_STARTED');
258INSERT INTO trip values(500, 200, 100, 40, '02-03-2025', 'NOT_STARTED');
259INSERT INTO trip values(600, 200, 300, 6, '02-05-2025', 'NOT_STARTED');
260INSERT INTO trip values(700, 100, 300, 13, '12-01-2025', 'NOT_STARTED');
261INSERT INTO trip values(800, 200, 300, 50, '02-9-2025', 'NOT_STARTED');
262INSERT INTO trip values(900, 200, 300, 6, '02-10-2025', 'NOT_STARTED');
263
264INSERT INTO trip_stops values(300, 400, 300, '19:00');
265INSERT INTO trip_stops values(400, 400, 100, '20:00');
266INSERT INTO trip_stops values(500, 500, 200, '15:30');
267INSERT INTO trip_stops values(600, 500, 100, '16:45');
268INSERT INTO trip_stops values(700, 600, 600, '09:10');
269INSERT INTO trip_stops values(800, 600, 200, '12:30');
270INSERT INTO trip_stops values(900, 700, 400, '19:00');
271INSERT INTO trip_stops values(1000, 700, 600, '22:30');
272INSERT INTO trip_stops values(1100, 800, 500, '11:10');
273INSERT INTO trip_stops values(1200, 800, 200, '12:30');
274INSERT INTO trip_stops values(1300, 800, 100, '01:10');
275INSERT INTO trip_stops values(1499, 800, 200, '02:00');
276
277
278INSERT INTO payment values(100, 300, '02-02-2025', 20.98, 2);
279INSERT INTO payment values(200, 300, '03-02-2025', 9.99, 1);
280
281INSERT INTO ticket values(100, 400, 100, 300, 300, '02-02-2025', '10:03', 10.99, '3', 100);
282INSERT INTO ticket values(200, 400, 100, 300, 300, '02-02-2025', '10:04', 10.99, '4', 100);
283INSERT INTO ticket values(300, 600, 100, 300, 300, '03-02-2025', '09:32', 9.99, '30', 200);