Version 5 (modified by 12 days ago) ( diff ) | ,
---|
Евалуација
Примери на индекси
Индекс врз колона што често се филтрира: sdate:
CREATE INDEX idx_policy_sdate ON project.policy(sdate);
Пример - Овој индекс е корисен кога често филтрираш записи во табелата policy според колоната sdate (датум на почеток). На пример, ако правиш пребарувања за сите полиси кои започнуваат во одреден месец или година, индексот ќе ја забрза операцијата.:
SELECT * FROM project.policy WHERE sdate >= '2025-01-01' AND sdate < '2026-01-01';
Индекс за подобро JOIN-ирање помеѓу Policy и Payment:
CREATE INDEX idx_payment_policy ON project.payment(policy);
Индекс за групирање и филтрирање по тип на пакет:
CREATE INDEX idx_package_type ON project.package(type_pol);
Примери за тригери
- Проверка на датумска логика
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();
- Да спречи внесување на плаќање (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
Трансакции
Трансакциите се применуваат во сите методи кои се користат за купување полиса во системот. Ако процесот на купување не биде успешен, промените не се зачувуваат во базата на податоци, осигурувајќи дека само целосно завршени и успешни трансакции ќе бидат внесени во системот.