Lekce 2 - MS-SQL krok za krokem: Vytvoření databáze a tabulky
V minulé lekci, MS-SQL krok za krokem: Úvod do MS-SQL a příprava prostředí, jsme si řekli něco o relačních databázích a připravili jsme si prostředí.
Dnes si v tutoriálu vytvoříme databázi a do ní nějakou tabulku.
Komponenty pro práci s databází
Než se pustíme do tvorby databáze, nejprve si zkontrolujeme, že máme ve Visual Studiu nainstalované potřebné nástroje. Otevřeme si Visual Studio Installer a klikneme na možnost Změnit:
V následujícím okně vybereme položku Vývoj desktopových aplikací pomocí .NET a v pravé části zkontrolujeme, zda máme zaškrtnutou položku SQL Server Data Tools:
Pokud je tato položka zaškrtnuta, můžeme instalátor ukončit a přejít k tvorbě projektu. V opačném případě se přepneme na záložku Jednotlivé komponenty a v nové nabídce níže zaškrtneme komponentu SQL Server Data Tools, automaticky se nám označí i další potřebné komponenty. Poté klikneme na tlačítko Změnit, čímž spustíme instalaci nástrojů pro práci s databází:
Poté se již můžeme pustit do tvorby databáze. Obvykle nám pro jeden projekt (web) postačí jedna databáze.
Přidání databáze do nového projektu
Ve Visual Studiu si vytvořte libovolnou aplikaci v C# nebo VB.NET, nejlepší bude, když si asi vytvoříte konzolovou aplikaci. Vybraný jazyk nás vlastně nebude zajímat, protože se budeme věnovat pouze databázi. V okně Solution Explorer klikněte pravým tlačítkem na projekt a vyberte Add -> New Item.
Vyberte kategorii Data a položku Service-based Database. Databázi
pojmenujte třeba databazeProWeb
. V MS-SQL databázích je zvykem
používat CamelCase při pojmenovávání, diakritice se jako vždy vyhneme.
Dialog potvrdíme.
Máme vše připraveno k tomu, abychom se mohli začít učit jazyk T-SQL.
Jazyk T-SQL
T-SQL označuje Transact Structured Query Language, tedy strukturovaný dotazovací jazyk. T-SQL je tzv. jazyk deklarativní. Zatímco u imperativních jazyků počítači vlastně říkáme krok po kroku co má udělat, u jazyků deklarativních pouze říkáme co má být výsledkem a již nás nezajímá, jak tohoto výsledku počítač dosáhne. Díky tomu jsou databázové dotazy zjednodušeny na příkaz typu "Vrať mi 10 uživatelů s nejvyšším hodnocením". Databáze takový dotaz pochopí, rozloží si ho na nějaké své instrukce a tak jej zpracuje. Nám poté opravdu vrátí výsledek, aniž bychom tušili, jak k němu došla. Pokud vám příkaz přišel jako nadsázka, tak tomu tak není a příkazy opravdu takto vypadají. Jen jsou anglicky.
T-SQL se používá na platformě MS-SQL a dokud se nedostanete do jeho hlubin, tak je totožný s SQL. Každý výrobce databáze si SQL trochu upraví, ale základ je vždy stejný.
SQL se původně jmenovalo SEQUEL (Structured English Query Language) a vzniklo v laboratořích společnosti IBM s cílem vytvořit jazyk, kterým by se dalo komunikovat s databází jednoduchou angličtinou. SQL (relační) databáze se poté rozšiřovaly a ujaly. Dnes se prakticky nic jiného nepoužívá a i když má T-SQL v objektovém programování značné nevýhody, firmám se nechce přecházet na nic jiného (i když existují alternativní řešení). Ale to jsme odbočili.
V T-SQL (a SQL obecně) se většinou píší příkazy velkými písmeny, to proto, že je to lépe odliší od zbytku dotazu nebo od kódu naší aplikace (např. v ASP.NET). Názvy tabulek, sloupců a další identifikátory se v T-SQL píší CamelCase notací (první písmeno slova velké, další malá, bez mezer). Je dobrým zvykem je vkládat do hranatých závorek (na české klávesnici AltGt + F a AltGt + G).
Vytvoření tabulky
Databázi si v okně Serve Explorer otevřete. Pokud ho nevidíte, zajděte do menu View > Server Explorer. Databázi si rozklikněte, uvidíte 7 složek, nás zatím bude zajímat složka Tables. Rozklikněte si ji. Nic v ní nebude, protože jsme si zatím žádnou tabulku nepřidali. Klikněte pravým tlačítkem na tuto složku a vyberte Add New Table.
Visual Studio otevře designer tabulky. Tento designer má okno rozdělené na tři části. V horní polovině máme sloupce naší tabulky s jejich datovými typy a dalšími důležitými vlastnostmi a dole výsledný T-SQL kód, který se spustí až budeme chtít databázi vytvořit.
Vpravo nahoře si přidáme do tabulky sloupce. Přidejte si do tabulky
sloupce Jmeno
, Prijmeni
, DatumNarozeni
a
PocetClanku
. Výchozí sloupec Id
, ponecháme.
Přesuňme se k 2. sloupci, kde jsou datové typy jednotlivých sloupců
tabulku. Přednastavený máme nchar(10)
, což jsou textové
řetězce o 10 znacích. Typů je opravdu mnoho, ale my si dlouho (asi až do
konce seriálu) vystačíme jen s několika.
Id
ponecháme naint
Jmeno
aPrijmeni
nastavíme nanvarchar(60)
, to je krátký text o maximálně 60 znacích.- Datum narození na
date
. - Poslední,
PocetClanku
, bude typuint
.
U všech sloupců zrušte zatržení ve sloupci Allow Nulls, což způsobí,
že bude hodnoty vždy nutné zadat. Časem si popíšeme i další datové typy
a NULL
(který jsme zakázali), ale teď vám s nimi nebudu motat
hlavu U datových typů pro
text, pokud to umožňují (s tím vám poradí našeptávač, kterého jste si
již určitě všimli) se do závorek uvádí maximální délka.
Všimněte si, že předdefinovaný sloupec Id
má u sebe ikonku
klíče. Jedná se o tzv. primární klíč. Klíče (někdy indexy) nám
umožňují identifikovat položku v tabulce. Takový primární klíč by měla
mít každá tabulka (i když teoreticky nemusí). Když budeme chtít
uživatele např. vymazat, vymažeme ho podle tohoto klíče (tedy podle
Id
). Kdybychom ho mazali podle jména, smazali bychom několik
položek, protože třeba Janů Nováků tam může být více. Podle
Id
vymažeme vždy jen toho jednoho. Aby se uživatelé číslovali
automaticky, tak sloupci Id
nastavíme Identity specification.
Označte sloupec Id
a v okně Properties (pokud jej nevidíte,
stiskněte F4) si rozbalte nabídku Identity Specification a u
vlastnosti "Is Identity" vyberte true
. Vlastnost Identity Increment
říká, že budeme číslo zvětšovat o 1.
A výsledný návrhář vypadá takto:
Než tabulku odešlete v kódu změňte její název (v hranatých závorkách v kódu) na "Uzivatele". Kód bude nyní vypadat takto:
CREATE TABLE [dbo].[Uzivatele] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Jmeno] NVARCHAR(60) NOT NULL, [Prijmeni] NVARCHAR(60) NOT NULL, [DatumNarozeni] DATE NOT NULL, [PocetClanku] INT NOT NULL )
Navrženou tabulku musíme do databáze "odeslat". Do databáze se pošle SQL dotaz vygenerovaný Visual Studiem, který vidíme v dolní polovině návrháře. Odeslání provede tlačítkem Update vlevo nahoře. Teď se staly dvě události. Tou první je, že nám Visual Studio otevřelo dialog, který (až se načte) bude shrnovat co v databázi měníme a jaký by to mohlo mít dopad. V našem případě se ni zvláštního neděje a proto zpráva bude stručná a krátká. Ale kdybychom třeba přidávali sloupce, Visual Studio nás informuje o skutečnosti, jakou hodnotu budou mít nově přidané sloupce u již stávajících položek. Až se dialog načte, potvrďte ho tlačítkem Update Database.
Dále nám Visual Studio otevřelo okno Data Tools Operation. Zde se objevila jedna položka, která se změnila v zelenou fajfku (pokud vše proběhlo jak má). Když si ji rozkliknete, uvidíte, že operace, kterou jsem provedli, Visual Studio doplnilo tím, že se serveru zeptalo právě na možné důsledky a ty nám zobrazilo. Poté vygenerovalo script, ten spustilo a ten proběhl úspěšně.
Když si okno Server Explorer aktualizujete (první tlačítko v nástrojové liště tohoto okna), tak se tam nová tabulka objeví.
Nyní si projdeme T-SQL kód který Visual Studio vytvořilo.
CREATE TABLE [dbo].[Uzivatele] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Jmeno] NVARCHAR(60) NOT NULL, [Prijmeni] NVARCHAR(60) NOT NULL, [DatumNarozeni] DATE NOT NULL, [PocetClanku] INT NOT NULL )
První řádek je jasný. Na dalších řádcích se definují jednotlivé
sloupce tabulky a jejich datový typ. NOT NULL
je to, proč jsme
rušili zatržítka, tedy že sloupce nesmí být nevyplněné. O hodnotě
NULL
se dozvíte v některém z dalších dílů. U
nvarchar
k typu uvádíme i počet znaků. Id
je
označeno jako primární klíč tabulky a IDENTITY
nastavuje, aby
databáze každému novému uživateli přiřadila o 1 větší ID
,
než měl ten poslední.
Pokud bychom se rozhodli tabulku odstranit, provedeme to v Server Exploreru. Databázi bychom odstranili v Solution Exploreru.
Spouštění scriptu T-SQL
Na databázi můžeme spustit libovolný T-SQL script. Stačí na ni v Server Exploreru kliknout pravým tlačítkem a vybrat New Query.
Otevře se nám nový soubor SQL a tam vložíme T-SQL kód. Zkusme si přes zdrojový kód odstranit naší tabulku, to provedeme příkazem:
DROP TABLE [Uzivatele];
Když chceme kód zpracovat, klikneme na zelenou šipku Execute, která je vlevo nahoře, jako bylo tlačítko Update u tabulek.
V Server Exploreru se můžete ujistit, že tabulka z databáze opravdu zmizela, nezapomeňte jej předtím obnovit. Nyní si zkuste tabulku znovu vytvořit naším SQL dotazem:
CREATE TABLE [dbo].[Uzivatele] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Jmeno] NVARCHAR(60) NOT NULL, [Prijmeni] NVARCHAR(60) NOT NULL, [DatumNarozeni] DATE NOT NULL, [PocetClanku] INT NOT NULL )
V příští lekci, MS-SQL krok za krokem: Vkládání a mazání dat v tabulce, si naší tabulku již naplníme nějakými daty .