2. diel - SQLite - Vytvorenie databázy a tabuľky
V predchádzajúcej lekcii, Úvod do SQLite a príprava prostredia, sme si povedali niečo o relačných databázach a pripravili sme si prostredie.
V dnešnom SQLite tutoriáli si vytvoríme databázu a do nej nejakú tabuľku.
Vytvorme si databázu, zvyčajne nám pre jeden projekt (web) postačí jedna databáza.
Kliknime v DB Browser for SQLite na New Database. Vyberieme
priečinok, kam chceme databázu uložiť, a vyplníme názov databázy s
príponou .db (napr. web_database.db). V databázach
je zvykom pomenovávať položky bez diakritiky, malými písmenami a s
podtržníkovou notáciou. Je zrejmé, prečo nie je diakritika dobrý nápad,
za veľkými a malými písmenami je Linux, ktorý ich rozlišuje, a väčšina
serverov práve na Linuxe beží.
Potvrdíme a zobrazí sa okno na vytvorenie prvej tabuľky, spomenieme si na
príklad tabuľky používateľov, ktorý sme si ukázali v minulom diele. Prvá
bunka s nadpisom Table od nás chce názov tabuľky, zadáme podľa
pravidiel users. Tabuľka mala stĺpce meno, priezvisko, dátum
narodenia a počet článkov. Ako sme už spomínali, každá tabuľka by mala
mať stĺpec, ktorého hodnota je pre každú položku unikátna. Týmto
stĺpcom začneme a klikneme na tlačidlo Add, v tabuľke nižšie sa
nám objaví riadok, ktorého prvý údaj - názov - prepíšeme na
user_id, dátový typ necháme predvyplnený INTEGER,
teda celé číslo a ďalej zaškrtneme PK a AI. PK
znamená PRIMARY KEY, čo znamená, že tento stĺpec slúži
na identifikáciu riadku v tabuľke a jeho hodnota musí byť unikátna.
AI je skratka AUTOINCREMENT, hodnota
user_id sa teda bude automaticky navyšovať a používatelia sa
budú postupne číslovať. Id je dobré pomenovávať s prefixom
tabuľky, ale nie je to nutné.
Teraz pridáme ďalšie stĺpce, klikneme znova na Add a tentokrát
zadáme first_name. V druhom stĺpci nastavíme hodnotu
TEXT. Toto vykonáme obdobne aj pre stĺpce last_name
a birth_date. Poslednému stĺpcu s názvom
article_count ponecháme dátový typ INTEGER.
Všimneme si, že nižšie sa nám vygeneroval kód v jazyku SQL. Výsledok v DB Browseri vyzerá takto:

Na oboch paneloch vidíme štruktúru našej tabuľky users a
pod ňou kód SQL pre jej vytvorenie, vygenerovaný DB Browserom. Všetko
potvrdíme kliknutím na tlačidlo OK, čím okno zavrieme.
Ak chceme v DB Browseri uložiť akékoľvek úpravy, aby sa prejavili v databáze, musíme v hornej lište kliknúť na tlačidlo Write Changes, čo urobíme práve teraz.
Keďže sa databázy ukladajú ako normálne súbory, kdekoľvek, kde si zvolíte, ich odstránenie sa vykoná ako prosté zmazanie tohto súboru.
Jazyk SQL
SQL označuje Structured Query Language, teda štruktúrovaný dopytovací jazyk. SQL je tzv. jazyk deklaratívny. Zatiaľ čo v imperatívnych jazykoch počítača vlastne hovoríme krok po kroku, čo má urobiť, v jazykoch deklaratívnych iba hovoríme, čo má byť výsledkom a už nás nezaujíma, ako tento výsledok počítač dosiahne. Vďaka tomu sú databázové dotazy zjednodušené na príkaz typu "Vráť mi 10 používateľov s najvyšším hodnotením". Databáza takýto dopyt pochopí, rozloží si ho na nejaké svoje inštrukcie a tak ho spracuje. Nám potom naozaj vráti výsledok bez toho, aby sme tušili, ako k nemu došla. Ak vám príkaz prišiel ako nadsadenie, tak to tak nie je a príkazy naozaj takto vyzerajú. Len sú anglicky.
SQL sa pôvodne volalo SEQUEL (Structured English Query Language) a vzniklo v laboratóriách spoločnosti IBM s cieľom vytvoriť jazyk, ktorým by sa dalo komunikovať s databázou jednoduchou angličtinou. SQL (relačné) databázy sa potom rozširovali a ujali. Dnes sa prakticky nič iné nepoužíva a aj keď má SQL v objektovom programovaní značné nevýhody, firmám sa nechce prechádzať na nič iné (aj keď existujú alternatívne riešenia). Ale to sme odbočili.
Naklikaním tabuľky nám DB Browser vytvoril takýto kód, ktorý si rozoberieme.
CREATE TABLE "users" ( "user_id" INTEGER, "first_name" TEXT, "last_name" TEXT, "birth_date" TEXT, "article_count" INTEGER, PRIMARY KEY("user_id" AUTOINCREMENT) );
Príkaz začína frázou CREATE TABLE, čo ako asi viete,
označuje, že chceme vytvoriť tabuľku. Potom nasleduje meno tabuľky, ktoré
sa v SQLite zvykne dávať do dvojitých úvodzoviek. Do zátvorky sa píšu
názvy jednotlivých stĺpcov s ich dátovými typmi a prípadne aj ďalšími
atribútmi, ako napr. tu PRIMARY KEY a AUTOINCREMENT,
a oddeľujú sa čiarkou. Každý príkaz v SQL zakončujeme bodkočiarkou,
ktorá nechýba ani tu.
V SQL sa väčšinou píšu príkazy veľkými písmenami, to preto, že ich to lepšie odlíši od zvyšku dopytu alebo od kódu našej aplikácie (napr. v PHP). Názvy tabuliek, stĺpcov a ďalšie identifikátory sú naopak malými písmenami a podčiarkovníkovou notáciou. Je dobrým zvykom vkladať ich medzi dvojité úvodzovky (prípadne ďalšie podporované znaky, ako spätné úvodzovky a podobne), ale nie sú povinné a príkazy prebehnú bez problémov aj bez nich.
Spustenie SQL dopytu
Najprv odstránime tabuľku users. Klikneme na ňu a zvolíme
možnosť Delete Table. Potom prejdeme na panel Execute SQL a
do textového poľa hore napíšeme SQL dopyt pre vytvorenie tabuľky, ktorý
sme si pred chvíľkou vysvetlili. Po kliknutí na šípku sa nám nižšie
zobrazí hláška, že dopyt prebehol úspešne, to si môžeme skontrolovať aj
v paneli Database Structure, kde uvidíme úplne to isté, ako po
vytvorení tabuľky naklikaním:

Keby sme chceli odstrániť tabuľku užívateľov pomocou SQL dopytu, tak spustíme nasledujúci príkaz:
DROP TABLE "users";
Tento príkaz by sa dal preložiť ako "Vyhoď tabuľku users",
viac asi nie je potrebné dodávať.
V nasledujúcej lekcii, SQLite - Vkladanie a mazanie dát v tabuľke, si naplníme databázu nejakými dátami 
