DatabaseCreation: DML.sql

File DML.sql, 7.4 KB (added by 231061, 6 days ago)
Line 
1
2-- Прво ги бришеме старите погледи за да нема конфликт
3DROP VIEW IF EXISTS v_notifications CASCADE;
4DROP VIEW IF EXISTS v_user_favourites CASCADE;
5DROP VIEW IF EXISTS v_reviews CASCADE;
6DROP VIEW IF EXISTS trip_transport_view CASCADE;
7DROP VIEW IF EXISTS v_trip_cost CASCADE;
8DROP VIEW IF EXISTS v_trip_members_full CASCADE;
9DROP VIEW IF EXISTS user_profile_overview CASCADE;
10DROP VIEW IF EXISTS v_trip_itinerary_byDay CASCADE;
11DROP VIEW IF EXISTS v_trip_overview CASCADE;
12DROP VIEW IF EXISTS v_category_tree CASCADE;
13DROP VIEW IF EXISTS popular_places_view_by_reviews CASCADE;
14DROP VIEW IF EXISTS v_place_details CASCADE;
15
16---
17
18-- 1. v_place_details
19CREATE OR REPLACE VIEW v_place_details AS
20SELECT
21 p.place_id,
22 p.name,
23 p.rating,
24 p.avg_price,
25 ci.name AS city,
26 co.name AS country,
27 c.name AS category
28FROM PLACE p
29JOIN CITY ci ON p.city_id = ci.city_id
30JOIN COUNTRY co ON ci.country_id = co.county_id -- Поправено: референца кон county_id
31JOIN CATEGORY c ON p.category_id = c.category_id;
32
33-- 2. v_trip_overview
34CREATE OR REPLACE VIEW v_trip_overview AS
35SELECT
36 t.trip_id,
37 t.title,
38 u.username,
39 ci.name AS city,
40 co.name AS country,
41 t.start_date,
42 t.end_date,
43 t.total_budget,
44 t.estimated_cost,
45 ts.status_name
46FROM TRIP t
47JOIN APP_USER u ON t.user_id = u.user_id
48JOIN CITY ci ON t.city_id = ci.city_id
49JOIN COUNTRY co ON ci.country_id = co.county_id -- Поправено: референца кон county_id
50LEFT JOIN TRIP_STATUS ts ON t.status_id = ts.status_id;
51
52-- 3. popular_places_view_by_reviews
53CREATE OR REPLACE VIEW popular_places_view_by_reviews AS
54SELECT
55 p.place_id,
56 p.name,
57 COUNT(r.review_id) AS total_reviews
58FROM PLACE p
59LEFT JOIN PLAN_ITEM pi ON p.place_id = pi.place_id
60LEFT JOIN REVIEW r ON pi.plan_item_id = r.plan_item_id
61GROUP BY p.place_id, p.name;
62
63-- 4. v_category_tree
64CREATE OR REPLACE VIEW v_category_tree AS
65SELECT
66 c1.category_id,
67 c1.name AS category,
68 c2.name AS parent_category
69FROM CATEGORY c1
70LEFT JOIN CATEGORY c2 ON c1.parent_id = c2.category_id;
71
72-- 5. v_trip_itinerary_byDay
73CREATE OR REPLACE VIEW v_trip_itinerary_byDay AS
74SELECT
75 t.trip_id,
76 td.day_number,
77 td.actual_date,
78 p.name AS place,
79 pi.estimated_cost,
80 st.scheduled_start_time,
81 st.scheduled_end_time
82FROM TRIP_DAY td
83JOIN TRIP t ON td.trip_id = t.trip_id
84JOIN PLAN_ITEM pi ON pi.trip_day_id = td.trip_day_id
85JOIN PLACE p ON pi.place_id = p.place_id
86LEFT JOIN SCHEDULE_TIME st ON pi.schedule_time_id = st.schedule_time_id;
87
88-- 6. user_profile_overview
89CREATE OR REPLACE VIEW user_profile_overview AS
90SELECT
91 u.user_id,
92 u.username,
93 u.first_name,
94 u.last_name,
95 COUNT(t.trip_id) AS total_trips
96FROM APP_USER u
97LEFT JOIN TRIP t ON u.user_id = t.user_id
98GROUP BY u.user_id, u.username, u.first_name, u.last_name;
99
100-- 7. v_trip_members_full
101CREATE OR REPLACE VIEW v_trip_members_full AS
102SELECT
103 tm.trip_id,
104 tm.username,
105 tm.first_name,
106 tm.last_name,
107 tm.role
108FROM TRIP_MEMBER tm;
109
110-- 8. v_trip_cost
111CREATE OR REPLACE VIEW v_trip_cost AS
112SELECT
113 t.trip_id,
114 t.title,
115 t.total_budget,
116 t.estimated_cost,
117 (t.total_budget - t.estimated_cost) AS remaining_budget
118FROM TRIP t;
119
120-- 9. trip_transport_view
121CREATE OR REPLACE VIEW trip_transport_view AS
122SELECT
123 t.trip_id,
124 tm.name AS transport_mode,
125 ds.distance_km,
126 ds.duration_minutes
127FROM TRIP t
128JOIN DISTANCE_SEGMENT ds ON t.trip_id = ds.trip_id
129JOIN TRANSPORT_MODE tm ON ds.transport_mode_id = tm.transport_mode_id;
130
131-- 10. v_reviews
132CREATE OR REPLACE VIEW v_reviews AS
133SELECT
134 r.review_id,
135 u.username,
136 p.name AS place,
137 r.rating,
138 r.comment,
139 r.visited_at
140FROM REVIEW r
141LEFT JOIN APP_USER u ON r.user_id = u.user_id
142LEFT JOIN PLAN_ITEM pi ON r.plan_item_id = pi.plan_item_id
143LEFT JOIN PLACE p ON pi.place_id = p.place_id;
144
145-- 11. v_user_favourites
146CREATE OR REPLACE VIEW v_user_favourites AS
147SELECT
148 f.user_id,
149 u.username,
150 p.place_id,
151 p.name AS place_name,
152 p.rating
153FROM FAVOURITES f
154JOIN APP_USER u ON f.user_id = u.user_id
155JOIN PLACE p ON f.place_id = p.place_id;
156
157-- 12. v_notifications
158CREATE OR REPLACE VIEW v_notifications AS
159SELECT
160 n.notification_id,
161 tm.username,
162 gc.message_text,
163 n.is_read
164FROM NOTIFICATION n
165LEFT JOIN TRIP_MEMBER tm ON n.trip_member_id = tm.trip_member_id
166LEFT JOIN GROUP_CHAT gc ON n.group_id = gc.group_id;
167
168
169-- 13. v_analysis_trip_cost_details
170
171CREATE OR REPLACE VIEW v_analysis_trip_cost_details AS
172SELECT
173 t.trip_id,
174 t.title AS trip_title,
175 t.total_budget,
176 t.estimated_cost AS trip_estimated_cost,
177
178 td.trip_day_id,
179 td.day_number,
180 td.actual_date,
181
182 pi.plan_item_id,
183 pi.estimated_cost AS activity_cost,
184
185 p.place_id,
186 p.name AS place_name,
187 p.avg_price AS place_avg_price,
188
189 st.scheduled_start_time,
190 st.scheduled_end_time
191FROM trip t
192JOIN trip_day td
193 ON t.trip_id = td.trip_id
194JOIN plan_item pi
195 ON td.trip_day_id = pi.trip_day_id
196JOIN place p
197 ON pi.place_id = p.place_id
198LEFT JOIN schedule_time st
199 ON pi.schedule_time_id = st.schedule_time_id;
200
201
202SELECT current_schema();
203
204
205
206EXPLAIN ANALYZE
207SELECT * FROM v_trip_member_simple WHERE trip_member_id = 138014;
208
209-- index za view_1
210
211EXPLAIN ANALYZE
212SELECT * FROM v_place_details WHERE place_id = 541;
213
214
215-- index za view_2
216
217EXPLAIN ANALYZE
218SELECT * FROM v_trip_overview WHERE trip_id = 55919;
219
220
221-- index za view_3
222
223EXPLAIN analyze
224SELECT * FROM popular_places_view_by_reviews WHERE place_id = 175;
225
226
227-- index za view_4
228
229EXPLAIN analyze
230SELECT * FROM v_category_tree WHERE category_id = 100;
231
232
233-- index za view_5
234
235EXPLAIN analyze
236SELECT * FROM v_trip_itinerary_byDay WHERE trip_id = 150;
237
238
239-- index za view_6
240
241EXPLAIN analyze
242SELECT * FROM user_profile_overview WHERE user_id = 243212;
243
244
245-- index za view_7
246
247EXPLAIN analyze
248SELECT * FROM v_trip_members_full WHERE trip_id = 1;
249
250
251-- index za view_8
252
253EXPLAIN analyze
254SELECT * FROM v_trip_cost WHERE trip_id = 100892;
255
256
257-- index za view_9
258
259EXPLAIN analyze
260SELECT * FROM trip_transport_view WHERE trip_id = 1001045;
261
262
263-- index za view_10
264
265EXPLAIN analyze
266SELECT * FROM v_reviews WHERE review_id = 353885;
267
268
269-- index za view_11
270
271EXPLAIN analyze
272SELECT * FROM v_user_favourites WHERE user_id = 487177;
273
274-- index za view_12
275
276EXPLAIN analyze
277SELECT * FROM v_notifications WHERE notification_id = 412857;
278
279-- index za view_13
280EXPLAIN ANALYZE
281SELECT * FROM v_analysis_trip_cost_details WHERE trip_id = 500;
282
283
284---------- novi views
285DROP VIEW IF EXISTS v_heavy_trip_members_plan CASCADE;
286
287
288-- view 14
289
290CREATE OR REPLACE VIEW v_heavy_trip_members_plan AS
291SELECT
292 t.trip_id,
293 t.title,
294 t.start_date,
295 t.end_date,
296 t.total_budget,
297 t.estimated_cost,
298
299 tm.trip_member_id,
300 tm.user_id AS member_user_id,
301 tm.username AS member_username,
302 tm.role,
303
304 td.trip_day_id,
305 td.day_number,
306 td.actual_date,
307
308 pi.plan_item_id,
309 pi.place_id,
310 pi.schedule_time_id,
311 pi.estimated_cost AS plan_item_cost,
312 pi.notes
313FROM trip t
314JOIN trip_member tm
315 ON t.trip_id = tm.trip_id
316JOIN trip_day td
317 ON t.trip_id = td.trip_id
318JOIN plan_item pi
319 ON td.trip_day_id = pi.trip_day_id;