Преглед: v_reviews_full
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Категорија | Рецензии |
| Индексна поддршка | Постоечка индексна поддршка |
Опис
Ги обединува оцените за нарачки и достави, со ознака за типот на рецензијата.
Секој запис го задржува типот на рецензијата и соодветните оценки. Ако една рецензија се однесува и на нарачка и на достава, се прикажуваат двата записа.
Еден ред за секој запис во поттипот за нарачка или достава. Рецензиите без поттип не се прикажуваат. Компанијата и доставувачот кај рецензија за достава можат да бидат NULL.
Прегледот нема колона rest_id. Филтрирање по ресторан бара дополнително поврзување со податоците за нарачката или доставувачот.
Зависности
| Табела / преглед | Употреба |
|---|---|
kbnteam.review | Заеднички податоци за рецензиите. |
kbnteam.order_review | Рецензии за нарачки и оценки за храна и ресторан. |
kbnteam.customer_order | Клиентски нарачки, датуми, статуси и износи. |
kbnteam.api_user | Лични и контактни податоци за корисниците. |
kbnteam.company_order | Поврзување на компаниските нарачки со компанијата и доставата. |
kbnteam.company | Податоци за компаниите. |
kbnteam.delivery_review | Рецензии за достави и оценки за доставувач и брзина. |
kbnteam.delivery | Достави, датуми, забелешки и назначени доставувачи. |
Излезни колони
| Колона | Опис | Извор за order | Извор за delivery |
|---|---|---|---|
review_id | Идентификатор на рецензијата. | review.review_id | review.review_id
|
review_type | Тип на рецензијата: order или delivery. | 'order'::text | 'delivery'::text
|
review_created_at | Датум и време на рецензијата. | review.review_created_at | review.review_created_at
|
review_rating | Општа оценка од 1 до 5. | review.review_rating | review.review_rating
|
review_comment | Коментар за рецензијата. | review.review_comment | review.review_comment
|
order_id | Идентификатор на клиентската нарачка. | order_review.order_id | NULL::integer
|
delivery_id | Идентификатор на доставата. | NULL::integer | delivery_review.delivery_id
|
company_id | Идентификатор на компанијата. | company_order.company_id | company_order.company_id
|
company_name | Назив на компанијата. | company.company_name | company.company_name
|
customer_user_id | Идентификатор на клиентот. | api_user.user_id | NULL::integer
|
customer_first_name | Име на клиентот. | api_user.user_first_name | NULL::varchar(255)
|
customer_last_name | Презиме на клиентот. | api_user.user_last_name | NULL::varchar(255)
|
driver_user_id | Идентификатор на доставувачот. | NULL::integer | api_user.user_id
|
driver_first_name | Име на доставувачот. | NULL::varchar(255) | api_user.user_first_name
|
driver_last_name | Презиме на доставувачот. | NULL::varchar(255) | api_user.user_last_name
|
order_review_food_rating | Оценка за храната од 1 до 5. | order_review.order_review_food_rating | NULL::integer
|
order_review_res_rating | Оценка за ресторанот од 1 до 5. | order_review.order_review_res_rating | NULL::integer
|
del_review_courier_rating | Оценка за доставувачот од 1 до 5. | NULL::integer | delivery_review.del_review_courier_rating
|
del_review_speed_rating | Оценка за брзината од 1 до 5. | NULL::integer | delivery_review.del_review_speed_rating
|
SQL дефиниција
CREATE OR REPLACE VIEW kbnteam.v_reviews_full AS
SELECT
r.review_id,
'order'::text AS review_type,
r.review_created_at,
r.review_rating,
r.review_comment,
orv.order_id,
NULL::integer AS delivery_id,
co.company_id,
cmp.company_name,
au.user_id AS customer_user_id,
au.user_first_name AS customer_first_name,
au.user_last_name AS customer_last_name,
NULL::integer AS driver_user_id,
NULL::varchar(255) AS driver_first_name,
NULL::varchar(255) AS driver_last_name,
orv.order_review_food_rating,
orv.order_review_res_rating,
NULL::integer AS del_review_courier_rating,
NULL::integer AS del_review_speed_rating
FROM kbnteam.review r
JOIN kbnteam.order_review orv ON orv.review_id = r.review_id
JOIN kbnteam.customer_order o ON o.order_id = orv.order_id
JOIN kbnteam.api_user au ON au.user_id = o.customer_user_id
JOIN kbnteam.company_order co ON co.comp_order_id = o.comp_order_id
JOIN kbnteam.company cmp ON cmp.company_id = co.company_id
UNION ALL
SELECT
r.review_id,
'delivery'::text AS review_type,
r.review_created_at,
r.review_rating,
r.review_comment,
NULL::integer AS order_id,
drvrev.delivery_id,
co.company_id,
cmp.company_name,
NULL::integer AS customer_user_id,
NULL::varchar(255) AS customer_first_name,
NULL::varchar(255) AS customer_last_name,
du.user_id AS driver_user_id,
du.user_first_name AS driver_first_name,
du.user_last_name AS driver_last_name,
NULL::integer AS order_review_food_rating,
NULL::integer AS order_review_res_rating,
drvrev.del_review_courier_rating,
drvrev.del_review_speed_rating
FROM kbnteam.review r
JOIN kbnteam.delivery_review drvrev ON drvrev.review_id = r.review_id
JOIN kbnteam.delivery d ON d.delivery_id = drvrev.delivery_id
LEFT JOIN kbnteam.api_user du ON du.user_id = d.driver_user_id
LEFT JOIN kbnteam.company_order co ON co.delivery_id = d.delivery_id
LEFT JOIN kbnteam.company cmp ON cmp.company_id = co.company_id;
Индексна поддршка
За овој поглед не се додава посебна група индекси. Постоечката индексна поддршка е доволна за тестираните прашалници. Индексите на заедничките табели можат да се користат и од други погледи.
Тестирање на перформанси
SELECT
Времето на извршување на SELECT прашалникот е прифатливо за редовното користење на погледот. Постоечката индексна поддршка е доволна за тестираните прашалници.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.review, главната табела на погледот. Се тестира додавање рецензија и промена на оценката и коментарот.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 15 | 18 | 1 |
| UPDATE | 16 | 15 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
Тестот се однесува на табелата review. За приказ во погледот, рецензијата треба да биде поврзана со нарачка или достава.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
