← Zpět na obsah

Kapitola 14: Tabulka, její struktura a data

Tabulka - řádky, sloupce a buňky
Tabulka - řádky, sloupce a buňky

1. Úvod: Jak si udělat v datech pořádek?

Představ si, že máš hromadu papírků a na každém je napsáno jméno kamaráda a jeho telefonní číslo. Jak v tom najdeš číslo na Petra? Bude to trvat dlouho. A co kdyby sis všechna jména a čísla napsal přehledně do sešitu s linkami a sloupci? Najednou by to bylo mnohem jednodušší! Přesně k tomu slouží tabulky. Jsou to skvělí pomocníci pro uspořádání dat.

2. Co je to tabulka a z čeho se skládá?

Tabulka je způsob, jak uspořádat data do řádků a sloupců. Díky tomu jsou data přehledná a můžeme s nimi snadno pracovat.

Základní části tabulky:

Příklad: Tabulka kamarádů
Jméno (Atribut) Věk (Atribut) Oblíbené zvíře (Atribut)
Petr 15 Pes
Jana 16 Kočka
Tomáš 15 Had

3. Typy dat: Co můžeme do tabulky vložit?

Do buněk tabulky nemůžeme dávat jen tak cokoli. Každý sloupec má obvykle určený typ dat. To nám pomáhá udržet v tabulce pořádek a počítač pak ví, jak s daty pracovat.

Proč je typ dat důležitý?

Když počítač ví, že ve sloupci "Věk" jsou jen čísla, může s nimi počítat (např. spočítat průměrný věk). Kdyby tam bylo i slovo "patnáct", počítač by to nezvládl.

Typy dat v tabulce - čísla, text, datum, vzorce
Typy dat v tabulce - čísla, text, datum, vzorce

4. Jak sestavit vlastní tabulku?

Sestavit tabulku pro nějaký problém je snadné. Stačí se zamyslet.

Problém: Chci si udělat přehled o svých knížkách.
  1. Co chci o každé knížce vědět? To budou moje sloupce (atributy). Například: Název knihy, Autor, Počet stran, Přečteno (Ano/Ne).
  2. Vytvořím si tabulku: Nakreslím si ji na papír nebo vytvořím v počítačovém programu (např. Excel, Google Tabulky).
  3. Vyplním data: Pro každou knížku vytvořím jeden řádek (záznam) a vyplním informace do buněk.
Název knihy Autor Počet stran Přečteno
Harry Potter a Kámen mudrců J. K. Rowlingová 223 Ano
Pán prstenů: Společenstvo Prstenu J. R. R. Tolkien 423 Ne

5. Jak vytvořit tabulku v programu Excel?

Pokud chceš svou tabulku vytvořit v počítači, nejlepší volbou je program Microsoft Excel nebo bezplatný Google Tabulky. Tady je jednoduchý návod:

Postup v Excelu (Microsoft Office):

  1. 🖥️ Otevři Excel → Klikni na "Nový sešit" nebo otevři existující soubor
  2. 📝 Vytvoř záhlaví:
  3. 🎨 Uprav záhlaví (volitelně):
  4. 📊 Vyplňuj data:
  5. 💾 Ulož soubor:

Bonus tipy pro Excel:

Člověk a digitální svět

Tabulky jsou všude kolem nás, od rozvrhů hodin po ceníky v obchodech. Schopnost vytvářet a rozumět tabulkám je základní digitální dovedností, která nám pomáhá organizovat informace v osobním životě i v budoucí profesi. Díky přehlednému uspořádání dat můžeme lépe plánovat, sledovat pokrok a dělat informovaná rozhodnutí.

Otázky k zamyšlení

Úkoly pro praxi

  1. Tabulka spolužáků: Vytvoř na papír nebo v počítači tabulku svých spolužáků. Sloupce budou: "Jméno", "Barva vlasů", "Měsíc narození". Vyplň alespoň 5 řádků (záznamů).
  2. Tabulka nákupu: Představ si, že jdeš na nákup. Vytvoř si tabulku nákupního seznamu. Sloupce budou: "Co chci koupit", "Počet kusů", "Odhadovaná cena". Vyplň alespoň 3 položky.
  3. Tabulka domácích mazlíčků: Pokud máš doma nějaké zvířátko (nebo bys chtěl/a mít), vytvoř si o něm tabulku. Sloupce mohou být: "Jméno zvířete", "Druh zvířete" (pes, kočka, křeček...), "Věk".

* Rozšíření pro pokročilé

Datové typy v tabulkách

Když pracuješ s profesionálními databázemi nebo i v Excelu, je důležité rozumět datovým typům. Každý sloupec by měl obsahovat data stejného typu, protože to umožňuje správné řazení, výpočty a validaci.

Text (VARCHAR)

Textová data jsou nejflexibilnější – mohou obsahovat písmena, čísla i speciální znaky. Používají se pro jména, adresy, popisy. V Excelu se text automaticky zarovnává doleva. Pozor: telefonní číslo je text (ne číslo!), protože může začínat nulou a nepočítáš s ním.

Čísla (INTEGER, DECIMAL)

INTEGER jsou celá čísla bez desetinných míst – věk, počet kusů, ID. DECIMAL (nebo FLOAT) jsou desetinná čísla – ceny, váhy, procenta. V Excelu se čísla zarovnávají doprava a můžeš s nimi počítat.

Datum a čas (DATE, DATETIME)

Speciální typ pro kalendářní data. Excel ukládá datum jako číslo (počet dnů od 1. 1. 1900), ale zobrazuje ho čitelně. Díky tomu můžeš počítat rozdíl mezi daty – například kolik dnů uběhlo od objednávky.

Proč je důležité správné uspořádání dat?

Představ si, že máš tabulku zákazníků a v jedné buňce je napsáno "Jan Novák, Praha, 25 let". To je špatně! Správně by to mělo být ve třech sloupcích: Jméno | Město | Věk. Proč?

Toto pravidlo se nazývá 1. normální forma (1NF) – každá buňka obsahuje pouze jednu hodnotu.

Klíče – jak propojit tabulky

V reálných systémech máme více tabulek, které spolu souvisejí. Například: tabulka ZÁKAZNÍCI a tabulka OBJEDNÁVKY. Jak je propojit?

Primární klíč (Primary Key) je sloupec s unikátní hodnotou pro každý záznam – obvykle ID. Žádní dva zákazníci nemají stejné ID.

Cizí klíč (Foreign Key) v tabulce OBJEDNÁVKY odkazuje na primární klíč zákazníka. Tak víme, který zákazník udělal kterou objednávku.

Příklad propojení tabulek:
ZÁKAZNÍCI: ID=1, Jméno="Jan Novák"
OBJEDNÁVKY: ID=101, Zákazník_ID=1, Částka=500 Kč
→ Objednávka 101 patří Janu Novákovi (protože Zákazník_ID = 1).
Struktura databázové tabulky
Struktura databázové tabulky

* Úkoly pro pokročilé

  1. Excel – Datové typy: Vytvoř tabulku "Zaměstnanci" se sloupci: ID (číslo), Jméno (text), Datum narození (datum), Plat (měna), Aktivní (ano/ne). Nastav správné formátování sloupců (pravý klik → Formát buněk).
  2. Excel – Propojené tabulky: Vytvoř dvě tabulky: "Produkty" (ID, Název, Cena) a "Prodeje" (ID, Produkt_ID, Počet, Datum). Použij SVYHLEDAT (VLOOKUP) pro zobrazení názvu produktu v tabulce Prodeje.
  3. Word – ER diagram: Nakresli ve Wordu (pomocí tvarů) jednoduchý ER diagram pro e-shop: entity ZÁKAZNÍK, OBJEDNÁVKA, PRODUKT. Zaznač vztahy a kardinalitu (1:N, M:N).
  4. Excel – Validace dat: Vytvoř tabulku s rozbalovacím seznamem (Data → Ověření dat → Seznam). Např. sloupec "Oddělení" s možnostmi: IT, HR, Finance, Marketing.

** Rozšíření pro maturitní obory

Podrobně: Relační databáze

Relační databáze jsou nejrozšířenějším způsobem ukládání strukturovaných dat. Název "relační" pochází z matematického pojmu "relace", ale v praxi to znamená, že data jsou uložena v tabulkách, které jsou vzájemně propojené.

Struktura relační databáze

Každá databáze se skládá z několika prvků:

Proč používáme relační databáze?

Hlavní výhody oproti jednoduchým tabulkám v Excelu:

SQL – jazyk pro práci s databázemi

SQL (Structured Query Language) je standardní jazyk pro práci s relačními databázemi. Naučit se SQL je jako naučit se anglicky v IT světě – používá ho MySQL, PostgreSQL, SQLite, Microsoft SQL Server i Oracle.

CRUD operace – základ všeho

Většina práce s databází se dá shrnout do čtyř operací, které se označují zkratkou CRUD:

1. CREATE (Vytvoř) – vložení nových dat:

INSERT INTO Zakaznici (Jmeno, Email) VALUES ('Jan Novák', 'jan@email.cz');
        

2. READ (Přečti) – získání dat z databáze:

SELECT * FROM Zakaznici WHERE Mesto = 'Praha';
        

3. UPDATE (Aktualizuj) – změna existujících dat:

UPDATE Zakaznici SET Email = 'novy@email.cz' WHERE ID = 1;
        

4. DELETE (Smaž) – odstranění dat:

DELETE FROM Zakaznici WHERE ID = 1;
        

Pokročilé Excel funkce pro práci s daty

I v Excelu můžeš pracovat s daty jako s databází. Zde jsou nejužitečnější funkce:

SVYHLEDAT (VLOOKUP)

Nejpoužívanější funkce pro propojení tabulek. Hledá hodnotu v prvním sloupci tabulky a vrátí hodnotu z jiného sloupce na stejném řádku.

Příklad: Máš tabulku ceníku (kód, název, cena) a chceš v objednávce automaticky doplnit cenu podle kódu produktu.
=SVYHLEDAT(A2; Cenik!$A$2:$C$100; 3; NEPRAVDA)
Tato funkce najde kód produktu z A2 v tabulce Ceník a vrátí hodnotu z 3. sloupce (cenu).

Kontingenční tabulka (Pivot Table)

Kontingenční tabulka je mocný nástroj pro analýzu a sumarizaci velkého množství dat. Umožňuje rychle odpovědět na otázky jako: "Kolik jsme prodali produktu X v měsíci Y?" nebo "Kdo je náš nejlepší zákazník?".

Vytvoření: Vyber data → Vložit → Kontingenční tabulka → Přetáhni pole do oblastí Řádky, Sloupce, Hodnoty.

Relační databáze - propojené tabulky
Relační databáze - propojené tabulky

** Úkoly pro maturitní obory

  1. Excel – VLOOKUP: Vytvoř tabulku "Ceník" (Kód produktu, Název, Cena). V druhé tabulce "Objednávka" zadej kód produktu a pomocí VLOOKUP automaticky doplň název a cenu.
  2. Excel – Kontingenční tabulka: Stáhni dataset prodejů (nebo vytvoř fiktivní 50+ záznamů). Vytvoř kontingenční tabulku: prodeje podle produktu, měsíce, regionu. Přidej graf.
  3. Word – SQL dokumentace: Napiš dokument "Základy SQL pro začátečníky" (2-3 strany). Vysvětli SELECT, INSERT, UPDATE, DELETE s příklady a cvičeními.
  4. PowerPoint – Relační databáze: Vytvoř prezentaci "Úvod do relačních databází" (10-12 snímků). Zahrň: co je DB, tabulky, klíče, vztahy, SQL, příklady.
  5. Canva – ER diagram: Vytvoř v Canvě profesionální ER diagram pro školní IS: STUDENT, UČITEL, PŘEDMĚT, TŘÍDA, ZNÁMKA. Použij správné symboly a kardinalitu.

*** Rozšíření pro IT obory

Jako IT specialista budeš navrhovat databáze a psát SQL dotazy. Tato sekce tě naučí praktické dovednosti.

Kompletní SQL CRUD operace

-- Vytvoření tabulky
CREATE TABLE produkty (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nazev VARCHAR(100) NOT NULL,
    cena DECIMAL(10,2) NOT NULL,
    skladem INTEGER DEFAULT 0,
    vytvoreno TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- INSERT - vložení dat
INSERT INTO produkty (nazev, cena, skladem)
VALUES ('Notebook', 25000.00, 10);

INSERT INTO produkty (nazev, cena, skladem) VALUES
    ('Myš', 500.00, 50),
    ('Klávesnice', 800.00, 30),
    ('Monitor', 5000.00, 15);

-- SELECT - čtení dat
SELECT * FROM produkty;
SELECT nazev, cena FROM produkty WHERE cena > 1000;
SELECT * FROM produkty ORDER BY cena DESC LIMIT 5;

-- UPDATE - aktualizace
UPDATE produkty SET cena = 24000 WHERE id = 1;
UPDATE produkty SET skladem = skladem - 1 WHERE nazev = 'Myš';

-- DELETE - mazání
DELETE FROM produkty WHERE id = 1;
DELETE FROM produkty WHERE skladem = 0;
        

JOIN - propojení tabulek

-- Vytvoření propojených tabulek
CREATE TABLE zakaznici (
    id INTEGER PRIMARY KEY,
    jmeno VARCHAR(100),
    email VARCHAR(100)
);

CREATE TABLE objednavky (
    id INTEGER PRIMARY KEY,
    zakaznik_id INTEGER,
    castka DECIMAL(10,2),
    datum DATE,
    FOREIGN KEY (zakaznik_id) REFERENCES zakaznici(id)
);

-- INNER JOIN - jen záznamy s odpovídajícím párem
SELECT
    z.jmeno,
    o.castka,
    o.datum
FROM objednavky o
INNER JOIN zakaznici z ON o.zakaznik_id = z.id;

-- LEFT JOIN - všichni zákazníci, i ti bez objednávky
SELECT
    z.jmeno,
    COALESCE(SUM(o.castka), 0) as celkem
FROM zakaznici z
LEFT JOIN objednavky o ON z.id = o.zakaznik_id
GROUP BY z.id;
        

Python + SQLite

import sqlite3

class ProduktDB:
    def __init__(self, db_cesta='produkty.db'):
        self.conn = sqlite3.connect(db_cesta)
        self.conn.row_factory = sqlite3.Row  # Přístup podle názvů sloupců
        self.vytvor_tabulku()

    def vytvor_tabulku(self):
        self.conn.execute('''
            CREATE TABLE IF NOT EXISTS produkty (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                nazev TEXT NOT NULL,
                cena REAL NOT NULL,
                skladem INTEGER DEFAULT 0
            )
        ''')
        self.conn.commit()

    def pridej(self, nazev, cena, skladem=0):
        self.conn.execute(
            "INSERT INTO produkty (nazev, cena, skladem) VALUES (?, ?, ?)",
            (nazev, cena, skladem)
        )
        self.conn.commit()

    def vsechny(self):
        cursor = self.conn.execute("SELECT * FROM produkty")
        return cursor.fetchall()

    def hledej(self, nazev):
        cursor = self.conn.execute(
            "SELECT * FROM produkty WHERE nazev LIKE ?",
            (f'%{nazev}%',)
        )
        return cursor.fetchall()

    def aktualizuj_cenu(self, id, nova_cena):
        self.conn.execute(
            "UPDATE produkty SET cena = ? WHERE id = ?",
            (nova_cena, id)
        )
        self.conn.commit()

# Použití
db = ProduktDB()
db.pridej("Notebook", 25000, 10)
db.pridej("Myš", 500, 50)

for produkt in db.vsechny():
    print(f"{produkt['nazev']}: {produkt['cena']} Kč")
        

*** Praktické úkoly pro IT obory

  1. SQL cvičení: Vytvoř databázi pro knihovnu (knihy, čtenáři, výpůjčky). Napiš 10 různých SELECT dotazů (filtrování, řazení, JOIN, GROUP BY).
  2. Python CRUD: Vytvoř třídu pro správu databáze kontaktů (jméno, telefon, email). Implementuj přidání, výpis, vyhledávání, úpravu a mazání.
  3. Normalizace: Dostaneš tabulku s duplicitními daty. Rozděl ji do více tabulek podle pravidel normalizace (1NF, 2NF, 3NF).
  4. Import/Export: Napiš skript, který importuje data z CSV do SQLite a exportuje výsledky SQL dotazu zpět do CSV.

*** Projekt pro IT obory: Databázová aplikace (část 1/6)

V kapitolách 14-19 vytvoříš databázovou aplikaci Evidence studentů. Naučíš se SQL, MySQL a propojení s Pythonem.

Co je MySQL?

MySQL je nejpopulárnější open-source relační databázový systém. Používají ho velké firmy jako Facebook, Twitter, YouTube.

Instalace MySQL

Windows

  1. Stáhni MySQL Installer z dev.mysql.com/downloads
  2. Vyber "MySQL Server" a "MySQL Workbench"
  3. Při instalaci zadej heslo pro uživatele "root" (zapamatuj si ho!)
  4. Spusť MySQL Workbench a připoj se k serveru

macOS (Homebrew)

brew install mysql
brew services start mysql
mysql_secure_installation
        

Základy MySQL Workbench

Funkce Popis
SQL Editor Psaní a spouštění SQL dotazů
Navigator Prohlížení databází a tabulek
EER Diagram Vizuální návrh databáze
Data Export/Import Záloha a obnovení dat

Vytvoření první databáze

Otevři MySQL Workbench, připoj se k serveru a spusť tyto příkazy:

-- Vytvoření databáze
CREATE DATABASE IF NOT EXISTS skola;

-- Použij databázi
USE skola;

-- Vytvoření tabulky studentů
CREATE TABLE studenti (
    id INT AUTO_INCREMENT PRIMARY KEY,
    jmeno VARCHAR(50) NOT NULL,
    prijmeni VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    datum_narozeni DATE,
    trida VARCHAR(10),
    prumer DECIMAL(3,2),
    vytvoreno TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Vytvoření tabulky předmětů
CREATE TABLE predmety (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nazev VARCHAR(50) NOT NULL,
    zkratka VARCHAR(10) NOT NULL,
    ucitel VARCHAR(100)
);

-- Vytvoření tabulky známek (propojovací tabulka)
CREATE TABLE znamky (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT NOT NULL,
    predmet_id INT NOT NULL,
    znamka INT CHECK (znamka BETWEEN 1 AND 5),
    datum DATE NOT NULL,
    FOREIGN KEY (student_id) REFERENCES studenti(id) ON DELETE CASCADE,
    FOREIGN KEY (predmet_id) REFERENCES predmety(id) ON DELETE CASCADE
);
        

Vložení testovacích dat

-- Vložení předmětů
INSERT INTO predmety (nazev, zkratka, ucitel) VALUES
    ('Matematika', 'MAT', 'Mgr. Novák'),
    ('Čeština', 'CJL', 'Mgr. Svobodová'),
    ('Informatika', 'INF', 'Ing. Černý'),
    ('Angličtina', 'ANJ', 'Bc. White');

-- Vložení studentů
INSERT INTO studenti (jmeno, prijmeni, email, datum_narozeni, trida) VALUES
    ('Jan', 'Novák', 'jan.novak@skola.cz', '2008-03-15', '9.A'),
    ('Eva', 'Svobodová', 'eva.svobodova@skola.cz', '2008-07-22', '9.A'),
    ('Petr', 'Černý', 'petr.cerny@skola.cz', '2008-01-10', '9.B'),
    ('Anna', 'Veselá', 'anna.vesela@skola.cz', '2008-11-30', '9.B');

-- Vložení známek
INSERT INTO znamky (student_id, predmet_id, znamka, datum) VALUES
    (1, 1, 1, '2024-09-15'),  -- Jan, Matematika, 1
    (1, 2, 2, '2024-09-16'),  -- Jan, Čeština, 2
    (1, 3, 1, '2024-09-17'),  -- Jan, Informatika, 1
    (2, 1, 2, '2024-09-15'),  -- Eva, Matematika, 2
    (2, 2, 1, '2024-09-16'),  -- Eva, Čeština, 1
    (3, 1, 3, '2024-09-15'),  -- Petr, Matematika, 3
    (3, 3, 2, '2024-09-17');  -- Petr, Informatika, 2
        

Struktura databáze

┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│    STUDENTI     │      │     ZNAMKY      │      │    PREDMETY     │
├─────────────────┤      ├─────────────────┤      ├─────────────────┤
│ id (PK)         │◄────►│ id (PK)         │◄────►│ id (PK)         │
│ jmeno           │      │ student_id (FK) │      │ nazev           │
│ prijmeni        │      │ predmet_id (FK) │      │ zkratka         │
│ email           │      │ znamka          │      │ ucitel          │
│ datum_narozeni  │      │ datum           │      └─────────────────┘
│ trida           │      └─────────────────┘
│ prumer          │
└─────────────────┘
        

*** Úkol pro tuto kapitolu

  1. Nainstaluj MySQL Server a MySQL Workbench.
  2. Připoj se k serveru a vytvoř databázi "skola".
  3. Vytvoř tabulky a vlož testovací data.
  4. Vyzkoušej SELECT * FROM studenti; a další dotazy.
  5. Inicializuj Git repozitář a přidej soubor schema.sql s příkazy pro vytvoření tabulek.

V další kapitole: Naučíš se pokročilé SELECT dotazy a JOIN.

← Zpět na obsah