Lekce 9 - Vytvoření databáze v MS SQL Management Studio
V předešlém cvičení, Řešené úlohy k 7.-8. lekci Databáze v C# - ADO.NET, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
Dnes si v C# .NET tutoriálu vytvoříme databázi, se kterou budeme po zbytek kurzu komunikovat.
Vytvoření databáze
Způsobů, jak databázi vytvořit, je mnoho. Jako nástroj můžeme používat buď SQL Server Management Studio nebo přímo Visual Studio. Jako jednodušší způsob se mi zdá vytvořit databázi přímo v Management Studiu, jelikož u Visual Studia je více postupů a ještě se liší podle verzí. Vytvoříme si databázi na serveru, který máme nainstalovaný na našem počítači. Po nainstalování SQL Serveru spustíme nástroj SQL Server Configuration Manager.
SQL Server Configuration Manager
Aplikace slouží ke zjištění a konfigurování běžících služeb. Okno aplikace vypadá následovně:

Vidíme zde běžící služby, měli byste vidět váš SQL Server, který
jsme nainstalovali (a také při instalaci pojmenovali). Můj má název
MSSQLSERVER2008
. Pokud má stav "Stopped", zapněte jej. Nyní jsme
se tedy přesvědčili, že je server na daném stroji přítomen a že je
běží.
Nyní spustíme SQL Server Management Studio.
SQL Server Management Studio
Aplikace je administračním nástrojem, ve které budeme navrhovat strukturu databáze a také pracovat s jejím obsahem (tedy s uloženými daty).
Jako první nás Management Studio vyzve k zadání údajů pro připojení k
databázi. Jako jméno serveru zadáme
localhost\JMENO_VASEHO_SERVERU
, u mne tedy
localhost\MSSQLSERVER2008
. Po kliknutí na Connect se k serveru
připojíme.
V levé části aplikace vidíme Object Explorer, kde se zobrazila stromová struktura našeho serveru. Rozbalíme položku Databases, vy zde pravděpodobně budete mít pouze složku se systémovými databázemi, já zde mám již několik databází z různých projektů. Na položku Databases klikneme pravým tlačítkem a zvolíme New database.

Jelikož naše testovací aplikace pro práci s databází bude jednoduchý
slovníček, databázi pojmenujeme SlovnicekDB
.

Databáze se objeví v Object Exploreru, rozbalíme ji a stejně tak její položku Tables, kde máme opět jen systémové tabulky.
O tabulkách již byla řeč minule, víme, že takto se data do relační databáze ukládají (relační databáze se používají téměř všude, nerelační jsou výjimkou). Budeme chtít ukládat slovíčka do naší databáze ke slovníčku. Nejprve musíme vytvořit novou tabulku, kde definujeme sloupce, tedy vlastnosti, jaké slovíčko má. Na položku Tables klikneme pravým tlačítkem a zvolíme možnost New Table.

Jak již bylo nastíněno, každá položka v databázi (tedy řádek v
tabulce) by měla mít unikátní identifikátor (sloupec, ve kterém je pro
každý řádek hodnota jedinečná). K tomuto účelu slouží tzv.
primární klíč. Je to obyčejný sloupec, který se
nejčastěji pojmenuje jednoduše Id
a bude typu int
.
Názvy sloupců budeme psát s velkým počátečním písmenem.
Ačkoli doteď jsem se snažil psát ukázkové aplikace v češtině, databázi si navrhneme v angličtině. To proto, že ke konci kurzu budeme používat technologie, které skloňují názvy tabulek a umí samozřejmě jen anglicky.
Dále přidáme další 2 sloupce: Czech
a English
.
Jedná se o znění slovíčka v češtině a v angličtině. Sloupce budou typu
nvarchar(50)
. Jedná se o řetězec znaků kde 50 je maximální
počet znaků. Neplést s typem nchar
, kde se nejedná o
maximální velikost, ale text je vždy dlouhý 50 znaků. Ještě existují
typy char
a varchar
(bez n
), ty
nepodporují kódování Unicode. Pro krátký text budeme tedy vždy používat
typ nvarchar
. Nakonec přidáme poslední sloupec
Difficulty
, značící obtížnost slovíčka. Bude typu
int
.
Pokud vás napadla podobnost databázové tabulky a třídy v jazyce C#, tak
máte pravdu. Definice tabulky je téměř totožná s definicí třídy,
jednoduše navolíme atributy co daná entita má. Řádky zapsané v tabulce
poté můžeme chápat jako jednotlivé instance třídy. Tvoříme tedy jakoby
třídu Word
(slovíčko), která má vlastnosti Id
,
Czech
(české znění) a English
(anglické znění).
Takto budeme ve výsledku s databází i pracovat, ale nepředbíhejme. Vraťme
se ještě ke sloupci Id
, ten označme a vyberme dole v Column
properties možnost Is Identity (je třeba rozbalit Identity Specification),
kterou nastavíme na Yes.

Tím jsme určili, že sloupec Id
je vždy unikátní.
Management Studio nám samo nastavilo i hodnoty Identity Increment a Identity
Seed na 1
. To znamená, že první slovíčko v tabulce bude mít
hodnotu Id
1
, druhé 2
atd., databáze
přiřadí automaticky každému nově vloženému slovíčku o 1 vyšší
Id
, o unikátnost se nám tedy stará sama. Id
rostou
stále, i když nějaké slovíčko vymažeme a Id
se tedy uvolní,
již nebude použito. Je to z toho důvodu, že recyklace starých
Id
může způsobit problémy. Takto nastavený sloupec můžeme
nastavit jako primární klíč pro naši novou tabulku.
Uděláme to jednoduše pravým kliknutím na název sloupce a zvolením
možnosti Set primary key.

Každá tabulka by měla mít primární klíč, jinak nebudeme schopni jednoznačně určit konkrétní záznam a některé technologie (např. LINQ to SQL) by s tabulkou ani neuměly pracovat.
Nakonec zavřeme kartu s editorem tabulky a budeme dotázáni, zda ji chceme
uložit. To samozřejmě potvrdíme a tabulku pojmenujeme Word
(jako slovíčko). Tabulky pojmenováváme opět velkým písmenem a v
jednotném čísle, jako by to byla třída.

Databázi máme tímto založenou. Vytvořme si ještě nějaká testovací data, aby nebyla prázdná. Na tabulku klikneme pravým tlačítkem a zvolíme Edit top 200 rows (je možné, že se popisek této volby liší podle verze Management Studia).

Nyní jen vložíme několik slovíček, Id
se vyplňuje samo,
stačí tedy zadat českou a anglickou variantu a obtížnost. Já jsem si jich
přidal jen několik, vy si jich klidně naklikejte více s různými
obtížnostmi, ať máte co nejvíce dat na zkoušení.

Rozšíření
Pokud vás tvorba databáze příliš neodrovnala (což by neměla ), můžete si do ní přidat
ještě druhou tabulku. Díky tomu si budeme moci dále ukázat i
pokročilejší dotazy přes více tabulek. Pokud chcete začít raději
jednoduše, můžete tento krok přeskočit stejně jako pár dále ukázaných
dotazů.
Přidejte si stejným způsobem tabulku Category
, která bude
reprezentovat kategorii slovíček. Opět jí dáme sloupec Id
,
kterému nastavíme Identity na Yes a poté ho učiníme primárním klíčem.
Co se týče dalších sloupců, bude zde pouze jeden opět typu
nvarchar(50)
s názvem Title
. To bude titulek
kategorie (např. "Počítače"
, "Zvířata"
nebo
"Ostatní"
). Tabulku uložíme jako Category
.

Opět vytvoříme testovací data:

Nyní přidáme slovíčku vazbu na kategorii, které se někdy říká cizí
klíč nebo relace. Vraťme se k naší tabulce Word
a přidejme ji
ještě jeden sloupec s názvem CategoryId
. Bude typu
int
. V Column Properties mu nastavíme Default Value or Bind na
1
. To je výchozí hodnota. Klikneme na něj pravým tlačítkem a
z menu zvolíme Relationships...

V nově otevřeném okně pomocí tlačítka Add přidáme nový vztah
(relaci). V položce Tables And Columns Specification klikneme na tlačítko se
třemi tečkami. Zde nastavíme, že se tabulka Word
pomocí
sloupce CategoryId
připojí na primární klíč tabulky
Category
, kterým je Id
. Potvrdíme.

Nyní databáze ví, že pokud je např. u slovíčka ve sloupci
CategoryId
hodnota 1
, váže se k první kategorii.
Vše uložíme (pravým na záložku a Save). Znovu editujte záznamy v tabulce
Word a slovíčkům nastavte kategorii:

Číslo je samozřejmě primární klíč do tabulky Category
,
1
tedy odpovídá záznamu "Počítače"
,
2
"Zvířata"
a 3
"Ostatní"
.
V následujícím kvízu, Kvíz - Odpojená ap., SQL dotazy, Manag. Studio v C#-ADO.NET , si vyzkoušíme nabyté zkušenosti z předchozích lekcí.