= Оптимизација на прашалници == Анализа и оптимизација на `Performer_Events` Овој поглед дава преглед на сите изведувачи и настаните на кои тие учествуваат, заедно со прецизниот термин на нивниот настап. {{{ CREATE VIEW "Performer_Events" AS SELECT p.performer_id, p.name AS performer_name, e.event_id, e.name AS event_name, eh.event_time FROM "Performer" p JOIN "Event_Happening_Performer" ehp ON p.performer_id = ehp.performer_id JOIN "Event_Happening" eh ON ehp.event_happening_id = eh.event_happening_id JOIN "Event" e ON eh.event_id = e.event_id; }}} ==== Оптимизација: {{{ -- indexes for linking performers with specific event occurrences (M:N relationship) CREATE INDEX idx_ehp_performer_id ON "Event_Happening_Performer"(performer_id); CREATE INDEX idx_ehp_happening_id ON "Event_Happening_Performer"(event_happening_id); -- index for optimizing event lookups within scheduled event happenings CREATE INDEX idx_event_happening_event_id ON "Event_Happening"(event_id); }}} == Анализа и оптимизација на `Venue_Layout` Овој поглед ја прикажува целосната структура на секој објект (сала), поврзувајќи ги поединечните седишта со соодветните сектори и името на објектот. {{{ CREATE VIEW "Venue_Layout" AS SELECT v.venue_id, v.name AS venue_name, s.section_id, s.name AS section_name, st.seat_id, st.seat_number FROM "Venue" v JOIN "Section" s ON v.venue_id = s.venue_id JOIN "Seat" st ON s.section_id = st.section_id; }}} ==== Оптимизација: {{{ -- index for linking seats to their respective sections CREATE INDEX idx_seat_section_id ON "Seat"(section_id); -- index for linking sections to venues CREATE INDEX idx_section_venue_id ON "Section"(venue_id); -- index for optimizing search and update operations on specific seat numbers CREATE INDEX idx_seat_number ON "Seat"(seat_number); }}} == Анализа и оптимизација на `User_Tickets` Овој поглед ја прикажува целосната структура на секој објект (сала), поврзувајќи ги поединечните седишта со соодветните сектори и името на објектот. {{{ CREATE VIEW "User_Tickets" AS SELECT u.user_id, u.username, t.ticket_id, e.event_id, e.name AS event_name, tp.purchase_id, tp.qr_code, tr.refund_id, tr.refund_time FROM "User" u JOIN "Ticket_Purchase" tp ON u.user_id = tp.user_id JOIN "Ticket" t ON tp.ticket_id = t.ticket_id JOIN "Event_Happening" eh ON t.event_happening_id = eh.event_happening_id JOIN "Event" e ON eh.event_id = e.event_id LEFT JOIN "Ticket_Refund" tr ON tp.purchase_id = tr.purchase_id; }}} ==== Оптимизација: {{{ -- index for linking ticket purchases to the specific tickets CREATE INDEX idx_ticket_purchase_ticket_id ON "Ticket_Purchase"(ticket_id); -- index for linking purchases to users CREATE INDEX idx_ticket_purchase_user_id ON "Ticket_Purchase"(user_id); -- index for the LEFT JOIN with refunds CREATE INDEX idx_ticket_refund_purchase_id ON "Ticket_Refund"(purchase_id); -- index for optimizing event lookups within scheduled event happenings CREATE INDEX idx_event_happening_event_id ON "Event_Happening"(event_id); }}} == Анализа и оптимизација на `Event_User_Ratings` Овој поглед овозможува детален пристап до поединечните коментари и оценки што секој корисник ги оставил за одреден термин на настан. {{{ CREATE VIEW "Event_User_Ratings" AS SELECT eh.event_happening_id, e.event_id, e.name AS event_name, u.user_id, u.username, ehr.rating_id, ehr.rating, ehr.comment FROM "Event" e JOIN "Event_Happening" eh ON e.event_id = eh.event_id JOIN "Event_Happening_Rating" ehr ON eh.event_happening_id = ehr.event_happening_id JOIN "User" u ON ehr.user_id = u.user_id; }}} ==== Оптимизација: {{{ -- index for linking ratings to event happenings CREATE INDEX idx_ehr_happening_id ON "Event_Happening_Rating"(event_happening_id); -- index for linking ratings to users CREATE INDEX idx_ehr_user_id ON "Event_Happening_Rating"(user_id); }}} == Анализа и оптимизација на `Event_Overall_Ratings` Овој поглед врши статистичка анализа на задоволството на публиката преку пресметување на просечната оцена и вкупниот број на рецензии за секој поединечен настан. {{{ CREATE VIEW "Event_Overall_Ratings" AS SELECT e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time, COUNT(ehr.rating_id) AS total_reviews, AVG(ehr.rating) AS average_rating FROM "Event" e JOIN "Event_Happening" eh ON e.event_id = eh.event_id JOIN "Event_Happening_Rating" ehr ON eh.event_happening_id = ehr.event_happening_id GROUP BY e.event_id, e.name, eh.event_happening_id, eh.event_time; }}} ==== Оптимизација: {{{ -- composite index to speed up grouping and aggregate calculations (AVG, COUNT) CREATE INDEX idx_ehr_happening_id_rating ON "Event_Happening_Rating"(event_happening_id, rating); }}} == Анализа и оптимизација на `Event_Financial_Summary` Овој поглед ги сумира финансиските резултати за секој настан, прикажувајќи го вкупниот број на продадени билети, нето приходот по одбивање на рефундациите и посебно издвоената заработка од административните такси при враќање на влезниците. {{{ CREATE VIEW "Event_Financial_Summary" AS SELECT e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time, COUNT(tp.purchase_id) AS total_tickets_sold, -- total revenue SUM(tp.purchase_amount) - SUM(CASE WHEN tr.refund_amount IS NOT NULL THEN tr.refund_amount ELSE 0 END) AS net_revenue, -- refund taxes SUM(CASE WHEN tr.refund_id IS NOT NULL THEN tp.purchase_amount - tr.refund_amount ELSE 0 END) AS refund_tax_profit FROM "Event" e JOIN "Event_Happening" eh ON e.event_id = eh.event_id JOIN "Ticket" t ON eh.event_happening_id = t.event_happening_id JOIN "Ticket_Purchase" tp ON t.ticket_id = tp.ticket_id LEFT JOIN "Ticket_Refund" tr ON tp.purchase_id = tr.purchase_id GROUP BY e.event_id, e.name, eh.event_happening_id, eh.event_time; }}} ==== Оптимизација: {{{ -- index for linking ticket purchases to the specific tickets CREATE INDEX idx_ticket_purchase_ticket_id ON "Ticket_Purchase"(ticket_id); -- index for the LEFT JOIN with refunds to calculate net revenue accurately CREATE INDEX idx_ticket_refund_purchase_id ON "Ticket_Refund"(purchase_id); -- index for linking tickets to scheduled events CREATE INDEX idx_ticket_event_happening_id ON "Ticket"(event_happening_id); }}} == Анализа и оптимизација на `Future_Events` Овој поглед служи за динамично генерирање на репертоарот, прикажувајќи ги исклучиво претстојните настани во реално време преку филтрирање на изминатите термини. {{{ CREATE VIEW "Future_Events" AS SELECT e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time, v.venue_id, v.name AS venue_name, v.address_city AS city FROM "Event" e JOIN "Event_Happening" eh ON e.event_id = eh.event_id JOIN "Venue" v ON eh.venue_id = v.venue_id WHERE eh.event_time > CURRENT_TIMESTAMP; }}} ==== Оптимизација: {{{ -- index for optimizing chronological filtering of future events CREATE INDEX idx_event_happening_time ON "Event_Happening"(event_time); -- index for accelerating lookups of events scheduled at specific venues CREATE INDEX idx_event_happening_venue_id ON "Event_Happening"(venue_id); -- composite index to optimize queries filtering both by venue and upcoming time slots CREATE INDEX idx_event_happening_venue_time ON "Event_Happening"(venue_id, event_time); }}} == Анализа и оптимизација на `Available_Tickets` Овој поглед овозможува моментален увид во инвентарот на достапни седишта и автоматско враќање на рефундираните билети во понуда. {{{ CREATE VIEW "Available_Tickets" AS SELECT t.ticket_id, t.ticket_type, t.base_price, e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time, s.name AS section_name, st.seat_number FROM "Ticket" t JOIN "Event_Happening" eh ON t.event_happening_id = eh.event_happening_id JOIN "Event" e ON eh.event_id = e.event_id JOIN "Seat" st ON t.seat_id = st.seat_id JOIN "Section" s ON st.section_id = s.section_id WHERE t.is_available = TRUE; }}} ==== Оптимизација: {{{ -- partial index for rapid retrieval of only unsold tickets by filtering out sold ones CREATE INDEX idx_ticket_is_available_true ON "Ticket"(is_available) WHERE is_available = TRUE; -- index for linking tickets to scheduled events to accelerate event-based filtering CREATE INDEX idx_ticket_event_happening_id ON "Ticket"(event_happening_id); -- index for optimizing seat-based joins to retrieve venue layout details for each ticket CREATE INDEX idx_ticket_seat_id ON "Ticket"(seat_id); }}}