zpět: [[Bakalářská státnice - Informatika - Základy informatiky - obor Správa počítačových systémů]]
== Podstata a architektury DB systémů ==
* databáze, systém řízení báze dat (SŘDB)
* ER modelování
** entity a vztahy, entitní typy, vztahové typy, slabý entitní typ, atributy, identifikátory
* relační model
** integritní omezení
** nadklíč, klíč, cizí klíč
** tabulky, řádky, sloupce, schéma tabulky, schéma relační databáze
** převod ER -> relační model
** relace, domény (typy atributů)
** funkční závislosti
** klíčový atribut, neklíčový atribut
** Armstrongova pravidla
** funkční uzávěr
** pokrytí, minimální pokrytí, redundantní atribut, atributový uzávěr
== Normální formy ==
* cílem je především odstranění redundance dat a tím zajištění jejich integrity
* '''1NF''' - každý atribut schématu je elementárního typu a je nestrukturovaný
** tj. tabulka je plochá - dvourozměrné pole, žádné stromy ani grafy
* '''2NF''' - neexistují částečné závislosti neklíčových atributů na klíči
** tj. nějaký atribut nesmí záviset pouze na části klíče -> rozdělit tabulku na dvě
* '''3NF''' - žádný neklíčový atribut není tranzitivně závislý na žádném klíči
** typická závislost: Firma -> PSČ -> Sídlo (rozdělíme dle tranzitivity na tabulky Firma+PSČ a PSČ+Sídlo)
* '''BCNF''' (Boyce-Coddova NF) - každý atribut je závislý na klíči
** tj. žádný samostatný atribut nesmí záviset na něčem jiném než na celém klíči
Další info: [http://en.wikipedia.org/wiki/Database_normalization Database normalization] (Wiki en) - kdyby někdo trval na tom, že chce znát 4NF, 5NF, 6NF a další :-)
== Referenční integrita ==
* pomáhá udržovat vztahy v relačně propojených databázových tabulkách, zabraňuje vzniku nekonzistentních dat
* kontrola přípustných hodnot
* kontrole existence položky s daným klíčem v druhé tabulce (podle cizího klíče)
chování při porušení integrity:
* hlášení chyby, pokud není nastavena jiná akce
* ON UPDATE, ON DELETE - podmínka spuštění akce
* CASCADE - kaskádová aktualizace/smazání
* SET NULL
* SET DEFAULT
* NO ACTION
zdroje:
* [http://cs.wikipedia.org/wiki/Referen%C4%8Dn%C3%AD_integrita Referenční integrita] (Wiki cs)
== Transakční zpracování, vlastnosti transakcí, uzamykací protokoly, zablokování ==
Požadované vlastnosti transakcí ('''ACID'''):
* '''Atomicity''' - transakce se provede buď celá nebo vůbec
* '''Consistency''' - databáze je před i po transakci konzistentní
* '''Isolation''' - souběžné transakce o sobě neví, navzájem se neovlivňují
* '''Durability''' - změny jsou po skončení transakce trvale uloženy v databázi
* úspěšné ukončení transakce - '''COMMIT'''
* neúspěšné
** uživatelský '''ABORT'''
** vynucený ABORT (porušení integrity, neexistující objekt, ...)
** pád systému
* architektura transakcí v SŘBD:
** aplikační program
** manažer transakcí
** rozvrhovač transakcí (scheduler)
** manažer dat
* sériový rozvrh
* prokládání transakcí
* uspořádatelný rozvrh (serializovatelný)
* konflikty WR (čtení nepotvrzených dat), RW (neopakovatelné čtení), WW (přepsání nepotvrzených dat)
* konfliktově uspořádatelný rozvrh, precedenční graf
* (ne)zotavitelný rozvrh
* exkluzivní a sdílené zámky
* uváznutí (deadlock, zablokování), detekce uvzáznutí (waits-for graf), konverze zámků, prevence uváznutí
* fantom
* ARIES - algoritmus pro zotavení po havárii - analysis, redo, undo
uzamykací protokoly:
* '''2PL''' (dvoufázový) - nelze požadovat zámek na entitu, pokud již nějaký zámek na ni transakce měla
* '''S2PL''' (striktní dvoufázový) - všechny zámky uvolněny až při ukončení transakce
* konzervativní 2PL - všechny zámky na začátku transakce - nepoužívané
* '''optimistické řízení''' - třífázový optimistický protokol (lokální datový prostor)
* '''časová razítka'''
== Základy SQL ==
SQL = Structured Query Language
* '''DML''' - Data Manipulation Language - dotazy, přidání, změny, ...
* '''DDL''' - Data Definition Language - práce se schématy (tabulkami)
* '''DCL''' - Data Control Language - nastavení přístupových práv
* '''SELECT''' [DISTINCT] ... FROM ... WHERE ... GROUP BY ... HAVING
* '''WHERE''': porovnání, [NOT] BETWEEN (a AND b), [NOT] LIKE, IS [NOT] NULL, [NOT] IN, EXISTS
spojení:
* CROSS JOIN - kartézský součin
* NATURAL JOIN - přirozené spojení
* INNER JOIN - vnitřní spojení
* UNION JOIN - sjednocené spojení
* LEFT | RIGHT | FULL OUTER JOIN - vnější spojení
* agregační funkce COUNT, MAX, MIN, AVG, SUM
* CREATE TABLE - integritní omezení, referenční integrita
* ALTER TABLE
* DROP TABLE
* INSERT INTO
* DELETE FROM
* UPDATE
* pohledy
== Indexy, triggery, uložené procedury, uživatelé, uživatelská práva ==
'''Indexy''' = pomocná struktura, umožňující rychle vyhledávat záznamy podle vyhledávacího klíče (klíčů)
* indexy organizovány do stránek (podobně jako datové soubory)
* shlukované vs. neshlukované indexy
* B+-strom - B-strom s provázanými listy, snadné rozsahové dotazy, všechny klíče jsou v listech (vnitřní uzly jen pro rozdělení intervalů)
* hašovaný index - hašovací funkce, kapsy
* bitové mapy
* víceatributové indexování (smíšený index)
* prostorové indexování
* fulltextové indexy
* primární a unikátní index
'''Embedded SQL''' = procedurální rozšíření SQL
* je standardizováno, ale kód většinou nepřenosný!
* řídící konstrukce
* kurzory
* triggery - zobecnění integritních omezení, událostí na tabulce/databázi spouštěná uložená procedura
* CREATE PROCEDURE, EXECUTE
Uživatelé:
* vlastní systém uživatelů, oddělený od OS
* příkazy GRANT, REVOKE
* přístupová práva na databáze, tabulky, sloupce, procedury, vytváření, měnění, mazání, ...
zdroje:
* [http://cs.wikipedia.org/wiki/Index_%28datab%C3%A1ze%29 Index (databáze)] (Wiki cs)
== Vícevrstevné architektury ==
zdroj:
* [http://kocour.ms.mff.cuni.cz/~pokorny/papers/MD06.pdf Databázové architektury: současné trendy a jejich vztah k novým požadavkům praxe] (Jaroslav Pokorný, PDF)
* [http://student.cvut.cz/cwut/index.php/Architektury_datab%C3%A1zov%C3%BDch_syst%C3%A9m%C5%AF Architektury databázových systémů] (ČWUT)
* [http://www.fit.vutbr.cz/study/courses/DSI/public/pdf/nove/10_clsrv.pdf Architektura klient/server a třívrstvá architektura] (J. Zendulka, VUTBR)
== Vazba databází na internetové technologie ==
== Správa databázových systémů ==