Title: Z
1Základné pojmy a návrh databáz
- Základné pojmy
- Normalizácia DB
- Export cudzích klúcov
2Databázový systém
- DBS BD SRBD
- Je zložený z bázy dát a skupiny programov
nazývanej Systém Riadenia Bázy Dát - SRBD pomáha realizovat základné databázové
funkcie - umožnuje komunikáciu s používatelom,
definovanie, údržbu, uloženie a výber dát
kontrolu a riadenie databáz - Databáza je množina dát, ktoré nejakým spôsobom
súvisia
3Relacné databázy
- Sú najviac používaným typom databáz vo svete
- Ich základom sú dvojrozmerné entity tabulky
- Tabulky sa skladajú z riadkov a stlpcov a
zhromaždujú údaje o jednom druhu objektov (napr.
osobné údaje zamestnancov firmy)
4Príklad tabulky
P.c. Meno Priezvisko Vek Pohlavie
1 Jozef Púcik 13 M
2 Mária Durícková 46 Z
3 Ján Hraško 5 M
5Riadky a stlpce tabulky
- Jeden riadok predstavuje tzv. jeden záznam (alebo
vetu), teda skupinu vzájomne súvisiacich údajov
(usporiadanú n-ticu) - Stlpce sa nazývajú tiež atribúty objektov a údaje
v nich sú jedného rovnakého dátového typu - Každý stlpec má svoje meno, aby sa dal jednoducho
identifikovat - Každý riadok má svoj jednoznacný identifikátor
nazývaný aj primárny klúc
6Primárne a cudzie klúce
- Primárny klúc je atribút alebo skupina atribútov,
ktoré jednoznacne identifikujú riadok v tabulke - Primárny klúc má skratku PK (primary key)
- Cudzí klúc je atribút alebo skupina atribútov
tvoriacich v inej relácii primárny klúc - Používa sa na previazanie dvoch alebo viacerých
tabuliek - Cudzí klúc má skratku FK (foreign key)
7Vztahy medzi tabulkami
- Na to, aby v databáze nemusela existovat
redundancia, s výhodou využívame možnost
previazat dve tabulky pomocou primárnych klúcov - Napr. ak máme tabulku s osobnými údajmi
zamestnancov, kde uchovávame mesto a PSC,
vznikali by duplicitné dáta, zaberajúce príliš
vela miesta - Previazanie tabuliek je znázornené na dalšom
snímku
8Rod_cislo (PK) Meno Priezvisko Ulica Mesto PSC
8911318213 Ján Hraško Záhradná 5 Košice 1 04001
8852179831 Snehu Lienka Palácová 13 Rozprávkovo 12345
8205171234 Vali Buk Hôrna 96 Tatry 74331
ID_mesto (PK) Mesto PSC
1 Košice 1 04001
2 Košice 23 04023
3 Tatry 74331
4 Rozprávkovo 12345
Rod_cislo (PK) Meno Priezvisko Ulica ID_mesto (FK)
8911318213 Ján Hraško Záhradná 5 1
8852179831 Snehu Lienka Palácová 13 4
8205171234 Vali Buk Hôrna 96 3
9Vztah 1n
- Modeluje vztah medzi tabulkami, ked jeden objekt
môže vlastnit resp. popisovat viacero iných,
resp. viac objektov môže mat rovnakú vlastnost - Je to napríklad vztah medzi autorom a knihou, ked
jeden autor môže mat v databáze viac kníh
ID_autor (PK) Meno
1 J.K. Rowling
2 L. Podjavorinská
3 J. Verne
4 J.C. Hronský
ID_kniha (PK) Názov Vydanie ID_autor (FK)
1 Harry Potter a kamen mudrcov 1 1
2 Cin cin 1 2
... ... ... ...
99 Harry Potter a ohnivá caša 2 1
10Vztah mn
- Modeluje vztah medzi tabulkami, ked niekolko
objektov môže vlastnit resp. popisovat viacero
iných - Je to napríklad vztah medzi zamestnancom a
projektom na ktorom pracuje v prípade, že na
jednom projekte môže pracovat viac zamestnancov a
jeden zamestnanec môže pracovat na viacerých
projektoch - Takýto vztah nahradíme dvojicou vztahov 1n
ID_projekt (PK) Názov ...
1 Vzdelávanie dôchodcov ...
2 Rekvalifikacný kurz ...
... ... ...
50 Kurz požiarnej ochrany ...
Meno ID_zamestnanec (PK)
J. Sova 1
T. Takácová 2
... ...
V. Dudáš 34
ID_zamestnanec (FK) ID_projekt (FK)
1 50
1 2
... ...
34 2
11Vztah 11
- Špeciálny, málo používaný prípad vztahu 1n
- Modeluje vztah medzi tabulkami, ked jeden objekt
môže vlastnit resp. popisovat práve jeden iný - Je to napríklad vztah medzi triedou a triednym
ucitelom kde jeden ucitel je triednym ucitelom
práve pre jednu triedu
12Normalizácia DB
- alebo ako vytvorit dobrú databázu
13Co máme?
- Máme kopec údajov, ktoré chceme spracovat
- Predpokladom je aby sme si zozbierali všetky
potrebné informácie o tom, aké dáta má databáza
uchovávat a aké výstupy chceme z databázy
vydolovat
14Príklad
- Máme vytvorit databázu, ktorá bude uchovávat
údaje zo školského systému a to konkrétne mená a
bydliská ucitelov, triedy, císla ucební, dátum
narodenia ucitelov, údaje o umiestnení ucební,
pocet miest na sedenie v ucebni, trakt školy v
ktorom je umiestnená ucebna, pocet žiakov v
triedach, popis tried, názov predmetu, skratku
predmetu, popis predmetu - Z databázy by sme chceli zistit tieto údaje
- zoznam predmetov, ktoré ucí ucitel
- zoznam ucební a ich správcov
- zoznam tried, triednych ucitelov a kmenových
ucební
15Prvý krok
- V prvom kroku si musíme roztriedit ú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 vlastnostami - V našom prípade si rozdelíme dáta do týchto
skupín Ucitel, Trieda, Ucebna, Predmet
16Po prvom kroku
- Ucitel
- Meno
- Priezvisko
- Dátum narodenia
- Ulica
- PSC
- Mesto
- Trieda
- Oznacenie
- Pocet žiakov
- Popis
- Ucebna
- Císlo ucebne
- Poschodie
- Trakt
- Pocet miest
- Predmet
- Názov
- Skratka
- Popis
17Naco nám to bolo treba?
- Po tomto prvom kroku máme vlastne kus práce za
sebou pretože sme si vytvorili tabulky - V dalšom kroku si vytvoríme vztahy medzi
tabulkami - Najprv však nesmieme zabudnút na dôležitú vec a
tou vecou je náš starý známy primárny klúc (PK),
ktorý identifikuje každý záznam v tabulke
18Pred druhým krokom
- Ucitel
- ID ucitel (PK)
- Meno
- Priezvisko
- Dátum narodenia
- Ulica
- PSC
- Mesto
- Trieda
- ID trieda (PK)
- Oznacenie
- Pocet žiakov
- Popis
- Predmet
- ID predmet (PK)
- Názov
- Skratka
- Popis
- Ucebna
- ID ucebna (PK)
- Císlo ucebne
- Poschodie
- Trakt
- Pocet miest
19Druhý krok
- V druhom kroku si vytvoríme vztahy medzi
tabulkami - Z minulých hodín (ne)vieme, že poznáme tri typy
vztahov a to 11, 1n, mn - V zadaní sme mali požiadavku na zistenie týchto
údajov - zoznam predmetov, ktoré ucí ucitel
- zoznam ucební a ich správcov
- zoznam tried, triednych ucitelov a kmenových
ucební - Vezmeme teda naše tabulky a ideme zistit vztahy
20Ako na druhý krok?
- Základom je pýtat sa vždy z pohladu oboch
tabuliek - Vezmime si príklad
- Chceme urcit taký vztah, aby sme vedeli urcit
ucebne a ich správcov. - Správcom ucebne je vždy ucitel
- Vytvárame vztah medzi tabulkou Ucitel a tabulkou
Ucebna - Pýtame sa z jednej strany Kolko ucitelov je
správcom jednej ucebne? Odpoved je 1. - Pýtame sa z druhej strany Kolkým ucebniam môže
byt jeden ucitel správcom? Odpoved je viacerým
(teda n ucebniam)
21Pravidlá pre vztahy
- Vždy sa musíme pýtat z oboch strán!
- Ak je v oboch otázkach odpoved jedna, jeden,
jedno vztah je 11 - Ak je v jednej otázke odpoved jedna, jeden,
jedno a v druhej n vztah je 1n - Ak je v oboch otázkach odpoved n vztah je mn
22Po druhom kroku
Ucitel Trieda 1 1
Je vztah, ktorý priraduje ucitela k triede a tým
z neho vytvára triedneho ucitela
Ucitel Ucebna 1 n
Je vztah, ktorý priraduje ucitela k ucebni a tým
z neho vytvára správcu ucebne
Trieda Ucebna 1 1
Je vztah, ktorý priraduje ucebnu k triede a tým z
nej vytvára kmenovú ucebnu triedy
Ucitel Predmet m n
Je vztah, ktorý priraduje ucitela k predmetu a
tým z neho vytvára vyucujúceho daného predmetu
23Naco nám to bolo treba?
- Po tomto druhom kroku vieme, aké vztahy panujú
medzi tabulkami - Tento krok bol dôležitý na to, aby sme si vedeli
do tabuliek vložit cudzie klúce (FK), prípadne
vytvorit novú tabulku, ak máme vztah mn - Ja teraz vypotím nejaké cudzie klúce, ale nie z
brucha pravidlá tzv. exportu klúcov máte
popísané v dalšej casti prezentácie
24Pred tretím krokom
- Ucebna
- ID ucebna (PK)
- Císlo ucebne
- Poschodie
- Trakt
- Pocet miest
- ID ucitel (FK)
- Predmet - Ucitel
- ID predmet (PK, FK)
- ID ucitel (PK, FK)
- Trieda
- ID trieda (PK)
- Oznacenie
- Pocet žiakov
- Popis
- ID ucitel (FK)
- ID ucebna (FK)
- Predmet
- ID predmet (PK)
- Názov
- Skratka
- Popis
- Ucitel
- ID ucitel (PK)
- Meno
- Priezvisko
- Dátum narodenia
- Ulica
- PSC
- Mesto
25Tretí krok
- V tretom kroku priradíme jednotlivým stlpcom
dátové typy - Pre primárny klúc budeme používat vždy dátový typ
INTEGER - Nepýtajte sa preco. Robí sa to proste tak a má to
svoje dôvody. Ak to chcete vediet tak si
precítajte prezentáciu o normalizácii
26Po tretom kroku
- Ucebna
- ID ucebna (PK) - INTEGER
- Císlo ucebne - VARCHAR
- Poschodie - INTEGER
- Trakt - VARCHAR
- Pocet miest - INTEGER
- ID ucitel (FK) - INTEGER
- Trieda
- ID trieda (PK) - INTEGER
- Oznacenie - VARCHAR
- Pocet žiakov - INTEGER
- Popis - TEXT
- ID ucitel (FK) - INTEGER
- ID ucebna (FK) - INTEGER
- Predmet
- ID predmet (PK) - INTEGER
- Názov - VARCHAR
- Skratka - VARCHAR
- Popis - TEXT
- Ucitel
- ID ucitel (PK) - INTEGER
- Meno - VARCHAR
- Priezvisko - VARCHAR
- Dátum narodenia - DATE
- Ulica - VARCHAR
- PSC - VARCHAR
- Mesto - VARCHAR
- Predmet - Ucitel
- ID predmet (PK, FK) - INTEGER
- ID ucitel (PK, FK) - INTEGER
27A co sme získali týmto?
- Týmto krokom sme si urcili aký typ dát sa bude v
danom stlpci nachádzat - Inteligentné DBS nám po zvolení dátového typu
zaistia pri vkladaní údajov doménovú integritu a
teda kontrolu, ci sme vložili do daného polícka
správny údaj (dátum, císlo, znaky, ...)
28Štvrtý krok
- V tomto kroku nám už len zostáva pozriet sa, ci
sa nám v tabulke nevyskytujú nejaké nadbytocné
dáta - Ak áno, treba z týchto dát vytvorit novú tabulku
a s pôvodnou tabulkou ju previazat cudzím klúcom
29Máme tam také údaje?
- Máme a kto to nevidí, tak je na to jednoduchý
liek a to - Zájst k ocnému, alebo
- Vložit do tabulky zopár desiatok údajov a zistit,
ktoré údaje sa opakujú - V našom prípade to budú údaje o meste a PSC a
teda z nich vytvoríme novú tabulku s názvom Mesto
a prevedieme ju všetkými doterajšími krokmi
30Po štvrtom kroku
- Ucebna
- ID ucebna (PK) - INTEGER
- Císlo ucebne - VARCHAR
- Poschodie - INTEGER
- Trakt - VARCHAR
- Pocet miest - INTEGER
- ID ucitel (FK) - INTEGER
- Trieda
- ID trieda (PK) - INTEGER
- Oznacenie - VARCHAR
- Pocet žiakov - INTEGER
- Popis - TEXT
- ID ucitel (FK) - INTEGER
- ID ucebna (FK) - INTEGER
- Predmet
- ID predmet (PK) - INTEGER
- Názov - VARCHAR
- Skratka - VARCHAR
- Popis - TEXT
- Ucitel
- ID ucitel (PK) - INTEGER
- Meno - VARCHAR
- Priezvisko - VARCHAR
- Dátum narodenia - DATE
- Ulica - VARCHAR
- ID Mesto - INTEGER
- Mesto
- ID mesto (PK) - INTEGER
- Názov VARCHAR
- PSC VARCHAR (alebo INTEGER)
- Predmet - Ucitel
- ID predmet (PK, FK) - INTEGER
- ID ucitel (PK, FK) - INTEGER
31Spájanie dát pomocou klúcov
32Export cudzích klúcov
- Cudzí klúc (FK) vznikne prenosom primárneho klúca
(PK) z tzv. hlavnej (master) tabulky do vedlajšej
tabulky (detail), kde sa tento atribút stane FK - Tento presun sa zvykne oznacovat pojmom export
cudzích klúcov
33Smer exportu FK (1n)
- Na vztahy medzi tabulkami sa môžeme pozriet z
pohladu oboch tabuliek - Napr. tabulky trieda a žiaci
- Kolkí žiaci môžu byt v jednej triede?
- Jeden alebo viacero (1,n)
- Jeden žiak patrí do kolkých tried?
- Práve do jednej (1,1)
34Smer exportu FK (1n)
- V tomto prípade je smer exportu cudzieho klúca od
tabulky s násobnostou (1,1) k tabulke s
násobnostou (1,n) - Teda z predchádzajúceho príkladu bola tabulka s
násobnostou (1,1) tabulka trieda a tabulka s
násobnostou (1,n) je tabulka s názvom žiaci - Teda PK z tabulky trieda (napr. id_trieda)
presunieme do tabulky žiaci kde vytvoríme stlpec
id_trieda ako FK
35Príklad exportu
id_ziak meno priezvisko datum_nar
1 Ján Hraško 20.07.2007
2 Martin Klingácik 19.09.1909
id_trieda rocnik pismenko
1 1 A
2 3 F
Ako vytvoríme vztah medzi žiakom a triedou?
id_ziak meno priezvisko datum_nar id_trieda
1 Ján Hraško 20.07.2007 2
2 Martin Klingácik 19.09.1909 1
36Smer exportu FK (11)
- Aj na tieto vztahy medzi tabulkami sa môžeme
pozriet z pohladu oboch tabuliek - Napr. tabulky trieda a ucitel
- Kolko triednych ucitelov má trieda?
- Práve jedného (1,1)
- Kolkým triedam môže byt jeden ucitel triednym
ucitelom? - Žiadnej alebo jednej (0,1)
37Smer exportu FK (11)
- V tomto prípade je smer exportu cudzieho klúca od
tabulky s násobnostou práve jedna (1,1) k tabulke
s násobnostou 0 alebo 1 (0,1) - Teda z predchádzajúceho príkladu bola tabulka s
násobnostou (0,1) tabulka trieda a tabulka s
násobnostou (1,1) je tabulka s názvom ucitel - Teda PK z tabulky ucitel (napr. id_ucitel)
presunieme do tabulky trieda kde vytvoríme stlpec
id_ucitel ako FK
38Príklad exportu
id_ucitel meno priezvisko datum_nar
1 Ján Hraško 20.07.2007
2 Martin Klingácik 19.09.1909
id_trieda rocnik pismenko
1 1 A
2 3 F
Ako vytvoríme vztah medzi ucitelom a triedou?
id_trieda rocnik pismenko id_ucitel
1 1 A 2
2 3 F 1
Vždy teda vytvárame stlpec s cudzím klúcom v tej
tabulke, kde budú vyplnené všetky cudzie klúce.
Ak by sme v tomto prípade vložili stlpec s FK do
tabulky ucitel, niektoré polia by ostali prázdne,
pretože nie každý ucitel je triedny ucitel.
39Smer exportu FK (mn)
- Aj na tieto vztahy medzi tabulkami sa môžeme
pozriet z pohladu oboch tabuliek - Napr. tabulky predmet a ucitel
- Kolko predmetov ucí jeden ucitel?
- 1 alebo viac (1,n)
- Kolko ucitelov ucí jeden predmet?
- 1 alebo viac (1,n)
40Smer exportu FK (mn)
- V tomto prípade vytvoríme novú tabulku, ktorá
väcšinou obsahuje len cudzie klúce - Teda PK z tabulky ucitel (napr. id_ucitel)
presunieme do tabulky ucitel_predmet a rovnako PK
z tabulky predmet (napr. id_predmet) presunieme
do tabulky ucitel_predmet kde budú tieto stlpce
ako FK
41Príklad exportu
id_ucitel meno priezvisko datum_nar
1 Ján Hraško 20.07.2007
2 Martin Klingácik 19.09.1909
id_predmet nazov skratka
1 Fyzika FYZ
2 Chémia CHE
Ako vytvoríme vztah medzi ucitelom a predmetom?
id_ucitel id_predmet
1 2
2 1
42Dakujem za pozornost