wiki:Normalization

Version 1 (modified by 141515, 10 hours ago) ( diff )

--

Нормализација

Прво, за 1NF треба да ги отстраниме сите низи или групи кои се повторуваат и сите вредности треба да имаат атомски единчени вредности.

Во нашиот случај треба да ги отстраниме од табелата за претставништа низите за телефони и марки.

За да го направиме тоа креираме нови табели за нив и ги отстрануваме потоа од постоечките. Целосната процедура е:

CREATE TABLE dealership_brands (
    dealership_tax_nr varchar(50) NOT NULL,
    brand_name varchar(100) NOT NULL,
    FOREIGN KEY (dealership_tax_nr) REFERENCES dealership(tax_nr)
);

INSERT INTO dealership_brands (dealership_tax_nr, brand_name)
SELECT tax_nr, unnest(brands) FROM dealership;

ALTER TABLE dealership DROP COLUMN brands;

CREATE TABLE dealership_telephones (
    dealership_tax_nr varchar(50) NOT NULL,
    phone_number varchar(50) NOT NULL,
    FOREIGN KEY (dealership_tax_nr) REFERENCES dealership(tax_nr)
);

-- Insert the dealership telephones into the new table
INSERT INTO dealership_telephones (dealership_tax_nr, phone_number)
SELECT tax_nr, unnest(telephones) FROM dealership;

ALTER TABLE dealership DROP COLUMN telephones;

Следно за 2NF треба сите атрибути кои не се клучеви да се целосно а не делумно зависни на главниот клуч.

Во нашата табела за претставништва имаме главен клуч tax_nr, па сега со новите табели за телефон и брендови за секое претставништво имаме зависност на главниот клуч, со што е постигната 2NF.

Конечно за 3NF треба да се отстранети транзитивни зависности, односно зависности каде атрибути кои не се клучеви зависат на други атрибути кои не се клучеви. Кај нас ова е веќе постигнато бидејќи во секоја табела секој атрибут кој е foreign key посочува кон главен клуч во друга табела (на пример embg и a_id во табелата за payments).

Note: See TracWiki for help on using the wiki.