| Version 29 (modified by , 37 hours ago) ( diff ) |
|---|
Оптимизација на прашалници
Анализа и оптимизација на 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,
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
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);
Анализа и оптимизација на 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);
Документација за оптимизацијата на погледите
Attachments (1)
- Оптимизација на прашалници.pdf (421.9 KB ) - added by 37 hours ago.
Download all attachments as: .zip
