Databáze - Studijní materiál

Názvosloví

Výraz Výraz česky Význam
Entita Jsoucno Je to jsoucno, objekt, věc, která existuje a má nějaké vlastnosti. V databázi, si lze entitu představit jako tabulku v níž jsou uloženy její vlastnosti.
Atribut Vlastnost Atribut vyjadřuje vlastnosti entit. V databázi si lze atribut představit jako sloupec v tabulce. Např. barvy = červená. Atribut může obsahovat různé hodnoty. Obsah atributu je vždy závislý na datovém typu, který jsme pro atribut zvolili.
Record Záznam Záznam je konkrétní podoba atributu. Může mít různé podoby, lde toho jaký datový typ je atribut. Záznamem může být 203 (číslo), 2000 (Rok), červená (string), 1 / true (Boolean) a další.
Primary Key Primární klíč Slouží k jednoznačné identifikaci. Primární klíč nám v databázi jednoznačně identifikuje jeden řádek se záznamy v řádku. Je vždy unikátní a nenulový. Jako příklad může být primární klíč např. rodné číslo u osob, VIN kód u vozidla.
Forein Key Cizí klíč Cizí klíč, je primární klíč jako atribut v jiné tabulce. Představme si tabulku se seznamem pracovních pozic. Každá pozice má své ID_Pozice (Primární klíč). V tabulce, kde máme seznam zaměstnanců pak využijeme právě toto ID_Pozice pro identifikování pracovní pozice zaměstnance. ID_Pozice se tak stává cizím klíčem v tabulce zaměstnanců.
Index Index slouží k rychlému a efektivnímu vyhledávání v tabulce. Pořadí záznamů v tabulce se nikdy nemění a pomocí indexu lze jednodušeji a rychleji vyhledávat záznamy v tabulce. Primární klíč je vždy indexem.
Relace Vztah Relace vznikají mezi entitami. Podle toho jaký vztah zvolím mezi entitami, definuji chování databáze. Vztah je vždy obousměrný, proto se nikdy nezapomínejme ptát jaký vztah bude od jedné entity k druhé a od druhé k entity k první.
Kardinalita Mocnost Vyjadřuje mi mocnost vztahu (Relace). Tedy jak mocný je vztah mezi entitami. Máme tři případy mocnosti:
1:1 - Jedna osoba může mít právě jedno rodné číslo / Rodné číslo může patřit právě jedné osobě
1:N - Jedna osoba může právě jednu pracovní pozici / Pracovní pozici může vykonávat více osob
N:M - Jedna osoba může navštívit N představení / Představení se může hrát pro M osob
Vytvořením relace s kardinalitou N:M se nám v databázi vytvoří další tabulku, do níž zapisujeme primární klíče z obou entit.
Diagram Diagram nebo také graf, je grafické znázornění postupu, algoritmu, návrhu či funkce pomocí standardních značek jako jsou: čtverce, kosočtverce, obdélníky, čáry a šipky.
Datatype Datový typ Datový typ nám určuje, jakých hodnot může atribut nabývat. Tedy zda hodnoty budou číselné (Numbers), textové (String) nebo časové (Datetime). Speciální aplikací u číselných hodnot jsou Boolean, tedy hodnoty nabývající 0 nebo 1 = False nebo True.
Not Null [NN] Není prázdné Udává vlastnost atributu nebo proměnné a říká, že atribut nebo proměnná nesmí být nulová a vždy musí obsahovat nějaký záznam.
Unique [UQ] Unikátní Udává vlastnost atributu a říká, že atribut musí být v tabulce databáze unikátní a nesmí se ve sloupci atributu nikdy opakovat.
Binary [BIN] Binární Hodnoty uložené v atributu jsou binárního charakteru, tedy řetězce 0 a 1. Při řazení těchto záznamů, databáze vychází z velikosti hodnot (čísla).
Unsigned [UN] Vlastnost atributu Unsigned nám udává, že datový typ atributu může být pouze kladný. Tedy datový typu TINYINT, který má rozmezí hodnot -127 až 128 celkem 255 hodnot, bude v případě atributu s unsigned dosahovat rozmezí hodnot 0 až 255.
ZeroFill [ZF] ZeroFill je vlastnost atributu, která nám automaticky vyplňuje prázdná místa nulou. Představme si X a Y souřadnice, které mají vždy délku 3 digitů (3-místné číslo). V případě zapsání hodnot do databáze (1,6), (12,3) a (125,412) budou u hodnot s méně jak 3 digity automaticky doplněny nuly. Tedy: (001,006), (012,003) a (125,412).
Auto Increment [AI] Auto Incremet je vlastnost číselného atributu. V případě, že do pole atributu vložím číslo např. 12 a v dalším kroku se mi bude číslo automaticky navyšovat o jedna větší. Tedy další záznam v tabulce bude č. 13. Tuto vlastnost atributu nejčastěji využíváme u Primárního klíče s volitelným číselným ID, který se automaticky doplňuje při vkládání.
Default Tato vlastnost atributu nám říká, jaká se vloží vždy předdefinovaná hodnota, pokud do atributu nevložím žádnou hodnotu. Jako defaultní hodnotu si mohu zvolit boolean např. 0 tedy false a při každé nové registraci uživatele je automaticky uživatel nepovolený. Jakmile se uživatel autorizuje, hodnota se změní na 1, tedy true.
Entity-Relationship [ER] Entitně-Relační Je výrazem pro označení databázového modelu využívající entity a mezi nimi vzájemné relace. Od zkratka ER se dále odvíjí další pojmy jako ERD (ER-Diagram), ERM (ER-Model) aj.
Structured Query Language [SQL] Strukturovaný dotazovací jazyk SQL je jazyk pro práci s daty v DBS. Pomocí tohoto jazyka pracujeme s daty, vyhledáváme, měníme nebo zapisujeme. Jazyk vychází ze svého předchůdce SEQUEL, který je rozvněž významově podobný anglickému jazyku. Tzn., že pokud se chce zepsat na výběr hodnot z tabulky zeptám se pomocí SELECT (vyselektuj, vyber), pokud se chci zeptat odkud FROM (z, odkud) atd.
SEQUEL [Síkvl] Je to rovněž dotazovací jazyk pro manipulaci s databázemi a je předchůzcem dnes standardního jazyka SQL.
Data Manipulation Language [DML] Datově manipulující jazyk Pomocí této skupiny SQL příkazů manipulujeme s daty, jako například SELECT pro vyhledávání, UPDATE pro změnu v již existujících datech, INSERT pro vložení nových dat, atd.
Data Definition Language [DDL] Datově definující jazyk DDL je skupina SQL příkazů, které nám nějakým způsobem definují data. Např. CREATE, ALTER, DROP a další.
  Příkazy pro řízení přístupových práv Takovéto příkazy v jazyce SQL definují jaká oprávnění se mají použít pro přístup k určitým informacím. Práva můžeme přiřadit pomocí GRANT a nebo odebrat pomocí REVOKE.
  Příkazy pro řízení transakcí Skupina těchto příkazů spadá do již k pokročilé a systémové práci s DBS. Jsou užitečné v případě, kdy provádíme s databází velké změny a nechceme narušit integritu dat. Proto můžeme transakci dat začnout, čímž databázi řekneme, aby si nastavila tzv. FLAG, odkud začala transakce pomocí START TRANSACTION a po úspěšné transakci potvrdíme COMMIT. V případě, že se převedení dat nezdařilo úspěšně, upozorníme DBS pomocí ROLLBACK a databáze se vrátí ke svému původnímu stavu, kde si označila FLAG.
SELECT Selektuj, vyber SQL dotaz pro vyhledávání dat z nějaké tabulky. Např.: SELECT * FROM ZAKAZNIK;
INSERT Vlož Často využíváme ve spojení INSER INTO, což znamená vlož do (a nyní vybereme do jaké tabulky). Např.: INSERT INTO ZAKAZNIK (idZakaznika, jmeno, prijmeni) VALUES (10, 'Jann', 'Novotny')
UPDATE Aktualizuj, uprav SQL dotaz, kterým aktualizujeme, nebo upravujeme již existující hodnoty v DB. Např.: UPDATE ZAKAZNIK SET jmeno = Jan, prijmeni = Novak WHERE idZakaznika = 10;
DELETE Smaž, odrstraň Pomocí tohoto SQL dotazu smažeme vybraný řádek záznamu za tabulky. Např.: DELETE FROM ZAKAZNIK WHERE idZakaznika = 10;
Aggregation clause Agregační kauzule Klauzule označuje takové součásti SQL dotazu, které nám pomáhají přesněji identifikovat hledané data v DB a slouží k tomu, abychom vytvořili jakýsi filtr. Nejtypičtější klauzulí je WHERE, které používáme pro identifikaci "kde" se atribut záznamu nachází nebo splňuje nějakou podmínku.
FROM Odkud Klauzule, která nám říká z jaké tabulky budeme s daty pracovat. Např.: SELECT atribut FROM NÁZEV_TABULKY;
WHERE Kde je Klauzili používáme, chceme-li specifikovat přesný nebo přibližný výběr nějakých záznamů v tabulce. Např.: SELECT * FROM ZAKAZNIK WHERE idZakaznika = 10;
LIKE Jako Tuto kaluzuli nejčastěji využíváme ve spojení s klauzilí WHERE a umožňuje nám hledat pomocí regulárních výrazů a zástupných znaků jako je %. Např.: SELECT * FROM ZAKAZNIK WHERE jmeno LIKE 'A%'; V tomto příkazu hledáme všechny zákazníky v tabulce zákazníků, jejichž jména začínají na A.
ORDER BY Seřaď podle Tato klauzule se využívá pro seřazení výstupu výsledků podle nějakého kritéria. Například vzestupně posle abecedy: SELECT jmeno FROM ZAKAZNIK ORDER BY ASC. ASC je zkratka pro Asscending = vzestupně.
Asscending [ASC] Vzestupně Doplňující klauzule, která říká, že se mají výstupy řadit vzestupně.
Desscending [DESC] Sestupně Doplňující klauzule, která říká, že se mají výstupy řadit sestupně.
Count() Spočítej Count() je funkce, kterou můžeme v SQL využít, pro součet všech záznamů, které vyhovují nějakému filtru. Nemusíme tak počítat řádky ručně, ale využijeme funkci.

Normální formy

  • 0. NF - Žádný atribut nesmí být nulový. Tzn. že sloupec, který reprezentuje atribut, nesmí být celý prázdný. Z pravidla se tato NF ani nezmiňuje, je samozřejmostí.
  • 1. NF - Všechny hodnoty u atributu musí být atomické. Tzn., že nelze zapsat celou adresu do jedné buňky k jednomu atributu, ale adresu rozložím na části.
  • 2. NF - Každý neklíčový atribut je plně závislý na kandidátním klíči. Pokud chci dohledat celou adresu pracoviště zaměstnance, musím k tomu využít primární klíč zaměstnance a klíč (primární nebo cizí) pracoviště.
  • 3. NF - Všechny neklíčové atributy musí být na sobě vzájemně nezávislé. Tzn., že nesmím evidovat např. mzdu u konkrétního zaměstnance, ale vytvořím si tabulku, ve které eviduji jaká pracovní pozice má tabulkový plat. A tuto pracovní pozici přiřadím konkrétním zaměstnancům.

Všechny Normální formy musím plnit postupně. Tedy proto, abych mohl splnit 2. NF, musím nejdříve splnit 1. NF. Zároveň abych mohl splnit 3. NF, musím mít splněné všechny předchozí normální formy.

Normálních forem je celkem 7, v praxi se však zmiňují a využívají první 3 NF.

Příklady SQL dotazů

Legenda

ENTITA | ENTITA.nazev_sloupce | Příkazy | 'Textový řetězec' | Číselná hodnota

SELECT

SELECT hledany_atribut1, hledany_atribut2 FROM ENTITA [název tabulky ve které hledáme];

SELECT nazev, zkratka FROM JAZYK;

SELECT * FROM TITUL WHERE rok_vzniku < 2000 ORDER BY nazev ASC;

SELECT jmeno, prijmeni, email FROM ZAKAZNIK WHERE prijmeni LIKE 'B%';

SELECT nazev FROM TITUL WHERE stopaz IS NOT NULL;

INSERT

INSERT INTO ENTITA [název tabulky do které zapisujeme] (atribut1,atribut2,... atribut99)
VALUES ('Řetězec atributu1','Řetězec atributu2', ... 'Řetězec atributu99');

INSERT INTO JAZYK (nazev,zkratka) VALUES
('Čeština','CZK'),
('Angličtina','ENG'),
('Ruština','RUS');

UPDATE

UPDATE ENTITA [tabulka ve které upravujeme]
SET atribut1 = 'řetězec atributu 1, na který opravujeme', atribut2 = 'řetězec atributu 2, na který opravujeme'
WHERE atribut99 = číslo nebo řetězec atributu 99, podle kterého identifikujeme opravovaný záznam;

UPDATE ZAKAZNIK SET jmeno = 'Jan', prijmeni = 'Novak' WHERE idZakaznik = 10;

DELETE

DELETE FROM ENTITA [název tabulky ze které mažeme záznam]
WHERE atribut99 = číslo nebo řetězec atributu 99, podle kterého identifikujeme opravovaný záznam;

DELETE FROM ZAKAZNIK WHERE idZakaznik = 10;

JOIN

SELECT OSOBNOST.jmeno, OSOBNOST.prijmeni, ZEME.nazev
FROM OSOBNOST
JOIN ZEME
ON OSOBNOST.ZEME_idZEME = ZEME.idZEME
WHERE ZEME.kontinent = 'Evropa'
ORDER BY ZEME.nazev, OSOBNOST.prijmeni ASC;

SELECT POJEM.nazev, POJEM.popis, ZEME.nazev
FROM POJEM
JOIN ZEME
ON POJEM.ZEME_idZEME = ZEME.idZEME
WHERE ZEME.kontinent = 'Afrika'
ORDER BY POJEM.nazev ASC;

SELECT OSOBNOST.jmeno, OSOBNOST.prijmeni, ZEME.nazev, KATEGORIE.nazev
FROM OSOBNOST
JOIN ZEME
JOIN KATEGORIE
JOIN OSOBNOST_has_KATEGORIE
ON OSOBNOST.ZEME_idZEME = ZEME.idZEME
AND OSOBNOST_has_KATEGORIE.KATEGORIE_idKATEGORIE = KATEGORIE.idKATEGORIE
AND OSOBNOST.idOSOBNOST = OSOBNOST_has_KATEGORIE.OSOBNOST_idOSOBNOST
WHERE KATEGORIE.idKATEGORIE IN(3,6,9) OR KATEGORIE.idKATEGORIE BETWEEN 3 AND 9
ORDER BY OSOBNOST.prijmeni ASC;

Soubory ke stažení

Doporučená literatura

  • ŠEDA, M. Databázové systémy. Brno: VUT, 2002, Dostupné z URL: http://www.uai.fme.vutbr.cz/~mseda/DBS02_BS.pdf
  • POKORNÝ, J., VALENTA, M. Databázové systémy. Praha: ČVUT, 2013
  • RJORDAN, R. Vytváříme relační databázové aplikace. Praha : ComputerPress, 2000
  • MASLAKOWSKI, M. Naučte se MySQL za 21 dní. Praha : Computer Press, 2001
  • ROMAN, S. Návrh a programování databází. Praha : ComputerPress, 2000
  • LACKO, L. Web a databáze. Praha : ComputerPress, 2001
  • STRAKA, M. Vývoj databázových aplikací. Praha : Grada Publishing, 2000