Преглед: v_menu_meal
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Категорија | Мени и каталог |
| Индексна поддршка | Постоечка индексна поддршка |
Опис
Ги прикажува јадењата со категорија, ресторан, состојки и алергени.
Состојките и алергените се прикажуваат како азбучно подредени листи без повторувања. Се прикажуваат и јадењата без наведени состојки или алергени.
Еден ред за секое јадење. Состојките и алергените се азбучно подредени, без повторување на називите.
Зависности
| Табела / преглед | Употреба |
|---|---|
kbnteam.meal_ingredient | Врски меѓу јадењата и состојките. |
kbnteam.ingredient | Називи на состојките. |
kbnteam.alergen_ingredient | Врски меѓу состојките и алергените. |
kbnteam.alergen | Називи на алергените. |
kbnteam.meal | Јадења, цени и поврзаност со категорија и ресторан. |
kbnteam.category | Категории на јадења. |
kbnteam.restaurant | Податоци за рестораните. |
Излезни колони
| Колона | Извор / пресметка | Опис |
|---|---|---|
meal_id | meal.meal_id | Идентификатор на јадењето. |
meal_name | meal.meal_name | Назив на јадењето. |
meal_description | meal.meal_description | Опис на јадењето. |
meal_price | meal.meal_price | Цена на јадењето. |
meal_weight | meal.meal_weight | Тежина на јадењето. |
cat_id | category.cat_id | Идентификатор на категоријата. |
cat_name | category.cat_name | Назив на категоријата. |
rest_id | restaurant.rest_id | Идентификатор на ресторанот. |
rest_name | restaurant.rest_name | Назив на ресторанот. |
ingredients | COALESCE(meal_ingredients.ingredients, '') | Подредена листа со називи на состојки. |
allergens | COALESCE(meal_allergens.allergens, '') | Подредена листа со називи на алергени. |
SQL дефиниција
CREATE OR REPLACE VIEW kbnteam.v_menu_meal AS
WITH meal_ingredients AS (
SELECT
mi.meal_id,
string_agg(DISTINCT i.ingr_name, ', ' ORDER BY i.ingr_name) AS ingredients
FROM kbnteam.meal_ingredient mi
JOIN kbnteam.ingredient i ON i.ingr_id = mi.ingr_id
GROUP BY mi.meal_id
),
meal_allergens AS (
SELECT
mi.meal_id,
string_agg(DISTINCT a.alergen_name, ', ' ORDER BY a.alergen_name) AS allergens
FROM kbnteam.meal_ingredient mi
JOIN kbnteam.alergen_ingredient ai ON ai.ingr_id = mi.ingr_id
JOIN kbnteam.alergen a ON a.alergen_id = ai.alergen_id
GROUP BY mi.meal_id
)
SELECT
m.meal_id,
m.meal_name,
m.meal_description,
m.meal_price,
m.meal_weight,
c.cat_id,
c.cat_name,
r.rest_id,
r.rest_name,
COALESCE(mi.ingredients, '') AS ingredients,
COALESCE(ma.allergens, '') AS allergens
FROM kbnteam.meal m
JOIN kbnteam.category c ON c.cat_id = m.cat_id
JOIN kbnteam.restaurant r ON r.rest_id = m.rest_id
LEFT JOIN meal_ingredients mi ON mi.meal_id = m.meal_id
LEFT JOIN meal_allergens ma ON ma.meal_id = m.meal_id;
Индексна поддршка
За овој поглед не се додава посебна група индекси. Постоечката индексна поддршка е доволна за тестираните прашалници. Индексите на заедничките табели можат да се користат и од други погледи.
Тестирање на перформанси
SELECT
Времето на извршување на SELECT прашалникот е прифатливо за редовното користење на погледот. Постоечката индексна поддршка е доволна за тестираните прашалници.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.meal, главната табела на погледот. Се тестира додавање оброк и промена на неговата цена.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 15 | 16 | 1 |
| UPDATE | 14 | 15 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
