Cvičení - Normalizace databáze
Praktické cvičení – Normalizace databáze
Zadání
Škola si vede evidenci žáků, jejich tříd a předmětů v jedné tabulce:
| Žák | Třída | Obor | Předmět |
|---|---|---|---|
| Jan Novák | 3.A | IT | Databáze |
| Jan Novák | 3.A | IT | Počítačové sítě |
| Petra Malá | 3.A | IT | Databáze |
| Petra Malá | 3.A | IT | Programování |
| Tomáš Veselý | 3.B | Elektrotechnika | Počítačové sítě |
| Tomáš Veselý | 3.B | Elektrotechnika | Elektronika |
Takto navržená databáze obsahuje velké množství opakujících se údajů.
Vaším úkolem je databázi normalizovat.
Úkol 1 – Najděte problémy
Prohlédněte si původní tabulku a napište alespoň 3 údaje, které se zbytečně opakují.
Například:
Úkol 2 – Rozdělte databázi
Vytvořte čtyři tabulky:
TRIDA
Navrhněte sloupce například:
| Sloupec | Význam |
|---|---|
| id | jednoznačné ID třídy |
| nazev | název třídy |
| obor | název oboru |
ZAK
| Sloupec | Význam |
|---|---|
| id | jednoznačné ID žáka |
| jmeno | jméno žáka |
| trida_id | třída, do které žák patří |
PREDMET
| Sloupec | Význam |
|---|---|
| id | jednoznačné ID předmětu |
| nazev | název předmětu |
ZAPIS
Tabulka bude evidovat, který žák má který předmět.
| Sloupec | Význam |
|---|---|
| zak_id | žák |
| predmet_id | předmět |
Úkol 3 – Určete klíče
V každé tabulce označte:
PK – primární klíč
FK – cizí klíč
Například:
ZAK.id → PK
ZAK.trida_id → FK
Úkol 4 – Nakreslete databázi v drawDB
V drawDB vytvořte databázový model obsahující:
TRIDA
ZAK
PREDMET
ZAPIS
Propojte tabulky pomocí relací.
Výsledný model by měl odpovídat přibližně vztahům:
TRIDA → ZAK
jedna třída může mít více žáků
ZAK → ZAPIS
jeden žák může mít více zápisů
PREDMET → ZAPIS
jeden předmět může mít více zápisů
Bonus
Do tabulky ZAPIS přidejte:
datum_zapisu
Rozhodněte, proč tento údaj patří právě do tabulky ZAPIS a ne například do tabulky ZAK.
Co odevzdat
Odevzdejte:
screenshot hotového databázového modelu z drawDB,
model musí obsahovat všechny 4 tabulky,
musí být označeny primární a cizí klíče,
tabulky musí být správně propojené relacemi,
pod obrázek napište jednu krátkou odpověď:
Proč je normalizovaná databáze lepší než původní jedna velká tabulka?
Kontrola před odevzdáním
Před odevzdáním si zkontrolujte:
neopakuji zbytečně jméno žáka?
neopakuji zbytečně název třídy?
neopakuji zbytečně název předmětu?
používám místo opakování údajů ID?
má každá tabulka svůj účel?
jsou tabulky správně propojené?
Hlavní myšlenka
Každou informaci ukládáme pokud možno pouze jednou a ostatní tabulky se na ni odkazují pomocí ID.