| | 965 | |
| | 966 | |
| | 967 | |
| | 968 | |
| | 969 | |
| | 970 | |
| | 971 | |
| | 972 | == Анализа и оптимизација на `Event_Overall_Ratings` |
| | 973 | |
| | 974 | Овој поглед ја прикажува деталната физичка структура на секој објект (сала), поврзувајќи ги поединечните седишта со нивните сектори и самите локации. Патеката на релациите е поставена линеарно, овозможувајќи брза проверка на точната позиција на седиштето преку неговиот ред и број. |
| | 975 | |
| | 976 | {{{ |
| | 977 | |
| | 978 | CREATE MATERIALIZED VIEW "Event_Overall_Ratings" AS |
| | 979 | SELECT |
| | 980 | e.event_id, |
| | 981 | e.name AS event_name, |
| | 982 | eh.event_happening_id, |
| | 983 | eh.event_time, |
| | 984 | COUNT(ehr.rating_id) AS total_reviews, |
| | 985 | COALESCE(ROUND(AVG(ehr.rating), 2), 0.00) AS average_rating |
| | 986 | FROM "Event" e |
| | 987 | JOIN "Event_Happening" eh ON e.event_id = eh.event_id |
| | 988 | LEFT JOIN "Event_Happening_Rating" ehr ON eh.event_happening_id = ehr.event_happening_id |
| | 989 | GROUP BY e.event_id, e.name, eh.event_happening_id, eh.event_time; |
| | 990 | |
| | 991 | }}} |
| | 992 | |
| | 993 | Погледот е веќе најоптимално напишан и не треба да се преуредува. |
| | 994 | |
| | 995 | ==== 1. Примарен филтер: |
| | 996 | |
| | 997 | `event_happening_id` (за специфични оценки по настан) или `event_id` (за севкупни оценки на серија настани). |
| | 998 | |
| | 999 | ==== 2. Случај на употреба: |
| | 1000 | |
| | 1001 | Прикажување на рејтингот на настанот во „Event Details“ страницата или генерирање на листа на „Најдобро оценети настани“ за администраторите. |
| | 1002 | |
| | 1003 | ==== 3. Оптимизација: |
| | 1004 | |
| | 1005 | Овој поглед е оптимално напишан со '''LEFT JOIN''' и '''GROUP BY''', што овозможува агрегација на сите оценки во еден чекор. Не бара индексирање бидејќи податоците се веќе пресметани и зачувани во материјализираната форма. |