Version 1 (modified by 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).