2. diel - MS-SQL krok za krokom: Vytvorenie databázy a tabuľky
V predchádzajúcej lekcii, MS-SQL krok za krokom: Úvod do MS-SQL a príprava prostredia, sme si povedali niečo o relačných databázach a pripravili sme si prostredie.
Dnes si v MS-SQL tutoriáli založíme prvú databázu a vytvoríme v nej tabuľku používateľov. Osvojíme si tak základnú prácu s Visual Studiom a naučíme sa prvé T-SQL príkazy.
Vytvorenie databázy vo Visual Studiu
Otvoríme si Visual Studio a v úvodnom okne prejdeme pomocou tlačidla Continue without code do hlavného okna:

K MS-SQL databázam budeme pristupovať cez okno SQL Server Object Explorer. Otvoríme si ho cez ponuku Zobrazit:

V okne SQL Server Object Explorer si rozbalíme položky SQL Server a následne (localdb)\MSSQLLocalDB:

Na screenshotoch je použitá inštancia
(localdb)\ProjectModels. Ak ju vo svojom Visual Studiu nevidíte,
použite štandardnú inštanciu (localdb)\MSSQLLocalDB. Na účely
kurzu sú použiteľné obe varianty.
Na vytvorenie novej LocalDB databázy klikneme pravým tlačidlom myši na priečinok Databases a zvolíme Add New Database:

Databázu pomenujeme databazaPreWeb. Diakritike sa ako vždy
vyhneme. Miesto uloženia si zvolíme ľubovoľné, môžeme však ponechať aj
to predvolené. Dialóg potvrdíme:

Ak sa nám databáza v okne SQL Server Object Explorer ihneď nezobrazí, stačí kliknúť na tlačidlo Refresh v ľavom hornom rohu okna:

Máme všetko pripravené na to, aby sme sa mohli začať učiť jazyk T-SQL.
Jazyk T-SQL
T-SQL označuje Transact Structured Query Language, teda štruktúrovaný dotazovací jazyk. T-SQL je jazyk deklaratívny. Zatiaľ čo pri imperatívnych jazykoch počítaču hovoríme krok za krokom, čo má urobiť, pri deklaratívnych jazykoch iba hovoríme, čo má byť výsledkom, a už nás nezaujíma, ako počítač tento výsledok 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 dotaz 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 dospela. Ak vám príkaz prišiel ako nadsádzka, tak to tak nie je a príkazy naozaj takto vyzerajú. Len sú anglicky.
T-SQL sa používa na platforme MS-SQL a kým sa nedostanete do jeho hlbín, je totožný s SQL. Každý výrobca databázy si SQL trochu upraví, ale základ je vždy rovnaký.
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á T-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.
V T-SQL (a SQL všeobecne) sa väčšinou píšu príkazy veľkými písmenami, pretože ich to lepšie odlíši od zvyšku dotazu alebo od kódu našej aplikácie (napríklad v ASP.NET Core). Názvy tabuliek, stĺpcov a ďalšie identifikátory sa v T-SQL píšu PascalCase notáciou (prvé písmeno slova veľké, ďalšie malé, bez medzier). Je dobrým zvykom vkladať ich do hranatých zátvoriek (na českej klávesnici Alt Gr + F a Alt Gr + G).
Vytvorenie tabuľky
Naším cieľom bude vytvoriť tabuľku používateľov s nasledujúcou štruktúrou:
| Meno | Priezvisko | Dátum narodenia | Počet článkov |
|---|---|---|---|
| Ján | Kováč | 11.3.1984 | 17 |
| Tomáš | Horváth | 1.2.1989 | 6 |
| Jozef | Tóth | 20.12.1972 | 9 |
| Michaela | Sláviková | 14.8.1990 | 1 |
Pripomeňme si, že položky (konkrétne tu používateľov) v databázových tabuľkách ukladáme na jednotlivé riadky, stĺpce potom označujú atribúty, ktoré položky majú. Zatiaľ nám pôjde iba o vytvorenie samotnej tabuľky, teda o definovanie jej stĺpcov. Dátami tabuľku naplníme až neskôr.
V okne SQL Server Object Explorer si otvoríme našu databázu. Uvidíme osem priečinkov, nás zatiaľ bude zaujímať iba priečinok Tables. Rozkliknime si ho. Okrem nejakých systémových tabuliek sa v ňom žiadne nenachádzajú. Vlastnú tabuľku vytvoríme kliknutím pravým tlačidlom na priečinok Tables a výberom Add New Table...:

Vo Visual Studiu sa nám otvorí designer (návrhár) tabuľky:

CREATE TABLE [dbo].[Table] ( [Id] INT NOT NULL PRIMARY KEY );
Tento návrhár má okno rozdelené na dve časti. V hornej polovici máme
prehľadné definície stĺpcov tabuľky s ich názvami (Name),
dátovými typmi (Data Type) a ďalšími dôležitými vlastnosťami.
Každému stĺpcu databázovej tabuľky tu zodpovedá jeden riadok. Môžeme tu
vidieť preddefinovaný predvolený stĺpec Id, t. j. unikátny
identifikátor. Dole potom máme výsledný T-SQL kód, ktorý sa spustí, až
keď budeme chcieť tabuľku skutočne vytvoriť.
Predvolený stĺpec Id si ponecháme a pridáme pod neho do
tabuľky stĺpce Meno, Priezvisko,
DatumNarodenia a PocetClankov. Vždy najprv zadáme
názov stĺpca Name a následne pridanie potvrdíme klávesom
Enter:

Dátové typy
Presuňme sa k druhému stĺpcu návrhára, kde sú dátové
typy jednotlivých stĺpcov tabuľky. Prednastavený
máme nchar(10), čo sú textové reťazce s maximálnou dĺžkou
10 znakov. Typov je naozaj veľa, ale my si dlho vystačíme iba s
niekoľkými:
Idponecháme na typeint, teda celé číslo.MenoaPriezviskonastavíme nanvarchar(60), to je krátky text s maximálne 60 znakmi.- Dátum narodenia zmeníme na typ
datepredstavujúci dátum. - Posledný stĺpec,
PocetClankov, bude typuint.
Pri všetkých stĺpcoch zrušíme zaškrtnutie hodnoty
Allow Nulls, čo spôsobí, že bude hodnoty vždy potrebné
zadať. Časom si popíšeme aj ďalšie dátové typy a
NULL (ktorý sme zakázali), ale teraz vám nimi nebudeme motať
hlavu
Pri dátových typoch
pre text, ak to umožňujú (s tým nám poradí našepkávač, ktorého sme si
už určite všimli), sa do zátvoriek uvádza maximálna dĺžka.
Okrem typu date MS-SQL podporuje aj dátový typ
datetime2 (prípadne starší datetime), do ktorého
možno okrem dátumu uložiť aj čas.
Primárny kľúč
Všimnime si, že preddefinovaný stĺpec Id má pri sebe ikonku
kľúča. Ide o tzv. primárny kľúč. Kľúče (niekedy
indexy) nám umožňujú identifikovať položku v tabuľke. Takýto primárny
kľúč by mala mať každá tabuľka (aj keď teoreticky nemusí).
Keď budeme chcieť používateľa napríklad vymazať, vymažeme ho podľa
tohto kľúča (teda podľa stĺpca Id). Keby sme ho mazali podľa
mena, mohli by sme nechcene zmazať hneď niekoľko položiek, pretože
napríklad Jánov Kováčov môže byť v tabuľke viac. Podľa Id
vymažeme vždy iba toho jedného.
Aby sa používatelia po vložení do tabuľky číslovali
automaticky, nastavíme stĺpcu Id tzv. Identity
Specification. Označme stĺpec Id a v okne
Vlastnosti (otvoríme cez menu Zobrazit a potom Okno
vlastností, prípadne stlačením klávesu F4) si rozbaľme
ponuku Identity Specification. Vlastnosť Is Identity nastavme
na True:

Vlastnosť Identity Increment hovorí, že sa bude číslo
zväčšovať vždy o 1.
CREATE TABLE [dbo].[Table] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Meno] NVARCHAR(60) NOT NULL, [Priezvisko] NVARCHAR(60) NOT NULL, [DatumNarodenia] DATE NOT NULL, [PocetClankov] INT NOT NULL )
Premenovanie tabuľky
Skôr než tabuľku skutočne vytvoríme, tak v kóde ešte zmeníme jej
aktuálny názov Table (v hranatých zátvorkách) na
Pouzivatelia. Kód bude teraz vyzerať takto:
CREATE TABLE [dbo].[Pouzivatelia] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Meno] NVARCHAR(60) NOT NULL, [Priezvisko] NVARCHAR(60) NOT NULL, [DatumNarodenia] DATE NOT NULL, [PocetClankov] INT NOT NULL )
Odoslanie tabuľky
Navrhnutú tabuľku musíme do databázy „odoslať“. Do databázy sa pošle SQL dotaz vygenerovaný Visual Studiom, ktorý vidíme v dolnej polovici návrhára. Odoslanie vykonáme kliknutím na tlačidlo Update v ľavom hornom rohu návrhára:

Teraz sa stali dve udalosti. Tou prvou je, že nám Visual Studio otvorilo dialóg, ktorý (až sa načíta) bude zhrnovať, čo v databáze meníme a aký by to mohlo mať dopad. V našom prípade sa nič zvláštne nedeje, a preto bude správa stručná a krátka. Ale keby sme napríklad pridávali stĺpce, Visual Studio nás informuje o tom, akú hodnotu budú mať novo pridané stĺpce pri existujúcich položkách tabuľky. Až sa dialóg načíta, potvrdíme ho tlačidlom Update Database:

Ďalej nám Visual Studio otvorilo okno Data Tools Operations. Tu sa objavila jedna položka, ktorá sa zmenila na zelenú fajku (ak všetko prebehlo správne). Keď si ju rozklikneme, uvidíme, že operáciu, ktorú sme vykonali, Visual Studio doplnilo tým, že sa servera opýtalo na možné dôsledky a tie nám pred okamihom zobrazilo v dialógu. Potom vygenerovalo skript, spustilo ho a ten prebehol úspešne:

Keď si okno SQL Server Object Explorer aktualizujeme (prvé tlačidlo a Aktualizovat v nástrojovej lište tohto okna), nová tabuľka sa objaví v našej databáze:

Ak by sme sa rozhodli tabuľku odstrániť, vykonáme to v okne SQL Server Object Explorer – pravým tlačidlom klikneme na tabuľku a vyberieme Delete. Rovnako by sme mohli odstrániť aj samotnú databázu.
Vygenerovaný T-SQL kód
Teraz si ešte prejdeme T-SQL kód, ktorý Visual Studio vytvorilo:
CREATE TABLE [dbo].[Pouzivatelia] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Meno] NVARCHAR(60) NOT NULL, [Priezvisko] NVARCHAR(60) NOT NULL, [DatumNarodenia] DATE NOT NULL, [PocetClankov] INT NOT NULL )
Prvý riadok je celkom jasný – príkazom CREATE TABLE
vytvárame tabuľku Pouzivatelia, dbo tu odkazuje na
samotnú databázu. Na ďalších riadkoch sa definujú jednotlivé stĺpce
tabuľky a ich dátový typ. Pri nvarchar k typu uvádzame aj
počet znakov. NOT NULL je to, prečo sme rušili zaškrtnutie
Allow Nulls, teda že stĺpce nesmú byť nevyplnené. O hodnote
NULL sa dozviete v niektorom z ďalších dielov.
Id je pomocou PRIMARY KEY označené ako primárny
kľúč tabuľky. IDENTITY mu navyše nastavuje, aby databáza
každému novému používateľovi priradila o 1 väčšie Id, než
mal ten posledný.
Spúšťanie T-SQL skriptu
Na databáze môžeme spustiť ľubovoľný T-SQL skript. Stačí na ňu v okne SQL Server Object Explorer kliknúť pravým tlačidlom a vybrať New Query...:

Otvorí sa nám nový SQL súbor, do ktorého môžeme napísať náš T-SQL
kód. Skúsme si cez zdrojový kód odstrániť našu tabuľku
Pouzivatelia, to vykonáme nasledujúcim príkazom:
DROP TABLE [Pouzivatelia];
V SQL je dobrou praxou každý príkaz vždy ukončiť
bodkočiarkou ;, ktorá označuje koniec daného príkazu. V T-SQL
je to však vo väčšine prípadov nepovinné.
Keď chceme kód spracovať, klikneme na zelenú šípku Execute, ktorá je vľavo hore, ako bolo tlačidlo Update pri tabuľkách:

V okne SQL Server Object Explorer sa môžeme uistiť, že tabuľka
z databázy naozaj zmizla, nezabudnime ho predtým obnoviť kliknutím pravým
tlačidlom na položku databazaPreWeb a výberom
Aktualizovať. Nakoniec si tabuľku vytvoríme znova naším SQL
dotazom:
CREATE TABLE [dbo].[Pouzivatelia] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Meno] NVARCHAR(60) NOT NULL, [Priezvisko] NVARCHAR(60) NOT NULL, [DatumNarodenia] DATE NOT NULL, [PocetClankov] INT NOT NULL )
V nasledujúcej lekcii, MS-SQL krok za krokom: Vkladanie a mazanie dát v tabuľke, si do našej tabuľky už pridáme nejaké
dáta 