= Преглед: 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 дефиниција == {{{ #!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 се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.