wiki:UseCaseModel/evaluation

Version 2 (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();
    
    
Note: See TracWiki for help on using the wiki.