DatabaseCreation: DDL.sql

File DDL.sql, 10.4 KB (added by 231061, 6 days ago)
Line 
1
2INSERT INTO COUNTRY (name, currency)
3VALUES
4('Germany', 'EUR'),
5('France', 'EUR'),
6('Italy', 'EUR'),
7('Spain', 'EUR'),
8('Netherlands', 'EUR'),
9('Portugal', 'EUR'),
10('Greece', 'EUR'),
11('Austria', 'EUR'),
12('Belgium', 'EUR'),
13('United Kingdom', 'GBP'),
14('Switzerland', 'CHF'),
15('Sweden', 'SEK'),
16('Norway', 'NOK'),
17('Denmark', 'DKK'),
18('Poland', 'PLN'),
19('Czech Republic', 'CZK'),
20('Hungary', 'HUF');
21
22
23
24INSERT INTO CITY (country_id, name)
25SELECT
26 (RANDOM()*4 + 1)::INT,
27 'City_' || g
28FROM generate_series(1,500) g;
29
30
31
32INSERT INTO CATEGORY (parent_id, name)
33SELECT
34 CASE WHEN g % 5 = 0 THEN NULL ELSE (RANDOM()*99 + 1)::INT END,
35 'Category_' || g
36FROM generate_series(1,100) g;
37
38
39
40INSERT INTO APP_USER (email, username, first_name, last_name, num_trip_members)
41SELECT
42 'user' || g || '@mail.com',
43 'user_' || g,
44 'Name_' || g,
45 'Surname_' || g,
46 (RANDOM()*5)::INT
47FROM generate_series(1, 500000) g;
48
49
50
51INSERT INTO PLACE (city_id, category_id, name, description, address, latitude, longitude, avg_price, rating)
52SELECT
53 (RANDOM()*499 + 1)::INT,
54 (RANDOM()*99 + 1)::INT,
55 'Place_' || g,
56 'Nice place ' || g,
57 'Street ' || g,
58 (RANDOM()*180 - 90),
59 (RANDOM()*360 - 180),
60 (RANDOM()*100)::DECIMAL(10,2),
61 (RANDOM()*5)::DECIMAL(3,2)
62FROM generate_series(1,1000000) g;
63
64
65
66
67INSERT INTO OPENING_HOURS (place_id, day_of_week, open_time, close_time, is_closed)
68SELECT
69 p.place_id,
70 CASE (RANDOM()*6)::INT
71 WHEN 0 THEN 'Monday'
72 WHEN 1 THEN 'Tuesday'
73 WHEN 2 THEN 'Wednesday'
74 WHEN 3 THEN 'Thursday'
75 WHEN 4 THEN 'Friday'
76 WHEN 5 THEN 'Saturday'
77 ELSE 'Sunday'
78 END,
79 (TIME '06:00:00' + (RANDOM()*6)::INT * INTERVAL '1 hour'),
80 (TIME '14:00:00' + (RANDOM()*8)::INT * INTERVAL '1 hour'),
81 (RANDOM() < 0.05)
82FROM generate_series(1,1000000) g
83CROSS JOIN LATERAL (
84 SELECT place_id
85 FROM PLACE
86 ORDER BY RANDOM() + (g * 0)
87 LIMIT 1
88) p;
89
90
91
92
93INSERT INTO TRANSPORT_MODE (name, estimated_cost, avg_speed_kmh)
94VALUES
95('Bus', 1.5, 45),
96('Train', 2.15, 50),
97('Bicycle', 10.00, 20),
98('Walking', 0.00, 5),
99('Taxi', 20.0, 50),
100('Metro', 2.5, 40);
101
102
103
104INSERT INTO TRIP_STATUS (user_id, status_name, status_comment, updated_at)
105SELECT
106 u.user_id,
107 CASE
108 WHEN RANDOM() < 0.6 THEN 'completed'::trip_status_name
109 WHEN RANDOM() < 0.3 THEN 'in_progress'::trip_status_name
110 ELSE 'cancelled'::trip_status_name
111 END,
112 CASE
113 WHEN RANDOM() < 0.5 THEN 'Trip updated successfully'
114 END,
115 NOW() - (RANDOM()*365 || ' days')::INTERVAL
116FROM generate_series(1,1000000) g
117CROSS JOIN LATERAL (
118 SELECT user_id
119 FROM APP_USER
120 ORDER BY RANDOM() + (g * 0)
121 LIMIT 1
122) u;
123
124
125
126
127INSERT INTO TRIP_HISTORY (user_id, total_spent, notes, completed_at)
128SELECT
129 u.user_id,
130 (RANDOM()*10000)::DECIMAL(10,2),
131 'History_' || g,
132 NOW() - (RANDOM()*1000 || ' days')::INTERVAL
133FROM generate_series(1,10000000) g
134CROSS JOIN LATERAL (
135 SELECT user_id
136 FROM APP_USER
137 ORDER BY RANDOM() + (g * 0)
138 LIMIT 1
139) u;
140
141
142
143
144INSERT INTO TRIP (user_id, city_id, status_id, history_id, title, start_date, end_date, total_budget, estimated_cost)
145SELECT
146 u.user_id,
147 c.city_id,
148 (
149 SELECT status_id
150 FROM TRIP_STATUS
151 ORDER BY RANDOM() + (g * 0)
152 LIMIT 1
153 ),
154 (
155 SELECT history_id
156 FROM TRIP_HISTORY
157 ORDER BY RANDOM() + (g * 0)
158 LIMIT 1
159 ),
160 'Trip_' || g,
161 CURRENT_DATE - (RANDOM()*365)::INT,
162 CURRENT_DATE + (RANDOM()*365)::INT,
163 b.total_budget,
164 LEAST(
165 b.total_budget - 0.01,
166 ROUND((b.total_budget * (0.5 + RANDOM() * 0.45))::NUMERIC, 2)
167 )
168--ova pod treba
169FROM generate_series(1,2500000) g
170CROSS JOIN LATERAL (
171 SELECT user_id
172 FROM APP_USER
173 ORDER BY RANDOM() + (g * 0)
174 LIMIT 1
175) u
176CROSS JOIN LATERAL (
177 SELECT city_id
178 FROM CITY
179 ORDER BY RANDOM() + (g * 0)
180 LIMIT 1
181) c
182CROSS JOIN LATERAL (
183 SELECT ROUND((RANDOM()*5000 + 500)::NUMERIC, 2) AS total_budget
184) b;
185
186
187
188
189INSERT INTO TRIP_MEMBER (user_id, trip_id, first_name, last_name, username, role)
190SELECT
191 u.user_id,
192 t.trip_id,
193 'Name_' || g,
194 'Surname_' || g,
195 'member_' || g,
196 CASE WHEN RANDOM() > 0.7 THEN 'owner'::user_role ELSE 'member'::user_role END
197FROM generate_series(1,10000000) g
198CROSS JOIN LATERAL (
199 SELECT user_id
200 FROM APP_USER
201 ORDER BY RANDOM() + (g * 0)
202 LIMIT 1
203) u
204CROSS JOIN LATERAL (
205 SELECT trip_id
206 FROM TRIP
207 ORDER BY RANDOM() + (g * 0)
208 LIMIT 1
209) t;
210
211
212
213
214INSERT INTO TRIP_DAY (trip_id, day_number, actual_date)
215SELECT
216 t.trip_id,
217 (RANDOM()*14 + 1)::INT,
218 CURRENT_DATE + (RANDOM()*365)::INT
219FROM generate_series(1,1000000) g
220CROSS JOIN LATERAL (
221 SELECT trip_id
222 FROM TRIP
223 ORDER BY RANDOM() + (g * 0)
224 LIMIT 1
225) t;
226
227
228
229
230INSERT INTO SCHEDULE_TIME (scheduled_start_time, scheduled_end_time)
231SELECT
232 (TIME '06:00:00' + (RANDOM()*12)::INT * INTERVAL '1 hour'),
233 (TIME '12:00:00' + (RANDOM()*10)::INT * INTERVAL '1 hour')
234FROM generate_series(1,500) g;
235
236
237INSERT INTO PLAN_ITEM (trip_day_id, place_id, schedule_time_id, estimated_cost, notes)
238SELECT
239 td.trip_day_id,
240 p.place_id,
241 s.schedule_time_id,
242 (RANDOM()*200)::DECIMAL(10,2),
243 'Plan note ' || g
244FROM generate_series(1,1000000) g
245CROSS JOIN LATERAL (
246 SELECT trip_day_id
247 FROM TRIP_DAY
248 ORDER BY RANDOM() + (g * 0)
249 LIMIT 1
250) td
251CROSS JOIN LATERAL (
252 SELECT place_id
253 FROM PLACE
254 ORDER BY RANDOM() + (g * 0)
255 LIMIT 1
256) p
257CROSS JOIN LATERAL (
258 SELECT schedule_time_id
259 FROM SCHEDULE_TIME
260 ORDER BY RANDOM() + (g * 0)
261 LIMIT 1
262) s;
263
264
265
266
267INSERT INTO DISTANCE_SEGMENT (trip_id, predecessor_item_id, successor_item_id, transport_mode_id, distance_km, duration_minutes)
268SELECT
269 t.trip_id,
270 pi1.plan_item_id,
271 pi2.plan_item_id,
272 tm.transport_mode_id,
273 ROUND((RANDOM()*200 + 1)::NUMERIC, 3),
274 (RANDOM()*240 + 10)::INT
275FROM generate_series(1,1000000) g
276CROSS JOIN LATERAL (
277 SELECT trip_id
278 FROM TRIP
279 ORDER BY RANDOM() + (g * 0)
280 LIMIT 1
281) t
282CROSS JOIN LATERAL (
283 SELECT plan_item_id
284 FROM PLAN_ITEM
285 ORDER BY RANDOM() + (g * 0)
286 LIMIT 1
287) pi1
288CROSS JOIN LATERAL (
289 SELECT plan_item_id
290 FROM PLAN_ITEM
291 ORDER BY RANDOM() + (g * 0)
292 LIMIT 1
293) pi2
294CROSS JOIN LATERAL (
295 SELECT transport_mode_id
296 FROM TRANSPORT_MODE
297 ORDER BY RANDOM() + (g * 0)
298 LIMIT 1
299) tm
300WHERE RANDOM() > 0.1;
301
302
303
304
305INSERT INTO ACCOMODATION (trip_id, place_id)
306SELECT
307 t.trip_id,
308 p.place_id
309FROM generate_series(1,1000000) g
310CROSS JOIN LATERAL (
311 SELECT trip_id
312 FROM TRIP
313 ORDER BY RANDOM() + (g * 0)
314 LIMIT 1
315) t
316CROSS JOIN LATERAL (
317 SELECT place_id
318 FROM PLACE
319 ORDER BY RANDOM() + (g * 0)
320 LIMIT 1
321) p;
322
323
324
325
326INSERT INTO REVIEW (user_id, plan_item_id, rating, comment, visited_at, created_at)
327SELECT
328 u.user_id,
329 pi.plan_item_id,
330 (RANDOM()*5)::DECIMAL(3,2),
331 'Review ' || g,
332 NOW(),
333 NOW()
334FROM generate_series(1,500000) g
335CROSS JOIN LATERAL (
336 SELECT user_id
337 FROM APP_USER
338 ORDER BY RANDOM() + (g * 0)
339 LIMIT 1
340) u
341CROSS JOIN LATERAL (
342 SELECT plan_item_id
343 FROM PLAN_ITEM
344 ORDER BY RANDOM() + (g * 0)
345 LIMIT 1
346) pi;
347
348
349
350
351INSERT INTO FAVOURITES (user_id, place_id)
352SELECT
353 u.user_id,
354 p.place_id
355FROM generate_series(1,1000000) g
356CROSS JOIN LATERAL (
357 SELECT user_id
358 FROM APP_USER
359 ORDER BY RANDOM() + (g * 0)
360 LIMIT 1
361) u
362CROSS JOIN LATERAL (
363 SELECT place_id
364 FROM PLACE
365 ORDER BY RANDOM() + (g * 0)
366 LIMIT 1
367) p
368ON CONFLICT DO NOTHING;
369
370
371
372
373INSERT INTO CHECKLIST (user_id, trip_id, title)
374SELECT
375 u.user_id,
376 t.trip_id,
377 'Checklist_' || g
378FROM generate_series(1,500000) g
379CROSS JOIN LATERAL (
380 SELECT user_id
381 FROM APP_USER
382 ORDER BY RANDOM() + (g * 0)
383 LIMIT 1
384) u
385CROSS JOIN LATERAL (
386 SELECT trip_id
387 FROM TRIP
388 ORDER BY RANDOM() + (g * 0)
389 LIMIT 1
390) t;
391
392
393
394
395INSERT INTO CHECKLIST_ITEM (checklist_id, item_id, description, is_checked)
396SELECT
397 c.item_id,
398 g,
399 CASE (RANDOM()*5)::INT
400 WHEN 0 THEN 'Passport'
401 WHEN 1 THEN 'Tickets'
402 WHEN 2 THEN 'Hotel reservation'
403 WHEN 3 THEN 'Insurance'
404 WHEN 4 THEN 'Clothes'
405 ELSE 'Other item'
406 END,
407 (RANDOM() < 0.3)
408FROM generate_series(1,1000000) g
409CROSS JOIN LATERAL (
410 SELECT item_id
411 FROM CHECKLIST
412 ORDER BY RANDOM() + (g * 0)
413 LIMIT 1
414) c;
415
416
417
418
419INSERT INTO GROUP_CHAT (message_text, sent_at)
420SELECT
421 'Message ' || g,
422 NOW() - (RANDOM()*10000 || ' seconds')::INTERVAL
423FROM generate_series(1,10000000) g;
424
425
426
427
428INSERT INTO GROUP_CHAT_TRIP_MEMBER (group_id, trip_member_id)
429SELECT
430 gc.group_id,
431 tm.trip_member_id
432FROM generate_series(1,1000000) g
433CROSS JOIN LATERAL (
434 SELECT group_id
435 FROM GROUP_CHAT
436 ORDER BY RANDOM() + (g * 0)
437 LIMIT 1
438) gc
439CROSS JOIN LATERAL (
440 SELECT trip_member_id
441 FROM TRIP_MEMBER
442 ORDER BY RANDOM() + (g * 0)
443 LIMIT 1
444) tm
445ON CONFLICT DO NOTHING;
446
447
448
449
450INSERT INTO NOTIFICATION (group_id, trip_member_id, is_read)
451SELECT
452 gc.group_id,
453 tm.trip_member_id,
454 (RANDOM() > 0.5)
455FROM generate_series(1,10000000) g
456CROSS JOIN LATERAL (
457 SELECT group_id
458 FROM GROUP_CHAT
459 ORDER BY RANDOM() + (g * 0)
460 LIMIT 1
461) gc
462CROSS JOIN LATERAL (
463 SELECT trip_member_id
464 FROM TRIP_MEMBER
465 ORDER BY RANDOM() + (g * 0)
466 LIMIT 1
467) tm;
468
469
470
471
472UPDATE TRIP t
473SET
474 estimated_cost = calc.new_estimated_cost,
475 total_budget = calc.new_estimated_cost + ROUND((RANDOM() * 500 + 100)::NUMERIC, 2)
476FROM (
477 SELECT
478 t2.trip_id,
479 COALESCE(
480 (SELECT SUM(pi.estimated_cost)
481 FROM PLAN_ITEM pi
482 JOIN TRIP_DAY td ON pi.trip_day_id = td.trip_day_id
483 WHERE td.trip_id = t2.trip_id), 0)
484 + COALESCE(
485 (SELECT SUM(ds.distance_km * tm.estimated_cost)
486 FROM DISTANCE_SEGMENT ds
487 JOIN TRANSPORT_MODE tm ON ds.transport_mode_id = tm.transport_mode_id
488 WHERE ds.trip_id = t2.trip_id), 0)
489 AS new_estimated_cost
490 FROM TRIP t2
491) calc
492WHERE t.trip_id = calc.trip_id;