Changes between Version 6 and Version 7 of Normalization


Ignore:
Timestamp:
09/02/25 21:30:33 (11 hours ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v6 v7  
    262262 * '''Функционална зависност''': `unit_id->unit_cost_price->(треба да зависи на временски период)`
    263263 * Проблем: Не може да се следат промени на цени.
     264* Релацијата `Order-Article`
     265 * Нема начин да се асоцираат повеќе артикли со количина со една нарачка.
    264266
    265267==== Подобрувања на дизајнот за да се задоволи 3 НФ
     
    353355}}}
    354356
     357===== Order-Article
     358
     359* Креирање на нова табела за `order items`
     360
     361{{{#!sql
     362CREATE TABLE order_item (
     363    item_id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
     364    ord_id BIGINT NOT NULL,
     365    art_id BIGINT NOT NULL,
     366    quantity INT NOT NULL,
     367    unit_price DECIMAL(10,2) NOT NULL,
     368    total_price DECIMAL(10,2) GENERATED ALWAYS AS (quantity * unit_price) STORED,
     369    FOREIGN KEY (ord_id) REFERENCES orders (ord_id),
     370    FOREIGN KEY (art_id) REFERENCES article (art_id),
     371    UNIQUE (ord_id, art_id)
     372);
     373}}}
     374
     375* Креирање тригер и функција за да се прави пресметката на сума
     376
     377{{{#!sql
     378CREATE OR REPLACE FUNCTION update_order_sum()
     379RETURNS TRIGGER AS $$
     380BEGIN
     381    UPDATE orders
     382    SET ord_sum = (SELECT COALESCE(SUM(total_price), 0)
     383        FROM order_item WHERE ord_id = NEW.ord_id)
     384        WHERE ord_id = NEW.ord_id;
     385    RETURN NEW;
     386END;
     387$$ LANGUAGE plpgsql;
     388
     389CREATE TRIGGER order_item_after_change
     390AFTER INSERT OR UPDATE OR DELETE ON order_item
     391FOR EACH ROW EXECUTE FUNCTION update_order_sum();
     392}}}
     393
     394
     395
    355396=== BCNF
    356397