normalizácia db

21
Normalizácia DB Normalizácia DB alebo ako vytvoriť dobrú databázu (rečou normálneho človeka) Spracoval, vypracoval a prepracoval: Ing. Michal

Upload: turi

Post on 11-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Normalizácia DB. alebo ako vytvoriť dobrú databázu (rečou normálneho človeka). Spracoval, vypracoval a prepracoval: Ing. Michal COPKO. Čo máme?. Máme kopec údajov, ktoré chceme spracovať - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Normalizácia DB

Normalizácia DBNormalizácia DBalebo ako vytvoriť dobrú databázu

(rečou normálneho človeka)

Spracoval, vypracoval a prepracoval: Ing. Michal COPKO

Page 2: Normalizácia DB

Čo máme?Čo máme?

• Máme kopec údajov, ktoré chceme spracovať

• Predpokladom je aby sme si zozbierali všetky potrebné informácie o tom, aké dáta má databáza uchovávať a aké výstupy chceme z databázy „vydolovať“

Page 3: Normalizácia DB

PríkladPríklad

• Máme vytvoriť databázu, ktorá bude uchovávať údaje zo školského systému a to konkrétne: mená a bydliská učiteľov, triedy, čísla učební, dátum narodenia učiteľov, údaje o umiestnení učební, počet miest na sedenie v učebni, trakt školy v ktorom je umiestnená učebňa, počet žiakov v triedach, popis tried, názov predmetu, skratku predmetu, popis predmetu

• Z databázy by sme chceli zistiť tieto údaje: – zoznam predmetov, ktoré učí učiteľ– zoznam učební a ich správcov– zoznam tried, triednych učiteľov a kmeňových učební

Page 4: Normalizácia DB

Nultý krokNultý krok

• V nultom kroku sa zbavíme všetkých zložených atribútov, teda takých, kde sú nejaké oddeľovače slúžiace na oddelenie viacerých dát

• V našom zadaní by to mohlo byť napríklad bydlisko učiteľa, ktoré sa dá rozdeliť na ulicu, PSČ a mesto

Page 5: Normalizácia DB

Prvý krokPrvý krok

• V prvom kroku si musíme roztriediť údaje do súvisiacich skupín

• Z príkladu vidíme, že vždy zbierame údaje o nejakých objektoch a tieto údaje sú vlastne nejakými ich vlastnosťami

• V našom prípade si rozdelíme dáta do týchto skupín: Učiteľ, Trieda, Učebňa, Predmet

Page 6: Normalizácia DB

Po prvom krokuPo prvom kroku• Učiteľ

– Meno– Priezvisko– Dátum narodenia– Ulica– PSČ– Mesto

• Trieda– Označenie– Počet žiakov– Popis

• Učebňa– Číslo učebne– Poschodie– Trakt– Počet miest

• Predmet– Názov– Skratka– Popis

Page 7: Normalizácia DB

Načo nám to bolo treba?Načo nám to bolo treba?

• Po tomto prvom kroku máme vlastne kus práce za sebou pretože sme si vytvorili tabuľky

• V ďalšom kroku si vytvoríme vzťahy medzi tabuľkami

• Najprv však nesmieme zabudnúť na dôležitú vec a tou vecou je náš starý známy primárny kľúč (PK), ktorý identifikuje každý záznam v tabuľke a zabezpečuje entitnú integritu

Page 8: Normalizácia DB

Pred druhým krokomPred druhým krokom• Učiteľ

– ID učiteľ (PK)– Meno– Priezvisko– Dátum narodenia– Ulica– PSČ– Mesto

• Trieda– ID trieda (PK)– Označenie– Počet žiakov– Popis

• Učebňa– ID učebňa (PK)

– Číslo učebne

– Poschodie

– Trakt

– Počet miest

• Predmet– ID predmet (PK)– Názov– Skratka– Popis

Page 9: Normalizácia DB

Druhý krokDruhý krok

• V druhom kroku si vytvoríme vzťahy medzi tabuľkami

• Z minulých hodín (ne)vieme, že poznáme tri typy vzťahov a to 1:1, 1:n, m:n

• V zadaní sme mali požiadavku na zistenie týchto údajov:– zoznam predmetov, ktoré učí učiteľ– zoznam učební a ich správcov– zoznam tried, triednych učiteľov a kmeňových učební

• Vezmeme teda naše tabuľky a ideme zistiť vzťahy

Page 10: Normalizácia DB

Ako na druhý krok?Ako na druhý krok?

• Základom je pýtať sa vždy z pohľadu oboch tabuliek

• Vezmime si príklad – Chceme určiť taký vzťah, aby sme vedeli určiť učebne a ich

správcov. – Správcom učebne je vždy učiteľ– Vytvárame vzťah medzi tabuľkou Učiteľ a tabuľkou Učebňa– Pýtame sa z jednej strany: Koľko učiteľov je správcom jednej

učebne? Odpoveď je 1.– Pýtame sa z druhej strany: Koľkým učebniam môže byť jeden

učiteľ správcom? Odpoveď je viacerým (teda n učebniam)

Page 11: Normalizácia DB

Pravidlá pre vzťahyPravidlá pre vzťahy

• Vždy sa musíme pýtať z oboch strán!

• Ak je v oboch otázkach odpoveď „jedna, jeden, jedno“ vzťah je 1:1

• Ak je v jednej otázke odpoveď „jedna, jeden, jedno“ a v druhej „n“ vzťah je 1:n

• Ak je v oboch otázkach odpoveď „n“ vzťah je m:n

Page 12: Normalizácia DB

Po druhom krokuPo druhom kroku

Učiteľ : Trieda1 : 1

Učiteľ : Učebňa1 : n

Trieda : Učebňa1 : 1

Učiteľ : Predmetm : n

Je vzťah, ktorý priraďuje učiteľa k triede a tým z neho vytvára triedneho učiteľa

Je vzťah, ktorý priraďuje učiteľa k učebni a tým z neho vytvára správcu učebne

Je vzťah, ktorý priraďuje učebňu k triede a tým z nej vytvára kmeňovú učebňu triedy

Je vzťah, ktorý priraďuje učiteľa k predmetu a tým z neho vytvára vyučujúceho daného predmetu

Page 13: Normalizácia DB

Načo nám to bolo treba?Načo nám to bolo treba?

• Po tomto druhom kroku vieme, aké vzťahy „panujú“ medzi tabuľkami

• Tento krok bol dôležitý na to, aby sme si vedeli do tabuliek vložiť cudzie kľúče (FK), prípadne vytvoriť novú tabuľku, ak máme vzťah m:n

• Ja teraz „vypotím“ nejaké cudzie kľúče, ale nie z brucha – pravidlá tzv. exportu kľúčov máte popísané v nasledujúcej prezentácii o modelovaní databáz

Page 14: Normalizácia DB

Pred tretím krokomPred tretím krokom

• Učiteľ– ID učiteľ (PK)– Meno– Priezvisko– Dátum narodenia– Ulica– PSČ– Mesto

• Trieda– ID trieda (PK)– Označenie– Počet žiakov– Popis– ID učiteľ (FK)– ID učebňa (FK)

• Učebňa– ID učebňa (PK)– Číslo učebne– Poschodie– Trakt– Počet miest– ID učiteľ (FK)

• Predmet– ID predmet (PK)

– Názov

– Skratka

– Popis

• Predmet - Učiteľ– ID predmet (PK, FK)

– ID učiteľ (PK, FK)

Page 15: Normalizácia DB

Tretí krokTretí krok

• V treťom kroku priradíme jednotlivým stĺpcom dátové typy

• Pre primárny kľúč budeme používať vždy dátový typ INTEGER

• Nepýtajte sa prečo. Robí sa to proste tak a má to svoje dôvody. Ak to chcete vedieť tak si prečítajte prezentáciu o normalizácii

Page 16: Normalizácia DB

Po treťom krokuPo treťom kroku

• Učiteľ– ID učiteľ (PK) - INTEGER– Meno - VARCHAR– Priezvisko - VARCHAR– Dátum narodenia - DATE– Ulica - VARCHAR– PSČ - VARCHAR– Mesto - VARCHAR

• Trieda– ID trieda (PK) - INTEGER– Označenie - VARCHAR– Počet žiakov - INTEGER– Popis - TEXT– ID učiteľ (FK) - INTEGER– ID učebňa (FK) - INTEGER

• Učebňa– ID učebňa (PK) - INTEGER– Číslo učebne - VARCHAR– Poschodie - INTEGER– Trakt - VARCHAR– Počet miest - INTEGER– ID učiteľ (FK) - INTEGER

• Predmet– ID predmet (PK) - INTEGER– Názov - VARCHAR– Skratka - VARCHAR– Popis - TEXT

• Predmet - Učiteľ– ID predmet (PK, FK) - INTEGER– ID učiteľ (PK, FK) - INTEGER

Page 17: Normalizácia DB

A čo sme získali týmto?A čo sme získali týmto?

• Týmto krokom sme si určili aký typ dát sa bude v danom stĺpci nachádzať

• Inteligentné DBS nám po zvolení dátového typu zaistia pri vkladaní údajov doménovú integritu a teda kontrolu, či sme vložili do daného „políčka“ správny údaj (dátum, číslo, znaky, ...)

Page 18: Normalizácia DB

Štvrtý krokŠtvrtý krok

• V tomto kroku nám už len zostáva pozrieť sa, či sa nám v tabuľke nevyskytujú nejaké nadbytočné dáta

• Ak áno, treba z týchto dát vytvoriť novú tabuľku a s pôvodnou tabuľkou ju previazať cudzím kľúčom

Page 19: Normalizácia DB

Máme tam také údaje?Máme tam také údaje?

• Máme a kto to nevidí, tak je na to jednoduchý liek a to:– Zájsť k očnému, alebo– Vložiť do tabuľky zopár desiatok údajov a zistiť, ktoré

údaje sa opakujú

• V našom prípade to budú údaje o meste a PSČ a teda z nich vytvoríme novú tabuľku s názvom Mesto a prevedieme ju všetkými doterajšími krokmi

Page 20: Normalizácia DB

Po štvrtom krokuPo štvrtom kroku

• Učiteľ– ID učiteľ (PK) - INTEGER– Meno - VARCHAR– Priezvisko - VARCHAR– Dátum narodenia - DATE– Ulica - VARCHAR– ID Mesto - INTEGER

• Trieda– ID trieda (PK) - INTEGER– Označenie - VARCHAR– Počet žiakov - INTEGER– Popis - TEXT– ID učiteľ (FK) - INTEGER– ID učebňa (FK) - INTEGER

• Učebňa– ID učebňa (PK) - INTEGER– Číslo učebne - VARCHAR– Poschodie - INTEGER– Trakt - VARCHAR– Počet miest - INTEGER– ID učiteľ (FK) - INTEGER

• Predmet– ID predmet (PK) - INTEGER– Názov - VARCHAR– Skratka - VARCHAR– Popis - TEXT

• Predmet - Učiteľ– ID predmet (PK, FK) - INTEGER– ID učiteľ (PK, FK) - INTEGER

• Mesto– ID mesto (PK) - INTEGER– Názov – VARCHAR– PSČ – VARCHAR (alebo INTEGER)

Page 21: Normalizácia DB

HOTOVOHOTOVO

ETO VSJO