Databázové systémy Štěpán Šípal
Témata hodiny Druhy databází a využití Souborová databáze Relační databáze Objektová databáze Základní principy relačních databází Pojem relace Tabulky v databázi Klíče v tabulkách Vztahy mezi tabulkami
Témata hodiny II. Referenční integrita Programy pro design databází Jazyk SQL Rekapitulace
Druhy databází a využití Souborová databáze Složité prohledávání. Pokud víme, který soubor potřebujeme, je rychlejší I u relační databáze jsou data uložena v souborech, RDBMS navíc nabízí řadu funkcí pro vyhledávání ap. = určité zpomalení. Není možné jednoduše udržovat integritu dat. Není možné používat transakce, zamykání řádků a další pokročilé funkce.
Relační databáze Základy položil E.F. Codd v roce 1970. Většina dnešních databází pracuje na principu klient/server Systém správy dat se nazývá DBMS (DataBase Management System). Veškerá data v relačních databázích jsou uložena v tabulkách (relacích). RDBMS nám nabízí řadu možností na vyhledávání a spojování dat (indexace, vztahy mezi tabulkami, ...).
Relační databáze II. Každá tabulka obsahuje záznamy, které mají shodné atributy (vlastnosti) Nemusí mít shodné jejich hodnoty! Shodné atributy mají určeny shodné domény (rozsah hodnot - například číslo, text, boolean). Jednotlivé tabulky mezi sebou mohou mít také určité vztahy (ty mohou být určovány další tabulkou) Například tabulka učitelé a tabulka předměty bude mít vztah „učitel“ učí „předmět“.
Objektové databáze Společně s přechodem od strukturovaného programování k objektovému jsou snahy přejít od relačních databází k databázím objektovým, případně objektově-relačním. Objektové databáze umožňují použití obdobných možností jako při objektovém programování – dědičnosti, polymorfismu a dalších. Jsou razantně náročnější na návrh a implementaci, nicméně jejich samotné použití je jednodušší a přirozenější oproti relačním databázím.
Základní principy relační DB Relace Tabulka. Řádky označují jednotlivé záznamy (jedince) v tabulce Například v tabulce učitelé Štěpán Šípal, Tomáš Eismann, ... Sloupečky pak jednotlivé atributy (vlastnosti) tabulky (relace) V tabulce učitelé tak bude atribut pohlaví, narozen, email, ... Atribut v tabulce má většinou tzv. doménu – ta určuje rozsah hodnot, které může atribut (vlastnost) nabývat. Například u věku to bude integer (číslo), u jména varchar (text určité délky).
Klíče v tabulkách Každý záznam v tabulce musí být jednoznačně identifikován Každý záznam by měl být unikátní díky souhrnu svých atributů. Tomuto souhrnu všech hodnot atributů se říká tzv. superklíč. Superklíč není vhodný pro jednoznačné adresování záznamu a jeho výběr. Pro uživatele aplikace (nebo pro navázanou tabulku) je třeba vybrat jeden atribut, který bude jednoznačně identifikovat celý záznam. Takovému atributu pak říkáme primární klíč. Všechny atributy, které mohou být použity jako primární označujeme jako kandidátní klíče.
Klíče v tabulkách II. Superklíč Kandidátní klíč Jakékoliv uskupení atributů (sloupců), které jednoznačně identifikuje záznam (řádek) v tabulce Některé jeho prvky mohou být zbytečné Kandidátní klíč Co nejvíce zjednodušený superklíč Unikátně identifikuje záznam v tabulce Neexistuje menší množství atributů, které by jednoznačně identifikovaly záznam (řádek)
Výběr primárního klíče Vybereme kandidátní klíče (atributy, které by mohly jednoznačně identifikovat záznam). U seznamu osob například rodné číslo, jméno+příjmení, telefon. Zvážíme použitelnost a skutečnou jednoznačnost těchto atributů Jméno+příjmení nemusí být jednoznačné, existuje více Janů Nováků. Telefon nemá ustálený formát, není tedy příliš vhodný jako primární klíč.
Výběr primárního klíče II. Rodné číslo bychom mohli použít jako primární klíč, neboť jednoznačně identifikuje každý řádek (záznam) v tabulce a je jasně definována jeho syntaxe. Často však kvůli jednoduššímu použití pro programátory přidáváme do tabulky primární klíč jako zcela samostatný atribut, do kterého se při zápisu záznamu do tabulky píše automaticky se zvyšující číslo.
Vztahy mezi tabulkami U vztahů vždy nejprv řešíme takzvanou multiplicitu, tedy množství záznamů (řádků) jedné tabulky, které se mohou vázat na určitý řádek tabulky druhé. 1:1 Na jeden záznam v každé tabulce se může vázat pouze jediný záznam v druhé tabulce (případně žádný). Je otázka, zda není vhodné tabulky sloučit do jedné. Například tabulka „lidé“ a tabulka „hesla do systému“.
Vztahy mezi tabulkami 1:n m:n Nejběžnější vztah v relačních databázích. Na jeden řádek v jedné z tabulek se může vázat více záznamů v tabulce druhé. Na jeden záznam v druhé tabulce se váže pouze jediný záznam v tabulce první. Například tabulka „člověk“ a tabulka „telefonní čísla“. m:n Na jeden řádek z tabulky se může vázat více záznamů z druhé tabulky, současně na jeden řádek z druhé tabulky se může vázat více záznamů z první tabulky.
Vztahy mezi tabulkami II. m:n Tento vztah není možné přímo reprezentovat v relační databázi, používá se proto „propojovací“ tabulka, která určí které záznamy budou propojeny (případně může obsahovat ještě nějaké vlastnosti tohoto propojení). Například propojení tabulky „učitelé“ a tabulky „třídy“ pro reprezentaci vztahu učitel učí ve třídách.
Propojování tabulek K propojení jednotlivých tabulek ve vztazích se používají primární a tzv. „cizí“ klíče. Cizí klíč (FK) Sloupec, který se shoduje (váže) na primární klíč v jiné tabulce Musí obsahovat hodnotu PK v navázané tabulce, nebo NIC (null) Hodnota v něm se může v tabulce vícekrát opakovat Je důležité nezaměňovat primární a cizí klíč!
Propojování tabulek II. Při zjišťování multiplicity vztahu mezi tabulkami se musíme „dívat z pohledu jednoho záznamu v každé z těchto tabulek“. Vezmeme tedy jeden záznam z tabulky A a řekneme si, kolik záznamů v tabulce B by se k němu mohlo teoreticky vázat. (vezmeme Štěpána Šípala z tabulky učitelů a řekneme si, kolik by mohl mít telefonů v tabulce telefony). Poté vezmeme jeden záznam z tabulky B a provedeme to samé (vezmeme 777691889 a řekneme si, kolik učitelů by mohlo toto číslo vlastnit).
Propojování tabulek III. V tabulce, jejíž více záznamů se bude vázat pouze na jediný záznam v druhé tabulce (tedy v multiplicitě 1:n to bude tabulka s n záznamy) přidáme nový atribut – takzvaný cizí klíč. Pokud narazíme na vztah m:n, vytvoříme novou tabulku, která bude mít jako atributy cizí klíč tabulky A a cizí klíč tabulky B.
Referenční integrita DBMS by měl zajišťovat takzvanou referenční integritu, tedy měl by zajistit, aby z tabulky nebylo možné odstranit záznam, na který odkazuje cizí klíč záznamu v jiné tabulce. Například by nemělo být možné z tabulky „učitelé“ odstranit záznam Štěpán Šípal, pokud bude mít v tabulce „telefony“ nějaké záznamy. Případně by mělo být možné nastavit tzv. vodopád, v případě smazání Štěpána Šípala by tak DBMS automaticky odstranil korespondující telefony.
Práce s DBMS Pro přístup k DBMS se u relačních databází používá jazyk SQL, upravený dle jednotlivých vydavatelů DBMS (MySQL, MSSQL, Oracle, ...). SQL má několik základních příkazů (SELECT, UPDATE, CREATE, INSERT, DELETE) a velmi jednoduchou – intuitivní syntaxi. Dále se mohou používat nejrůznější klienti, například phpMyAdmin, kteří za člověka SQL příkazy vytvoří.
Děkuji za pozornost