Jazyk SQL: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(3 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.)
Riadok 1: Riadok 1:
 
{{Skripta_dbs}}
 
{{Skripta_dbs}}
{{Draft}}
 
 
Jazyk SQL (Structured Query Language) je štandardizovaný jazyk pre prístup k dátam databázy.
 
Jazyk SQL (Structured Query Language) je štandardizovaný jazyk pre prístup k dátam databázy.
 
==Čo sa dá robiť pomocou SQL==
 
==Čo sa dá robiť pomocou SQL==
* SQL dokáže vykonávať dotazy nad databázou
+
* SQL dokáže vykonávať dotazy nad databázou.
* SQL môže načítať dáta z databázy
+
* SQL môže načítať dáta z databázy.
* SQL môže vkladať záznamy do databázy
+
* SQL môže vkladať záznamy do databázy.
* SQL môže aktualizovať záznamy v databáze
+
* SQL môže aktualizovať záznamy v databáze.
* SQL môže odstraňovať záznamy z databázy
+
* SQL môže odstraňovať záznamy z databázy.
* pomocou SQL je možné vytvárať nové databázy
+
* pomocou SQL je možné vytvárať nové databázy.
* pomocou SQL je možné vytvárať nové tabuľky v databáze
+
* pomocou SQL je možné vytvárať nové tabuľky v databáze.
* pomocou SQL je možné vytvárať uložené procedúry v databáze
+
* pomocou SQL je možné vytvárať uložené procedúry v databáze.
* pomocou SQL je možné vytvoriť pohľady v databáze
+
* pomocou SQL je možné vytvoriť pohľady v databáze.
* SQL dokáže nastaviť používateľské oprávnenie pre tabuľky, procedúry a pohľady
+
* SQL dokáže nastaviť používateľské oprávnenie pre tabuľky, procedúry a pohľady.
Jazyk SQL je case-sensitive, to znamená je neberie ohľad na veľkosť písmen. V praxi to znamená, že výraz ''select'' má rovnaký význam ako ''SELECT''.
+
Jazyk SQL nie je case-sensitive, to znamená že neberie ohľad na veľkosť písmen. V praxi to znamená, že výraz ''select'' má rovnaký význam ako ''SELECT''.
==Rozdelenie jazyka SQL==
+
==Štruktúra jazyka SQL==
 
Jazyk SQL môžeme deliť na podskupiny:
 
Jazyk SQL môžeme deliť na podskupiny:
;DML - Data Manipulation Language:DML je rodina programovacích jazykov, ktoré umožňujú používateľom vkladať, mazať a aktualizovať údaje v databáze. V SQL sa používan na načítanie a manipuláciu s dátami v relačnej databáze. Patria sem príkazy: SELECT, INSERT, UPDATE, DELETE.
+
;DML - Data Manipulation Language.:DML je rodina programovacích jazykov, ktoré umožňujú používateľom vkladať, mazať a aktualizovať údaje v databáze. V SQL sa používa na načítanie a manipuláciu s dátami v relačnej databáze. Patria sem príkazy: SELECT, INSERT, UPDATE, DELETE.
;DDL - Data Definition Language: Jazyk DDL je časť jazyka SQL pre definíciu dát. Patria sem príkazy, pomocou ktorých môžeme vytvárať a mazať databázy a tabuľky. Jedná sa o príkazy: CREATE, DROP, ALTER
+
;DDL - Data Definition Language.: Jazyk DDL je časť jazyka SQL pre definíciu dát. Patria sem príkazy, pomocou ktorých môžeme vytvárať a mazať databázy a tabuľky. Jedná sa o príkazy: CREATE, DROP, ALTER.
;DCL - Data Control Language: DCL je podmnožina jazyka SQL pre riadenie prístupu k databáze, tabuľkám databázy a ostatným objektom databázy. Patria sem príkazy GRANT, REVOKE
+
;DCL - Data Control Language.: DCL je podmnožina jazyka SQL pre riadenie prístupu k databáze, tabuľkám databázy a ostatným objektom databázy. Patria sem príkazy GRANT, REVOKE.
==Vzorový príklad - databáza WORLD==
+
;TCL - Transaction Control Language.:Jazyk pre riadenie transakcií: Patria sem príkazy COMMIT a ROLLBACK, ktoré sa používajú pri operáciách, ktoré by mohli v prípade výskytu nepredvídateľnej chyby narušiť konzistenciu databázy.
 +
 
 +
==Vzorový príklad 1 - databáza WORLD==
 
[[Súbor:Databáza world.jpg|thumb|right]]
 
[[Súbor:Databáza world.jpg|thumb|right]]
 
Pre vysvetlenie SQL príkazov budeme pracovať s databázou "world"<ref>Databáza WORLD - http://dev.mysql.com/doc/world-setup/en/world-setup.html</ref>, ktorá je distribuovaná ako vzorová databáza pre databázový server MySQL <ref>MySQL server - http://www.mysql.com/downloads/mysql/</ref>
 
Pre vysvetlenie SQL príkazov budeme pracovať s databázou "world"<ref>Databáza WORLD - http://dev.mysql.com/doc/world-setup/en/world-setup.html</ref>, ktorá je distribuovaná ako vzorová databáza pre databázový server MySQL <ref>MySQL server - http://www.mysql.com/downloads/mysql/</ref>
 
===Databáza world===
 
===Databáza world===
Databáza world obsahuje informácie o krajinách, mestách a jazykoch používaných v jednotlivých krajinách sveta. Databáza obsahuje 3 tabuľky:
+
Databáza ''world'' obsahuje informácie o krajinách, mestách a jazykoch používaných v jednotlivých krajinách sveta. Databáza obsahuje 3 tabuľky:
* city
+
* ''city'',
* country
+
* ''country'',
* countrylanguage
+
* ''countrylanguage''.
Na nasledujúcom obrázku je ER diagram datazázy world
+
 
 +
Na nasledujúcom obrázku je ER diagram datazázy ''world''.
  
 
[[Súbor:Er diagram world.png|center|frame|ER diagram datazázy world]]
 
[[Súbor:Er diagram world.png|center|frame|ER diagram datazázy world]]
Riadok 34: Riadok 36:
  
 
====Zoznam miest sveta====
 
====Zoznam miest sveta====
V tabuľke ''city'' sa nachádza zoznam niektorých, vybraných miest sveta.  Spolu je v tabuľke 4079 záznamov. Mesto je opísané nasledujúcimi atribútmi:
+
V tabuľke ''city'' je zoznam niektorých, vybraných miest sveta.  Spolu je v tabuľke 4079 záznamov. Mesto je opísané nasledujúcimi atribútmi:
 
{|class="wikitable"
 
{|class="wikitable"
|+ Tabuľka city (databáza world)
+
|+ Tabuľka ''city'' (databáza ''world'')
 
|-
 
|-
 
!ID
 
!ID
|indentifikátor záznamu (primárny kľúč tabuľku). Slúži na jednoznačnú identifikáciu mesta.
+
|indentifikátor záznamu (primárny kľúč tabuľky). Slúži na jednoznačnú identifikáciu mesta.
 
|-
 
|-
 
!Name
 
!Name
Riadok 56: Riadok 58:
  
 
====Zoznam krajín sveta====
 
====Zoznam krajín sveta====
V tabuľke ''country'' sa nachádza zoznam niektorých, vybraných krajín sveta. Spolu je v tabuľke 239 záznamov. Krajina je opísaná nasledujúcimi atribútmi:
+
V tabuľke ''country'' je zoznam krajín sveta. Spolu je v tabuľke 239 záznamov. Krajina je opísaná nasledujúcimi atribútmi:
 
{|class="wikitable"
 
{|class="wikitable"
|+ Tabuľka country (databáza world)
+
|+ Tabuľka ''country'' (databáza ''world'')
 
|-
 
|-
 
!Code
 
!Code
Riadok 67: Riadok 69:
 
|-
 
|-
 
!Continent
 
!Continent
|Kontinent, na ktorom sa krajina nachádza. Sú povolené len nasledujúce hodnoty: 'Asia','Europe','North America','Africa','Oceania','Antarctica','South America'
+
|Kontinent, na ktorom sa krajina nachádza. Sú povolené len nasledujúce hodnoty: 'Asia', 'Europe', 'North America', 'Africa', 'Oceania', 'Antarctica', 'South America'.
 
|-
 
|-
 
!Region
 
!Region
Riadok 82: Riadok 84:
 
|-
 
|-
 
!LifeExpectancy
 
!LifeExpectancy
|Priemerná dĺžka života
+
|Priemerná dĺžka života.
 
|-
 
|-
 
!GNP
 
!GNP
|Hrubý domáci produkt
+
|Hrubý domáci produkt.
 
|-
 
|-
 
!GNPOld
 
!GNPOld
Riadok 109: Riadok 111:
  
 
====Zoznam jazykov používaných v krajine====
 
====Zoznam jazykov používaných v krajine====
==Vzorový príklad - databáza Prekladový slovník==
+
V tabuľke ''countrylanguage'' sa nachádza zoznam niektorých, vybraných jazykov. Spolu je v tabuľke 984 záznamov. Jazyk je opísaný nasledujúcimi atribútmi:
V tabuľke countrylanguage sa nachádza zoznam niektorých, vybraných jazykov. Spolu je v tabuľke 984 záznamov. jazyk je opísaný nasledujúcimi atribútmi:
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|+ Tabuľka countrylanguage (databáza world)
 
|+ Tabuľka countrylanguage (databáza world)
Riadok 127: Riadok 128:
 
|}
 
|}
  
Primárny kľúč: (CountryCode, Language)
+
Primárny kľúč je kompozitný, teda zložený z dvoch atribútov: ''CountryCode'' a ''Language''.
 +
 
 +
==Vzorový príklad 2 - databáza Prekladový slovník==
 +
V nasledujúcom texte bude navrhnutý ER diagram prekladového slovníka. V prvej verzii pôjde o jednosmerný prekladový slovník, v druhej verzii už bude obojsmerný prekladový slovník.
 +
 
 
===Slovník ver.1 - Anglicko-Slovenský slovník===
 
===Slovník ver.1 - Anglicko-Slovenský slovník===
 +
 
'''Úloha:'''
 
'''Úloha:'''
  
 
Vytvorte funkčný databázový model jednosmerného prekladového slovníka z angličtiny do slovenčiny. Anglické slová budú mať pridelené kategórie.
 
Vytvorte funkčný databázový model jednosmerného prekladového slovníka z angličtiny do slovenčiny. Anglické slová budú mať pridelené kategórie.
 +
  
 
'''Analýza úlohy:'''
 
'''Analýza úlohy:'''
  
Úlohou je vytvoriť model slovníka, v ktorom bude možné jednému anglickému slovu priradiť viacero slovenských prekladov. V danej úlohe identifikujeme nasledovné entity:
+
Úlohou je vytvoriť model slovníka, v ktorom bude možné jednému anglickému slovu priradiť viacero slovenských prekladov. Návrh entít pre tento príklad je uvedený [[MySQL workbench - tvorba modelu|'Vytvorenie Entitno-Relačného modelu']]. V danej úlohe identifikujeme nasledovné entity:
*anglické slová (slova_en)
+
*anglické slová (''slova_en'')
*slovenské slová (slova_sk)
+
*slovenské slová (''slova_sk'')
*kategórie anglických slov (kategorie)
+
*kategórie anglických slov (''kategorie'')
  
 
Pre dané entity identifikujeme nasledujúce atribúty:
 
Pre dané entity identifikujeme nasledujúce atribúty:
*'''slova_en'''
+
*'''slova_en'''(''*id, slovo_en, kategoria_id'')
**identifikačné číslo slova (primárny kľúč)
+
*'''slova_sk'''(''*id, slovo_sk, slovo_en_id'')
**anglické slovo
+
*'''kategorie'''(''*id, kategoria'')
**kategória, do ktorej slovo patrí. Kategória bude reprezentovaná odkazom na názov kategórie v entite kategorie.
 
*'''slova_sk'''
 
**identifikačné číslo slova (primárny kľúč)
 
**slovenské slovo
 
*'''kategorie'''
 
**identifikačné číslo kategórie (primárny kľúč)
 
**názov kategórie
 
  
 
Medzi danými entitami identifikujeme nasledujúcu mohutnosť:
 
Medzi danými entitami identifikujeme nasledujúcu mohutnosť:
* slova_en - slova_sk
+
* ''slova_en'' - ''slova_sk''
** mohutnosť 1:N
+
** mohutnosť 1:N,
** modalita: povinná účasť
+
** modalita: 1  (povinná účasť).
* kategorie - slova_en
+
* ''kategorie'' - ''slova_en''
**mohutnosť 1:N
+
** mohutnosť 1:N,
** modalita: povinná účasť
+
** modalita: 1 (povinná účasť).
  
 
Pre navrhnuté entity a identifikované vzťahy medzi nimi navrhujeme nasledujúci entitno-relačný diagram.
 
Pre navrhnuté entity a identifikované vzťahy medzi nimi navrhujeme nasledujúci entitno-relačný diagram.
Riadok 164: Riadok 164:
 
[[Súbor:Prekladový slovník jednosmerný ERD.png|center|frame|ERD - Jednosmerný prekladový slovník]]
 
[[Súbor:Prekladový slovník jednosmerný ERD.png|center|frame|ERD - Jednosmerný prekladový slovník]]
  
Navrhnuté dátové typu pre atribúty entít sú vidieť na predchádzajúco obrázku.
+
Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.
  
 
===Slovník ver.2 - obojsmerný slovník===
 
===Slovník ver.2 - obojsmerný slovník===
Riadok 173: Riadok 173:
  
 
'''Analýza úlohy:'''
 
'''Analýza úlohy:'''
Podľa zadanie je potrebné navrhnúť obojstranný prekladový slovník. V praxi to znamená, že jedno anglické slovo môže mať viac slovenských prekladov a jedno slovenské slovo môže mať taktiež viac slovenských prekladov. Medzi týmito entitami je teda vzťah M:N.
+
 
 +
Podľa zadania je potrebné navrhnúť obojstranný prekladový slovník. V praxi to znamená, že jedno anglické slovo môže mať viac slovenských prekladov a jedno slovenské slovo môže mať taktiež viac anglických prekladov. Medzi týmito entitami je teda vzťah M:N.
 
Vieme, že vzťah M:N sa nedá priamo namodelovať. Rozdelíme ho teda na dva vzťahy:
 
Vieme, že vzťah M:N sa nedá priamo namodelovať. Rozdelíme ho teda na dva vzťahy:
* slova_en - preklad (1:N)
+
* ''slova_en'' - ''preklad'' (1:N)
* preklad - slova_sk (N:1)
+
* ''preklad'' - ''slova_sk'' (N:1)
  
Pre entitu preklad definujeme nasledujúce atribúty:
+
Pre entitu ''preklad'' definujeme nasledujúce atribúty:
*en_id - odkaz na anglické slovo (cudzí kľúč)
+
*''en_id'' - odkaz na anglické slovo (cudzí kľúč),
*sk_id - odkaz na slovenské slovo (cudzí kľúč)
+
*''sk_id'' - odkaz na slovenské slovo (cudzí kľúč),
*kategorie_id - odkaz na kategóriu (cudzí kľúč)
+
*''kategorie_id'' - odkaz na kategóriu (cudzí kľúč).
  
Pre túto entitu určíme kompozintý primárny kľúč. Bude pozostávať z dvoch atribútov: (en_id, sk_id). Na nasledujúcom obrázku je obsah tabuľky preklad. V ľavej časti vidieť len hodnoty cudzích kľúčov tak, ako sú uložené v tabuľke. V pravej časti je namiesto týchto číselných hodnôt zobrazené samotné slovenské, resp anglické slovo a aj názov kategórie.
+
Pre túto entitu určíme kompozitný primárny kľúč. Bude pozostávať z dvoch atribútov: (''en_id'', ''sk_id''). Na nasledujúcom obrázku je obsah tabuľky preklad. V ľavej časti vidieť len hodnoty cudzích kľúčov tak, ako sú uložené v tabuľke. V pravej časti je namiesto týchto číselných hodnôt zobrazené samotné slovenské, resp anglické slovo a aj názov kategórie.
  
  
Riadok 192: Riadok 193:
 
[[Súbor:Prekladový slovník obojsmerný ERD.png|center|frame|ERD obojsmerného prekladového slovníka]]
 
[[Súbor:Prekladový slovník obojsmerný ERD.png|center|frame|ERD obojsmerného prekladového slovníka]]
  
Navrhnuté dátové typu pre atribúty entít sú vidieť na predchádzajúco obrázku.
+
Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.
  
 
==Spôsob zápisu syntaxe SQL==
 
==Spôsob zápisu syntaxe SQL==
V nasledujúcich častiach budú vysvetľované príkazy jazyka SQL. Pri definovaní syntaxe v programovacích jazykoch je zaužívaný spôsob pomocou '''Backus-Naurovej formy'''<ref>Backusova-Naurova forma http://en.wikipedia.org/wiki/Backus_Naur_Form</ref> - BNF.  Je to uviverzálny spôsob akým je možno vysvetliť syntax programovacieho jazyka.
+
V nasledujúcich častiach budú vysvetľované príkazy jazyka SQL. Pri definovaní syntaxe v programovacích jazykoch je zaužívaný spôsob pomocou '''Backus-Naurovej formy'''<ref>Backusova-Naurova forma http://en.wikipedia.org/wiki/Backus_Naur_Form</ref> - BNF.  Je to univerzálny spôsob, akým je možno vysvetliť syntax programovacieho jazyka.
  
V krátkosti vysvetlíme tento zápis:
+
V krátkosti vysvetlíme tento zápis.
  
 
V pravidlách BNF sa vyskytujú  metasymboly (symboly, které nie sú súčasťou syntaxe, ale umožňujú zápis syntaxe):
 
V pravidlách BNF sa vyskytujú  metasymboly (symboly, které nie sú súčasťou syntaxe, ale umožňujú zápis syntaxe):
*<nowiki>::=</nowiki>  oddeľuje ľabú a pravú stranu výrazu. Ľavá strana - syntaktický zápis, ktorý ideme definovať. Pravá strana - definícia syntaxe.
+
*<nowiki>::=</nowiki>  oddeľuje ľavú a pravú stranu výrazu. Ľavá strana - syntaktický zápis, ktorý ideme definovať. Pravá strana - definícia syntaxe.
*<nowiki>|</nowiki> oddělovač variánt
+
*<nowiki>|</nowiki> oddeľovač variánt
*<nowiki>[ ]</nowiki> zátvorky vymezujúce nepovinnú časť
+
*<math>[ ]</math> zátvorky vymedzujúce nepovinnú časť
 
*<nowiki>{ }</nowiki> metazátvorky (ohraničujú určitú časť pravidla)
 
*<nowiki>{ }</nowiki> metazátvorky (ohraničujú určitú časť pravidla)
*<nowiki>...</nowiki> symbol označujúcí nula nebo viac opakovaní bezprostredne predchásdzajúceho symbolu (nebo více symbolů v metazávorkách)
+
*<nowiki>'...'</nowiki> symbol označujúci nula nebo viac opakovaní bezprostredne predchádzajúceho symbolu (alebo viac symbolov v metazávorkách).
  
  
Riadok 220: Riadok 221:
 
* V príkaze INSERT sú povinné tieto časti: ''INSERT INTO tabulka'' a ''obsah''
 
* V príkaze INSERT sú povinné tieto časti: ''INSERT INTO tabulka'' a ''obsah''
 
*to, čo je v hranatých zátvorkách, je nepovinné.
 
*to, čo je v hranatých zátvorkách, je nepovinné.
**ak budeme uvádzať názvy stĺpcov, musíme uviesť názov minimálne jedného ''stlpec1'', ale možeme uviesť aj iné názvy stĺpcov. Pri názvoch hranaté zátvorky nepíšeme.
+
**ak budeme uvádzať názvy stĺpcov, musíme uviesť názov minimálne jedného (''stlpec1''), ale možeme uviesť aj iné názvy stĺpcov (obsah v zátvorkách <nowiki>{ }</nowiki>). Pri názvoch hranaté zátvorky nepíšeme.
 
==Zdroje a odkazy==
 
==Zdroje a odkazy==
 
<references/>
 
<references/>

Aktuálna revízia z 19:16, 17. január 2011

Jazyk SQL (Structured Query Language) je štandardizovaný jazyk pre prístup k dátam databázy.

Čo sa dá robiť pomocou SQL

  • SQL dokáže vykonávať dotazy nad databázou.
  • SQL môže načítať dáta z databázy.
  • SQL môže vkladať záznamy do databázy.
  • SQL môže aktualizovať záznamy v databáze.
  • SQL môže odstraňovať záznamy z databázy.
  • pomocou SQL je možné vytvárať nové databázy.
  • pomocou SQL je možné vytvárať nové tabuľky v databáze.
  • pomocou SQL je možné vytvárať uložené procedúry v databáze.
  • pomocou SQL je možné vytvoriť pohľady v databáze.
  • SQL dokáže nastaviť používateľské oprávnenie pre tabuľky, procedúry a pohľady.

Jazyk SQL nie je case-sensitive, to znamená že neberie ohľad na veľkosť písmen. V praxi to znamená, že výraz select má rovnaký význam ako SELECT.

Štruktúra jazyka SQL

Jazyk SQL môžeme deliť na podskupiny:

DML - Data Manipulation Language.
DML je rodina programovacích jazykov, ktoré umožňujú používateľom vkladať, mazať a aktualizovať údaje v databáze. V SQL sa používa na načítanie a manipuláciu s dátami v relačnej databáze. Patria sem príkazy: SELECT, INSERT, UPDATE, DELETE.
DDL - Data Definition Language.
Jazyk DDL je časť jazyka SQL pre definíciu dát. Patria sem príkazy, pomocou ktorých môžeme vytvárať a mazať databázy a tabuľky. Jedná sa o príkazy: CREATE, DROP, ALTER.
DCL - Data Control Language.
DCL je podmnožina jazyka SQL pre riadenie prístupu k databáze, tabuľkám databázy a ostatným objektom databázy. Patria sem príkazy GRANT, REVOKE.
TCL - Transaction Control Language.
Jazyk pre riadenie transakcií: Patria sem príkazy COMMIT a ROLLBACK, ktoré sa používajú pri operáciách, ktoré by mohli v prípade výskytu nepredvídateľnej chyby narušiť konzistenciu databázy.

Vzorový príklad 1 - databáza WORLD

Databáza world.jpg

Pre vysvetlenie SQL príkazov budeme pracovať s databázou "world"[1], ktorá je distribuovaná ako vzorová databáza pre databázový server MySQL [2]

Databáza world

Databáza world obsahuje informácie o krajinách, mestách a jazykoch používaných v jednotlivých krajinách sveta. Databáza obsahuje 3 tabuľky:

  • city,
  • country,
  • countrylanguage.

Na nasledujúcom obrázku je ER diagram datazázy world.

ER diagram datazázy world

Vzorová databáza sa dá stiahnuť zo stránok MySQL: http://dev.mysql.com/doc/index-other.html

Zoznam miest sveta

V tabuľke city je zoznam niektorých, vybraných miest sveta. Spolu je v tabuľke 4079 záznamov. Mesto je opísané nasledujúcimi atribútmi:

Tabuľka city (databáza world)
ID indentifikátor záznamu (primárny kľúč tabuľky). Slúži na jednoznačnú identifikáciu mesta.
Name Názov mesta.
CountryCode 3-miestny kód krajiny, v ktorom sa nachádza dané mesto.
District Definuje okres, v ktorom sa nachádza dané mesto
Population Populácia v danom meste.

Primárny kľúč: ID

Zoznam krajín sveta

V tabuľke country je zoznam krajín sveta. Spolu je v tabuľke 239 záznamov. Krajina je opísaná nasledujúcimi atribútmi:

Tabuľka country (databáza world)
Code Trojznakový kód krajiny.
Name Názov krajiny v anglickom jazyku.
Continent Kontinent, na ktorom sa krajina nachádza. Sú povolené len nasledujúce hodnoty: 'Asia', 'Europe', 'North America', 'Africa', 'Oceania', 'Antarctica', 'South America'.
Region Oblasť v rámci kontinentu.
SurfaceArea Rozloha krajiny.
IndepYear Rok založenia krajiny.
Population Počet obyvateľov krajiny.
LifeExpectancy Priemerná dĺžka života.
GNP Hrubý domáci produkt.
GNPOld Hrubý domáci produkt za predchádzajúce sledované obdobie.
LocalName Názov krajiny v lokálnom jazyku.
GovernmentForm Forma vlády.
HeadOfState Hlava štátu.
Capital Odkaz na hlavné mesto. Toto číslo odkazuje na ID mesta v tabuľke city.
Code2 Dvojznakový kód krajiny.

Primárny kľúč: code

Zoznam jazykov používaných v krajine

V tabuľke countrylanguage sa nachádza zoznam niektorých, vybraných jazykov. Spolu je v tabuľke 984 záznamov. Jazyk je opísaný nasledujúcimi atribútmi:

Tabuľka countrylanguage (databáza world)
CountryCode 3-miestny kód krajiny.
Language Názov jazyka
IsOfficial Informácia o tom, či je jazyk v krajine oficiálny. Atribút môže obsahovať iba hodnoty 'F' (false) alebo 'T' (true).
Percentage Percento populácie, ktoré v danej krajine hovorí daným jazykom.

Primárny kľúč je kompozitný, teda zložený z dvoch atribútov: CountryCode a Language.

Vzorový príklad 2 - databáza Prekladový slovník

V nasledujúcom texte bude navrhnutý ER diagram prekladového slovníka. V prvej verzii pôjde o jednosmerný prekladový slovník, v druhej verzii už bude obojsmerný prekladový slovník.

Slovník ver.1 - Anglicko-Slovenský slovník

Úloha:

Vytvorte funkčný databázový model jednosmerného prekladového slovníka z angličtiny do slovenčiny. Anglické slová budú mať pridelené kategórie.


Analýza úlohy:

Úlohou je vytvoriť model slovníka, v ktorom bude možné jednému anglickému slovu priradiť viacero slovenských prekladov. Návrh entít pre tento príklad je uvedený 'Vytvorenie Entitno-Relačného modelu'. V danej úlohe identifikujeme nasledovné entity:

  • anglické slová (slova_en)
  • slovenské slová (slova_sk)
  • kategórie anglických slov (kategorie)

Pre dané entity identifikujeme nasledujúce atribúty:

  • slova_en(*id, slovo_en, kategoria_id)
  • slova_sk(*id, slovo_sk, slovo_en_id)
  • kategorie(*id, kategoria)

Medzi danými entitami identifikujeme nasledujúcu mohutnosť:

  • slova_en - slova_sk
    • mohutnosť 1:N,
    • modalita: 1 (povinná účasť).
  • kategorie - slova_en
    • mohutnosť 1:N,
    • modalita: 1 (povinná účasť).

Pre navrhnuté entity a identifikované vzťahy medzi nimi navrhujeme nasledujúci entitno-relačný diagram.

ERD - Jednosmerný prekladový slovník

Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.

Slovník ver.2 - obojsmerný slovník

Úloha:

Vytvorte funkčný databázový model obojstranného prekladového slovníka. Daný preklad slova (anglického/slovenského) bude zaradený do kategórie.


Analýza úlohy:

Podľa zadania je potrebné navrhnúť obojstranný prekladový slovník. V praxi to znamená, že jedno anglické slovo môže mať viac slovenských prekladov a jedno slovenské slovo môže mať taktiež viac anglických prekladov. Medzi týmito entitami je teda vzťah M:N. Vieme, že vzťah M:N sa nedá priamo namodelovať. Rozdelíme ho teda na dva vzťahy:

  • slova_en - preklad (1:N)
  • preklad - slova_sk (N:1)

Pre entitu preklad definujeme nasledujúce atribúty:

  • en_id - odkaz na anglické slovo (cudzí kľúč),
  • sk_id - odkaz na slovenské slovo (cudzí kľúč),
  • kategorie_id - odkaz na kategóriu (cudzí kľúč).

Pre túto entitu určíme kompozitný primárny kľúč. Bude pozostávať z dvoch atribútov: (en_id, sk_id). Na nasledujúcom obrázku je obsah tabuľky preklad. V ľavej časti vidieť len hodnoty cudzích kľúčov tak, ako sú uložené v tabuľke. V pravej časti je namiesto týchto číselných hodnôt zobrazené samotné slovenské, resp anglické slovo a aj názov kategórie.


Obsah tabuľky preklad

Na nasledujúcom obrázku je entitno relačný diagram pre obojsmerný prekladový slovník.

ERD obojsmerného prekladového slovníka

Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.

Spôsob zápisu syntaxe SQL

V nasledujúcich častiach budú vysvetľované príkazy jazyka SQL. Pri definovaní syntaxe v programovacích jazykoch je zaužívaný spôsob pomocou Backus-Naurovej formy[3] - BNF. Je to univerzálny spôsob, akým je možno vysvetliť syntax programovacieho jazyka.

V krátkosti vysvetlíme tento zápis.

V pravidlách BNF sa vyskytujú metasymboly (symboly, které nie sú súčasťou syntaxe, ale umožňujú zápis syntaxe):

  • ::= oddeľuje ľavú a pravú stranu výrazu. Ľavá strana - syntaktický zápis, ktorý ideme definovať. Pravá strana - definícia syntaxe.
  • | oddeľovač variánt
  • [math][ ][/math] zátvorky vymedzujúce nepovinnú časť
  • { } metazátvorky (ohraničujú určitú časť pravidla)
  • '...' symbol označujúci nula nebo viac opakovaní bezprostredne predchádzajúceho symbolu (alebo viac symbolov v metazávorkách).


Príklad:

   INSERT::= INSERT INTO tabulka [(stlpec1 {,stlpec2}… )] obsah
   
   obsah ::= VALUES ( hodnota {, hodnota }… ) | DEFAULT VALUES | dotazový_výraz

Vysvetlenie:

  • Definujeme syntaktické pravidlá pre príkaz INSERT.
  • V príkaze INSERT sú povinné tieto časti: INSERT INTO tabulka a obsah
  • to, čo je v hranatých zátvorkách, je nepovinné.
    • ak budeme uvádzať názvy stĺpcov, musíme uviesť názov minimálne jedného (stlpec1), ale možeme uviesť aj iné názvy stĺpcov (obsah v zátvorkách { }). Pri názvoch hranaté zátvorky nepíšeme.

Zdroje a odkazy