Uživatelské nástroje

Nástroje pro tento web


informatika:maturita:15a

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
informatika:maturita:15a [24. 03. 2015, 14.09]
rydloadm vytvořeno
informatika:maturita:15a [12. 03. 2021, 14.24] (aktuální)
rydloadm [Základní databázové příkazy]
Řádek 1: Řádek 1:
-*mrnuštík+====== Relační databáze ====== 
 + 
 +===== Pojmy ===== 
 +  ​**databáze** = množina informací 
 +  *  **relační databáze** - množina informací uspořádaná podle vazeb (relací) mezi nimi, data jsou uspořádána do **entit** (= tabulky), které mají dané **atributy** (= jednotlivé sloupce) a v nichž jsou v řádcích dané záznamy 
 +  * **Atribut** = sloupeček tabulky, atribut je určený svým datovým typem (celé číslo, řetězec, desetinné číslo, datum,...), každý atribut má svou doménu (= rozsah hodnot, kterých může nabývat, např. atribut výplata by neměl být záporný takže má rozsah od 0 do maximální velikosti datového typu). 
 + 
 + 
 +===== Technologie ===== 
 + 
 +Všechny tyto databáze jsou postavené na jazyku SQL (Structured Query Language), který byl vyvinut firmou IBM. Liší se akorát v implementaci ukládání dat a přidaných vlastních prvcích. 
 + 
 +  * **MySQL** - vyvinuta firmou Sun Microsystems (dnes koupená Oraclem), má dvojí licencování (GPL a zároveň i komerční licenci) 
 +  * **MariaDB** 
 +  * **PostgreSQL** - open source databáze, která je primárně vyvíjena pro unixové systémy (existují však i balíčky pro systém Windows) 
 +  * **SQLite** - databáze šírená pod licencí Public domain, specifická je tím, že nejde o klasickou databázi klient-server,​ ale o malou knihovnu, kterou vývojář přidá ke své aplikaci, tím pádem se dá použt k uložení dat na klientském zařízení  
 +  * **MS SQL** - komerční databázový systém od firmy Microsoft  
 +  * **Oracle** - komerční databázový systém od firmy Oracle  
 +  * **Azure SQL** a **Amazon Relational Database Services** - databázové systémy sloužící pro ukládání dat do cloudu (buď Amazon Cloud nebo Microsoft Azure) 
 + 
 +===== Vazba ===== 
 + 
 +Vztah mezi daty v jednotlivých entitách (= tabulkách). 
 + 
 +==== 1:1 ==== 
 +Pro každý záznam v tabulce první existuje **pouze jeden** záznam v tabulce druhé. 
 + 
 +Příklad: Mám tabulku občané a tabulku rodná čísla. Každý občan má pouze jedno rodné číslo a každé rodné číslo má pouze jednoho svého občana. 
 + 
 +==== 1:n ==== 
 +Každý záznam v první tabulce může být spojeno s **více záznamy** v tabulce druhé. 
 + 
 +Příklad: Mám tabulku psů a tabulku majitelů. Každý pes má svého pouze jednoho majitele, ale jeden majitel může mít vícero psů. 
 + 
 +==== n:m ==== 
 + 
 +**Více záznamů** v první tabulce může být spojeno s** více záznamy** v tabulce druhé. Tato problematika se řeší tzv. **vazebnou tabulkou**, která obsahuje všechny relace mezi záznamy. 
 + 
 +Příklad: Slovník. Mám tabulku obsahující všechna česká slova, mám druhou tabulku obsahující všechna slovenská slova a mám vazebnou tabulku, která obsahuje všechny možné překlady pro jednotlivá slova. 
 + 
 +{{:​informatika:​maturita:​15_vazbanm.png|}} 
 + 
 +===== Klíče ===== 
 + 
 +==== Primární klíč ==== 
 + 
 +Atribut (=sloupec), který jednoznačně identifikuje každý záznam tabulky, tím pádem by měl být pro každý záznam tabulky unikátní a neměl by mít nulovou hodnotu. 
 + 
 +Příklad: Primárním klíčem každého občana by mohlo být rodné číslo, protože ho má každý unikátní. 
 + 
 +==== Cizí klíč ==== 
 + 
 +Atribut který slouží pro vyjádření vztahu mezi entitami. Můžeme to vidět na příkladu níže. Cizí klíč nemusí být unikátní (u vazeb 1:n a n:m by to ani nebylo možné). 
 + 
 +{{:​informatika:​maturita:​15_ciziklic.png|}} 
 + 
 + 
 +===== Normální formy ===== 
 += normy, které by bylo dobré dodržovat při návrhu tabulky 
 +==== 1 NF ==== 
 +"​Každý atribut by měl obsahovat pouze **atomické hodnoty**."​ 
 + 
 +To znamená, že informace obsažené v atributu by už neměly být rozložitelné na menší jednotky.  
 + 
 +Příklad: Neměl bych mít atribut JmenoAPrijmeni,​ ale měl bych používat dva atributy jeden atribut pro Jmeno a druhý pro Prijmeni, protože nikdy nevím, kdy budu potřebovat jen jméno nebo pouze příjmení. 
 + 
 +==== 2 NF ==== 
 +"​Každý atribut, který není primárním klíčem, by měl být na primárním klíči závislý."​ 
 + 
 +To znamená, že pokud se mi informace v jednom atributu u více záznamů opakují (--> nejsou závislé na primárním kliči), měl bych si pro ně vytvořit speciální tabulku, která bude obsahovat tyto hodnoty, a v původní tabulce akorát dát cizí klíč odkazující na tuto tabulku. 
 + 
 +Příklad: Mám tabulku obsahující moje zboží, které prodávám. V tabulce mám jako atribut jméno dodavatele a jeho číslo, pokud mám více zboží od stejného dodavatele dochází k opakování těchto hodnot. Proto vytvořím novou tabulku obsahující dodavatele a do původní tabulky dám cizí klíč odkazující na tabulku dodavatelů. 
 + 
 +==== 3 NF ==== 
 + 
 +"​Všechny neklíčové atributy by na sobě měly být navzájem nezávislé."​ 
 + 
 +To znamená, že neklíčové atributy, které by na sobě byly závislé bychom měli odsunout do jiné tabulky. 
 + 
 +Příklad: Mám tabulku obsahující zaměstnance a jejich pozice a jejich platy. Zaměstnanci na stejných pozicích by měli mít stejné platy (pokud to nejsou ženy), to znamená, že neklíčové atributy plat a pozice jsou na sobě závislé. Vyřeším to tak, že si vytvořím jinou tabulku obsahující pozice a k nim přidělené platy. 
 + 
 +===== Základní databázové příkazy ===== 
 +  * DDL = Data definition language 
 +    * CREATE TABLE 
 +    * ALTER TABLE 
 +    * DROP TABLE 
 +    * CREATE DATABASE 
 +    * CREATE VIEW 
 +    * ... 
 +  * DML = Data manipulation language 
 +    * SELECT 
 +    * INSERT 
 +    * UPDATE 
 +    * DELETE 
 + 
 + 
 + 
 +  * **SELECT** - vybere data 
 +  * **INSERT** - přidá data 
 +  * **WHERE** - podmínka pro výběr/​změnu dat 
 +  * **ORDER BY** - seřadí vybraná data (ASC - vzestupně, DESC - sestupně) 
 +  * **OR**, **AND** - logické operátory 
 +  * **DELETE** - smaže data z databáze 
 +  * **CREATE TABLE** - vytvoří novou tabulku 
informatika/maturita/15a.1427202553.txt.gz · Poslední úprava: 24. 03. 2015, 14.09 (upraveno mimo DokuWiki)