wiki:UseCaseModel/evaluation

Version 4 (modified by 175012, 12 days ago) ( diff )

--

Евалуација

Примери на индекси

Индекс врз колона што често се филтрира: sdate:

CREATE INDEX idx_policy_sdate ON project.policy(sdate);

Индекс за подобро JOIN-ирање помеѓу Policy и Payment:

CREATE INDEX idx_payment_policy ON project.payment(policy);

Индекс за групирање и филтрирање по тип на пакет:

CREATE INDEX idx_package_type ON project.package(type_pol);

Примери за тригери

  1. Проверка на датумска логика
    CREATE OR REPLACE FUNCTION project.validate_policy_dates()
    RETURNS TRIGGER AS $$
    BEGIN
        IF NEW.edate <= NEW.sdate THEN
            RAISE EXCEPTION 'End date must be after start date. Start: %, End: %', NEW.sdate, NEW.edate;
        END IF;
        RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER trigger_validate_policy_dates
    BEFORE INSERT OR UPDATE ON project.policy
    FOR EACH ROW EXECUTE FUNCTION project.validate_policy_dates();
    
    
  1. Да спречи внесување на плаќање (Payment) кое е поголемо од осигурената вредност
    CREATE OR REPLACE FUNCTION project.validate_payment_amount()
    RETURNS TRIGGER AS $$
    DECLARE
        max_amount NUMERIC;
    BEGIN
        -- земи ја максималната дозволена вредност од пакетот
        SELECT pkg.total INTO max_amount
        FROM project.policy pol
        JOIN project.package pkg ON pol.package = pkg.code
        WHERE pol.p_id = NEW.policy;
    
        -- ако не постои поврзана полиса или пакет, кревај грешка
        IF max_amount IS NULL THEN
            RAISE EXCEPTION 'Cannot validate payment. No associated policy/package found for policy ID: %', NEW.policy;
        END IF;
    
        -- ако износот на плаќање е поголем од дозволениот, кревај грешка
        IF NEW.p_amount > max_amount THEN
            RAISE EXCEPTION 'Payment amount (%.2f) exceeds maximum allowed (%.2f) for policy %', NEW.p_amount, max_amount, NEW.policy;
        END IF;
    
        RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER trigger_validate_payment_amount
    BEFORE INSERT OR UPDATE ON project.payment
    FOR EACH ROW
    EXECUTE FUNCTION project.validate_payment_amount();
    
    

Погледи

View имаме креирано во фаза 2

Трансакции

Трансакциите се применуваат во сите методи кои се користат за купување полиса во системот. Ако процесот на купување не биде успешен, промените не се зачувуваат во базата на податоци, осигурувајќи дека само целосно завршени и успешни трансакции ќе бидат внесени во системот.

Note: See TracWiki for help on using the wiki.