Normalizácia
-
Upload
karen-ware -
Category
Documents
-
view
30 -
download
2
description
Transcript of Normalizácia
Normalizácia
Čo je normalizácia ?
Normalizácia je postup, ktorým sa postupne určuje štruktúra tabuľky tak, aby pri spracovaní dát nevznikali žiadne problémy.
Je to činnosť, ktorá vedie k dobre navrhnutým tabuľkám.
Princípy normalizácie definoval E. F. Codd a nie je to suchá teória. Boli overené praxou a za tie dlhé roky tvorby databázových aplikácií sa vypracovali určité postupy tvorby tabuliek, ktoré sa nazývajú normálne formy.
Najčastejšie sa používajú prvé tri normálne formy
Príklad
V nemenovanej štátnej inštitúcii je archív objednávok.
Slečna referentka (ktorá je naša kamarátka) sa v tom už nevyzná, a tak sme jej sľúbili, že pre ňu vytvoríme program, ktorý jej bude tieto objednávky evidovať.
Nenormalizovaná formaCISLO_OBJ KOD_TOVARU DATUM_OBJ POCET CENA_TOVARU
DODAVATEL
KOD MENO ADR
1234 A34 930218 150 4 S46 Novák NR
1234 A47 930218 4 50 S46 Novák NR
1459 A34 930415 200 4 S46 Novák NR
1368 A49 930219 5 40 S50 Peterka ZA
1368 A50 930219 20 15 S50 Peterka ZA
1368 A34 930219 200 4 S50 Peterka ZA
O objednávke budeme evidovať pravdepodobne tieto údaje: Číslo objednávky, Kód tovaru na objednávke, Dátum objednávky, Počet kusov tovaru, Cenu tovaru a Údaje o dodávateľovi.
Dáta v tabuľke sú v nenormalizovanej forme, pokiaľ sa v nich nachádzajú opakujúce sa atribúty, ktoré nie sú atomické. Ak niektorá časť tabuľky je opäť tabuľka, potom je výsledná tabuľka v nenormalizovanej forme. Proces normalizácie začína 1NF a preto je potrebné najskôr previesť dáta z NF do 1NF.
Tabuľka: Objednávky
Prvá normálna forma 1NF
Tabuľka je v 1NF ak všetky atribúty sú ďalej nedeliteľné (atomické) t.j. iba jednoduché atribúty.
nie sú povolené viachodnotové atribúty
nie sú povolené zložené atribúty.
Odstránime zložený atribút Dodávateľ a rozložíme ho na stĺpce, ktoré pridáme do tabuľky. Teraz je tabuľka v 1NF.
Tabuľka: Objednávky v 1NF
CISLO_OBJ KOD_TOVARU DATUM_OBJ POCET CENA_TOVARU KOD_DOD MENO_DOD ADR_DOD
1234 A34 930218 150 4 S46 Novák NR
1234 A47 930218 4 50 S46 Novák NR
1459 A34 930415 200 4 S46 Novák NR
1368 A49 930219 5 40 S50 Peterka ZA
1368 A50 930219 20 15 S50 Peterka ZA
1368 A34 930219 200 4 S50 Peterka ZA
Prvá normálna forma 1NF
ZARADENIE (INSERT) – nemôžeme zaradiť nového dodávateľa, pokiaľ nedodáva aspoň jeden tovar
ZRUŠENIE (DELETE) – ak dodávateľ prestane dodávať nejaký tovar je potrebné zrušiť tento vzťah. V prípade, že je to posledný výrobok, zrušia sa aj všetky informácie o dodávateľovi, čo nie je výhodné.
AKTUALIZÁCIA (UPDATE) – informácie o jednom dodávateľovi sa vyskytujú viac krát.
Ich odstránením sa dostaneme do druhej normálnej formy.
Možné problémy pri základných operáciách:
Prvá normálna forma 1NF
CENA_TOVARU závisí od KOD_TOVARU POCET závisí od CISLO_OBJ a KOD_TOVARU Informácie o dodávateľovi sú závislé od CISLO_OBJ
V tabuľke Objednávky existujú rôzne závislosti
Druhá normálna forma 2NF
Tabuľka je v 2NF ak je v 1NF a každý nekľúčový atribút je závislý iba na primárnom kľúči. 2NF získame tak, že vytvoríme tri samostatné tabuľky.
Objednávky v 2NF
TOVAR POLOZKA_OBJ HLAV_OBJ
KOD_TOVARU
CENA_TOVARU
CISLO_OBJ
KOD_TOVARU
POCET
CISLO_OBJ
DATUM_OBJ
KOD_DOD MENO_DOD
ADR_DOD
A34 4 1234 A34 150 1234 930218 S46 Novák NR
A47 50 1234 A47 4 1459 930415 S46 Novák NR
A49 40 1459 A34 200 1368 930219 S50 Peterka ZA
A50 15 1368 A49 5
1368 A50 20
1368 A34 200
Unikátny identifikátor
Nanešťastie ešte nemáme opísané vzťahy medzi oboma entitami. Na to potrebujeme zadefinovať akýsi unikátny identifikátor.
Bude to nový atribút entity, ktorý bude mať tieto vlastnosti:
Bude unikátny v celej tabuľke, opisujúcej danú entitu. To znamená, že sa v celej tabuľke nenájdu dva riadky, ktoré by mali rovnakú hodnotu tohto atribútu.
Jeho hodnota nesmie byť prázdna po celý čas existencie tabuľky.
Už raz zadaná hodnota tohto identifikátora sa nesmie v danom riadku tabuľky nikdy zmeniť po dobu existencie tabuľky.
My už v podstate tento identifikátor poznáme. Je ním nám dobre známy primárny kľúč.
Primárny kľúč
Základom úspechu je správne zvoliť primárny kľúč. Začiatočníci robia často chybu v tom, že za primárny kľúč vyberú napr. priezvisko.
My však vieme, že existujú ľudia, ktorí majú rovnaké priezvisko.
Existuje pravidlo, ktoré hovorí, že primárny kľúč by mal byť čo najmenší. Preto je veľmi vhodné zvoliť ako primárny kľúč číslo, ale nemusí to tak byť. V našej tabuľke sme si pre lepšiu orientáciu zvolili v niektorých tabuľkách aj primárne kľúče zložené z písmena a čísla.
Primárny kľúč môže byť zložený aj z viacerých atribútov – to závisí od konkrétnej aplikácie.
Upravíme diagramy tak, že do každej entity vložíme resp. si v nej zvolíme identifikátor, ktorý bude primárnym kľúčom tabuľky a označíme ho podčiarknutím
Unikátny identifikátor
Objednávky v 2NF
TOVAR POLOZKA_OBJ HLAV_OBJ
KOD_TOVARU
CENA_TOVARU
CISLO_OBJ
KOD_TOVARU
POCET
CISLO_OBJ
DATUM_OBJ
KOD_DOD MENO_DOD
ADR_DOD
A34 4 1234 A34 150 1234 930218 S46 Novák NR
A47 50 1234 A47 4 1459 930415 S46 Novák NR
A49 40 1459 A34 200 1368 930219 S50 Peterka ZA
A50 15 1368 A49 5
1368 A50 20
1368 A34 200
Druhá normálna forma 2NF
ZARADENIE (INSERT) – nemôžeme zaradiť nového dodávateľa, ak je udaná iba jeho adresa (je potrebné poznať číslo objednávky)
ZRUŠENIE (DELETE) – ak zrušíme informácie o dodávateľovi stratíme informácie aj o dodávkach, resp. ak zrušíme číslo objednávky stratíme informácie o dodávateľovi
AKTUALIZÁCIA (UPDATE) – ak sa zmení napr. adresa dodávateľa, potom je potrebné vykonať aktualizáciu vo všetkých výskytoch informácií o dodávateľovi
Aj tabuľky v 2NF môžu ešte vykazovať problémy. Podobne je tomu aj v prípade HLAV_OBJ. Sú podobné, ako ich vykazovala 1NF pri operácii s dátami.
HLAV_OBJ vykazuje tranzitné závislosti.
Tretia normálna forma 3NF
Tabuľka je v 3NF ak je v 2NF a žiaden nekľúčový atribút tranzitne nezávisí na primárnom kľúči.
Tranzitívna závislosť znamená, že hodnoty atribútov nezávisia iba na primárnom kľúči, ale aj na hodnotách iných atribútov, ktoré sú zase závislé na primárnom kľúči.
Inak povedané, 3NF znamená, že žiadne stĺpce v tabuľke nie sú závislé na inom stĺpci, ktorý závisí od primárneho kľúča.
V našom prípade túto podmienku nespĺňa tabuľka HLAV_OBJ, pretože atribúty MENO_DOD a ADR_DOD sú závislé od atribútu KOD_DOD. Preto tieto atribúty oddelíme a vytvoríme novú tabuľku.
Tretia normálna forma 3NF
Objednávky v 3NF
TOVAR POLOZKA_OBJ OBJ DODAVATEL
KOD_TOVARU
CENA_TOVARU
CISLO_OBJ
KOD_TOVARU
POCET
CISLO_OBJDATUM_OBJ
KOD_DOD KOD_DOD
MENO_DOD
ADR_DOD
A34 4 1234 A34 150 1234 930218 S46 S46 Novák NR
A47 50 1234 A47 4 1459 930415 S46 S50Peterk
a ZA
A49 40 1459 A34 200 1368 930219 S50
A50 15 1368 A49 5
1368 A50 20
1368 A34 200
Vzťahy medzi tabuľkami
TOVAR
KOD_TOVARU
CENA_TOVARU
A34 4
A47 50
A49 40
A50 15
OBJ
CISLO_OBJDATUM_OB
JKOD_DO
D
1234 930218 S46
1459 930415 S46
1368 930219 S50
POLOZKA_OBJ
CISLO_OBJ KOD_TOVARU POCET
1234 A34 150
1234 A47 4
1459 A34 200
1368 A49 5
1368 A50 20
1368 A34 200
DODAVATEL
KOD_DOD MENO_DOD ADR_DOD
S46 Novák NR
S50 Peterka ZA
1:n
1:n
1:n
m:n