Нормализација
Прво, за 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).
