wiki:Нормализација и подобрувања на дизајнот

Version 3 (modified by 183284, 2 days ago) ( diff )

--

Нормализација и подобрувања на дизајнот

Во оваа секција е прикажана нормализацијата на целокупниот ER модел до трета нормална форма (3NF), за да се отстранат зависностите, се избегне дуплирање на податоци и да се подобри интегритетот.

normlizacija_ddl_schema.3.sql

Објаснување на нормализацијата

ННормализацијата беше извршена како анализа на целиот модел составен од 9 табели, при што се разгледуваа зависностите помеѓу табелите, а не само во рамки на секоја одделно. На тој начин се овозможи откривање на заеднички функционални зависности и елиминирање на можни дуплирани атрибути.

Клучни подобрувања:

-Централизација на времетраењето на пакетите преку табелата tip_vremetranje. -Подобрување на интегритетот на податоците со користење на foreign keys помеѓу clenstvo, clenovi, paketi и tip_vremetranje. -Елиминирање на можни транзитивни зависности (пример: clenoviclenstvopaketi). -Воведување на поврзувачки табели за многу-на-многу релации (trenira, raboti).

Со оваа нормализација до 3NF, се подобрува конзистентноста, се намалува дуплирањето на податоци и се поедноставува одржувањето на базата.

Анализа по табела

clenovi(clenid, ime, prezime, email, broj_poseti)

Функционални зависности:

clenid → ime, prezime, email, broj_poseti

email → clenid (уникатност)

1NF: Сите вредности се атомски.
2NF: Сите атрибути зависат од примарниот клуч.
3NF: Нема транзитивни зависности.

Декомпозиција: / (нема потреба)

paketi(paketid, ime, cena)

Функционални зависности:

paketidime, cena

1NF: Атомски вредности.
2NF: Сите зависат од примарниот клуч.
3NF: Нема транзитивни зависности.

Декомпозиција: / (нема потреба)

tip_vremetranje(vremetraenjeid, vremetraenjedenovi, ime)

Функционални зависности:

vremetraenjeidvremetraenjedenovi, ime

1NF: Атомски вредности.
2NF: Сите зависности се од примарниот клуч.
3NF: Нема транзитивни зависности.

Декомпозиција: / (нема потреба)

clenstvo(clenstvoid, clenid, paketid, vremetraenjeid, start_datum)

Функционални зависности:

clenstvoidclenid, paketid, vremetraenjeid, start_datum

clenidime, prezime, email (транзитивна зависност ако би биле во иста табела)

1NF: Атомски вредности.
2NF: Сите зависности се од примарниот клуч.
3NF: Со референтни клучеви се елиминира транзитивноста.

Декомпозиција:

clenstvo(clenstvoid, clenid, paketid, vremetraenjeid, start_datum)

clenovi(clenid, ime, prezime, email, broj_poseti)

paketi(paketid, ime, cena)

tip_vremetranje(vremetraenjeid, vremetraenjedenovi,ime)

lokacii(lokacijaid, ime, adresa, telefon)

Функционални зависности: lokacijaidime, adresa, telefon

1NF: сите атрибути се атомски.
2NF: нема составен клуч; сите зависат од PK.
3NF: нема транзитивни зависности (телефон/адреса не зависат од ime, туку директно од PK).

poseti(posetaid, clenid, lokacijaid, datum)

Функционални зависности:

posetaidclenid, lokacijaid, datum

1NF: Атомски вредности.
2NF: Сите зависности од клучот.
3NF: Нема транзитивни зависности.

vraboteni(vrabotenid, ime, pozicija)

Функционални зависности:

vrabotenidime, pozicija

1NF/2NF/3NF: Веќе е нормализирана.

trenira(clenid, vrabotenid)

Функционални зависности:

(clenid, vrabotenid) → { } (само примарен клуч)

1NF/2NF/3NF: Релација за многу-на-многу.

raboti(vrabotenid, lokacijaid)

Функционални зависности:

(vrabotenid, lokacijaid) → { }

1NF/2NF/3NF: Веќе е нормализирана.

Нови релации по нормализација

Во однос на првичниот дизајн, не беше потребно да се воведат дополнителни табели освен оние што веќе постојат (tip_vremetranje за времетраење, trenira и raboti за многу-на-многу врски).

CREATE TABLE tip_vremetranje (

vremetraenjeid SERIAL PRIMARY KEY,
vremetraenjedenovi INT NOT NULL,
ime VARCHAR(50) NOT NULL

);

Ова овозможува поголема флексибилност и интегритет на податоците.

Attachments (5)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.