wiki:MenuMealView

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

Last modified 10 days ago Last modified on 09/16/26 11:50:45
Note: See TracWiki for help on using the wiki.