Lekce 4 - Databáze a tabulky Nové
V předchozí lekci, Strukturovaná a nestrukturovaná data, jsme se seznámili s rozdíly mezi strukturovanými a nestrukturovanými daty a možnostmi jejich kombinace.
V tomto tutoriálu si představíme databáze. Zaměříme se na základní strukturu databázových tabulek, jejich klíčové funkce, jako jsou primární a cizí klíče, různé datové typy a typy vztahů mezi tabulkami. Dále si ukážeme praktický příklad návrhu databáze pro e-shop.
Databáze
Databáze jsou komplexní aplikace, které nejčastěji fungují jako služby. Na rozdíl od prostých datových souborů databáze data umožňují nejen ukládat, ale také:
- efektivně vyhledávat
- měnit databázovou strukturu
- kontrolovat správné vyplnění dat
- minimalizovat duplikaci
- bezpečný přístup více uživatelům současně
- přístup pod jménem a heslem
- a další funkce.
Databáze vs. soubory
Databáze můžeme chápat jako nástavbu nad soubory a slouží pro pokročilejší práci s daty. Díky funkcím databáze najde např. internetový obchod rychle uživatele podle emailu nebo produkt podle jeho ID, protože databáze si drží data vždy seřazená a nové položky si rychle zařadí tam, kam patří. Těchto funkcí bychom u prostého souboru jen těžko dosahovali.
Data ze souborů lze do databáze importovat a naopak data z databáze lze vyexportovat do souborů.
Typy databází
Podle typu můžeme databáze rozdělit na relační (tabulkové) a NoSQL (např. grafové nebo objektové). Pro datovou analýzu jsou klíčové relační databáze, kterým se budeme v této lekci věnovat.
Relační databáze
Relační databáze ukládají data ve formě tabulek s řádky a sloupci, jako to známe např. z Excelu. Jsou zde ovšem navíc definovány vztahy mezi jednotlivými tabulkami (od toho název relační). Patří mezi ně například MySQL, MS-SQL, Oracle nebo PostgreSQL. Budeme se jim poté podrobněji věnovat v celém samostatném kurzu.
Propojení databází s analytickými nástroji
Relační databáze jsou často propojeny s analytickými nástroji, jako jsou Tableau, Microsoft Power BI nebo specializované statistické programy. Toto propojení umožňuje vizualizaci a hlubší analýzu dat uložených v tabulkách. Díky tomu je možné snadno identifikovat trendy, vzorce a anomálie, což je klíčové pro informované rozhodování.
Tabulka
V relačních databázích jsou tabulky základními strukturami pro ukládání dat. Každá tabulka představuje konkrétní objekt nebo entitu, například zákazníky, produkty či objednávky. Tabulky jsou tvořeny sloupci a řádky. Tato struktura umožňuje efektivní organizaci a správu dat.
Níže vidíme databázovou tabulku bank_code
ukládající
různé bankovní kódy, názvy bank a jejich SWIFT kód:

Sloupce a datové typy
Sloupce představují jednotlivé vlastnosti nebo charakteristiky ukládaných objektů. Každý sloupec má jedinečný název a je definován konkrétním datovým typem, který určuje povahu ukládaných hodnot. Mezi běžné datové typy patří:
- textové typy (např. jména, popisy),
- číselné typy (např. množství, ceny),
- datum a čas (např. datum narození, čas objednávky) a
- logické typy (např. pravda/nepravda).
Databáze pak sama hlídá, aby se do sloupce nemohl uložit jiný typ. Např. u příkladu výše by při pokusu o uložení textu do číselného kódu banky databáze vyvolala chybu a zabránila uložení celého řádku. Získáváme tím jistotu, že se omylem neuloží chybná hodnota, která by pokazila integritu dat. Správná volba datových typů pro sloupce je klíčová pro zajištění integrity a konzistence dat.
Řádky (záznamy)
Řádky obsahují konkrétní data objektů uložených v tabulce. Každý řádek představuje jeden záznam a v jednotlivých sloupcích jsou zapsané jeho atributy.
V příkladu výše jeden řádek definuje kódy pro Komerční banku, další řádek pro ČSOB atd.
Klíče v databázových tabulkách
V relačních databázích jsou klíče zásadními prvky pro zajištění integrity a propojení dat mezi tabulkami. Klíčem je jeden nebo více sloupců, jejichž hodnoty jednoznačně identifikují záznamy v tabulce nebo vytvářejí vazby mezi různými tabulkami. Použití klíčů umožňuje efektivní organizaci, vyhledávání a správu dat.
Primární klíče
Každá tabulka má obvykle jeden primární klíč. To je sloupec nebo kombinace sloupců, které jednoznačně identifikují každý záznam v tabulce. V databázi totiž můžeme mít typicky více Janů Nováků a když chceme nějakého smazat, musíme je rozlišit. Hodnoty primárního klíče musí být jedinečné a nesmí být prázdné. Velmi často se používají umělé primární klíče, kdy databáze jednoduše přiřadí ke každému záznamu číselné ID o 1 vyšší, než je ID záznamu předchozího.
U příkladu výše vidíme, že k tomuto účelu slouží sloupec
bank_code_id
. Definování primárního klíče zajišťuje
integritu dat a umožňuje efektivní vyhledávání a manipulaci s daty.
Cizí klíče
Cizí klíč je sloupec nebo sada sloupců v jedné tabulce, které odkazují na primární klíč v jiné tabulce. Tento odkaz vytváří vztah mezi dvěma tabulkami.
Uveďme si příklad. V praxi takto může mít např.
produkt uložené ID kategorie, do které
patří. Tedy hrábě (tabulka produkty
, řádek s
produkt_id
847
) patří do zahradního nářadí
(tabulka kategorie
, řádek s kategorie_id
786
). ID 786
bude potom pro hrábě cizím klíčem do
tabulky kategorií. Databáze pak díky nastavení cizího klíče na úrovni
tabulek sama hlídá, aby kategorie s ID 786
existovala a hrábě
nemohly patřit do neexistující kategorie.
Vztahy mezi tabulkami
V relačních databázích existují tři základní typy vztahů:
- Jedna ku jedné (1:1): Každý záznam v první tabulce odpovídá přesně jednomu záznamu ve druhé tabulce a naopak. Tento typ vztahu se používá, když je potřeba rozdělit data do dvou tabulek z důvodu bezpečnosti nebo pro lepší organizaci. Příkladem může být např. uživatel a nastavení. Každý uživatel má jedno nastavení, ale jedná se o dvě samostatné tabulky.
- Jedna ku mnoha (1:N): Jeden záznam v první tabulce může být spojen s více záznamy ve druhé tabulce. Tento vztah je nejběžnější a příkladem může být vztah mezi zákazníky a jejich objednávkami. Jeden zákazník má více objednávek. Jedna objednávka však vždy patří jen jednomu zákakzníkovi.
- Mnoho ku mnoha (M:N): Záznamy v jedné tabulce mohou být spojeny s více záznamy v druhé tabulce a naopak. Příkladem může být vztah mezi produktem a objednávkou, kde každý produkt může patřit do více objednávek a každá objednávka může mít více produktů. Tento vztah se implementuje pomocí třetí, spojovací tabulky, která v každém řádku obsahuje po jednom cizím klíči z obou propojovaných tabulek. Příklad si ukážeme níže.
Správné definování těchto vztahů je klíčové pro efektivní návrh databáze a zajištění její integrity.
Návrh databáze pro e-shop
Pro lepší pochopení struktury databázových tabulek a jejich vzájemných vztahů si představme jednoduchý model databáze pro internetový obchod (e-shop).
Tabulky
Náš e-shop bude mít jen 4 databázové tabulky:
Zakaznici
: Ukládá informace o registrovaných zákaznících.Produkty
: Obsahuje detaily o nabízeném zboží.Objednavky
: Zaznamenává jednotlivé objednávky provedené zákazníky.ProduktyObjednavky
: Vazební tabulka, propojující objednávky s produkty.
V praxi by se do samostatných tabulek dostala ještě minimálně adresa, ale pro zjednodušení ji uložíme k produktu.
Sloupce a datové typy
Tabulky budou mít následující sloupce těchto typů:
Tabulka Zakaznici
Sloupec | Datový typ | Popis |
---|---|---|
ZakaznikID | ITN | Primární klíč |
Jmeno | VARCHAR | Jméno zákazníka |
Prijmeni | VARCHAR | Příjmení zákazníka |
VARCHAR | Emailová adresa | |
Telefon | VARCHAR | Telefonní číslo |
Adresa | VARCHAR | Poštovní adresa |
Tabulka Produkty
Sloupec | Datový typ | Popis |
---|---|---|
ProduktID | INT | Primární klíč |
Nazev | VARCHAR | Název produktu |
Popis | TEXT | Popis produktu |
Cena | DECIMAL | Aktuální cena produktu |
SkladovaZasoba | INT | Počet kusů na skladě |
Tabulka Objednavky
Sloupec | Datový typ | Popis |
---|---|---|
ObjednavkaID | INT | Primární klíč |
ZakaznikID | INT | Cizí klíč na Zákazníci |
DatumObjednavky | DATETIME | Datum a čas objednávky |
Stav | VARCHAR | Stav objednávky (např. 'Nová', 'Vyřízená') |
Tabulka ProduktyObjednavky
Sloupec | Datový typ | Popis |
---|---|---|
ProduktyObjednavkyID | INT | Primární klíč |
ObjednavkaID | INT | Cizí klíč na Objednávky |
ProduktID | INT | Cizí klíč na Produkty |
Mnozstvi | INT | Počet objednaných kusů |
Cena | DECIMAL | Cena za jednotku v době objednávky |
Vztahy mezi tabulkami
A návrh databáze dokončeme definicí vztahů.
- Mezi tabulkami
Zakaznici
aObjednavky
bude klasický vztah 1:N (jeden zákazník může mít více objednávek, jedna objednávka patří vždy jednomu zákazníkovi). Vztah je realizován pomocí sloupceZakaznikID
v tabulceObjednavky
, který obsahuje ID kokrétního zákazníka (primární klíčZakaznikID
v tabulceZakaznici
). Objednavky
aProdukty
jsou propojeny vztahem M:N (jedna objednávka může obsahovat více produktů a jeden produkt může patřit do více objednávek). Je zde tedy využito další propojovací tabulkyProduktyObjednavky
, kde jsou uložené primární klíče položek, které se propojují (ObjednavkaID
aProduktId
). Navíc zde máme množství a znovu cenu, protože se na objednávce může lišit od aktuální ceny produktu.
Tento model umožňuje efektivní ukládání informací o zákaznících, produktech a jejich objednávkách, přičemž minimalizuje redundanci dat a zajišťuje jejich integritu.
Práci s databázemi si vyzkoušíme prakticky ve specializovaném kurzu.
V další lekci, Data Lifecycle a metody sběru dat, se seznámíme s procesem, kterým procházejí data při datové analýze, a přiblížíme si metodu sběru dat.