4.5. Omezení
Se základním typem omezení tzv. Primárním klíčem jsme se už
setkali u předchozích dvou tabulek. U poslední tabulky si
ukážeme další z možných typů omezení.
- Založte novou tabulku z názvem Opravy a vyplňte ji dle
následujícího obrázku.

Obrázek 17 - Tabulka Opravy
4.5.1. Omezení typu Default
Jednou z položek obrázků tabulky je datum přijetí opravy
(oprDatum_prijeti). Zde by bylo dobré nadefinovat výchozí
hodnotu pro vkládání aktuálního data ze systému. Nebude tedy
potřeba toto datum při zadávání hodnot do tabulky vypisovat.
Nastavíme tedy omezení typu default. Toto omezení se vkládá
pouze při založení nového záznamu a to jen v případě, že
hodnota nebude zadána uživatelem.
- Budeme postupovat stejně, jako při přidávání Identity.
Klepneme pravým tlačítkem myši na tabulku Opravy a následně
vybereme z nabídky Table View -> Modify Custom…
- V dialogovém okně Column Selection vybereme ze seznamu
Available Columns položku Default Value, přidáme ji do pravé
části seznamu Selected Columns a potvrdíme OK.

Obrázek 18 - Přidání položky Default Value
- Opět klepneme pravým tlačítkem myši na tabulku Opravy a
vybereme Table View -> Custom. V omezení Default Value
(viz následující obrázek) pro sloupec datumu přijmutí
opravy (oprDatum_prijeti) napíšeme hodnotu getdate().
Po uložení tabulky bude toto omezení nadefinováno.

Obrázek 19 - Zadání hodnoty omezení typu Default
4.5.2. Omezení typu Check
S omezením typu Check můžeme zadávat podmínky
pro vkládané, nebo upravované záznamy. Lze nastavovat formát
vkládaného čísla (např. LIKE '[0-9]/[0-9]' - dvě vložené číslice
budou odděleny lomítkem), vytyčit limit vkládaných čísel
(např. [Název_Sloupce] >= 0), závislost vkládané hodnoty
na hodnotě v jiném sloupci, aj.
V naší tabulce Opravy chceme zajistit, aby datum
převzetí (oprDatum_prevzeti) bylo vždy větší nebo rovno
datumu přijetí opravy (oprDatum_prijeti).
- Klepneme pravým tlačítkem myši na návrhové zobrazení tabulky
oprav a z nabídky vybereme volbu Check Constraints.

Obrázek 20 - Spuštění dialogu pro nastavení omezení typu Check
- Objeví se dialog vlastností s kartou Check Constraints.
Klepneme-li na tlačítko New, můžeme vyplnit podmínku omezení
dle následujícího obrázku.

Obrázek 21 - Dialogové okno pro zadání podmínky typu Check
4.5.3. Relace
Jak už jsme si řekli v úvodu, Microsoft SQL
Server je relační databázový systém. Vytvoříme-li v databázi
větší počet tabulek, můžeme mezi těmito tabulkami nadefinovat
vztahy - označované jako relace.
Obecně rozlišujeme tři druhy relací:
- Jedna k jedné 1 : 1 - s každým záznamem jedné tabulky
je vždy svázán pouze jeden záznam druhé tabulky.
- Jedna k více 1 : N - s každým záznamem jedné tabulky
může být svázáno více záznamů druhé tabulky.
- Více k více M : N - u této relace se může na obou
stranách nacházet více odpovídajících záznamů.
Tyto základní relace jsou pak ještě dále děleny podle toho,
jestliže bude jedna z jejich stran nepovinná (obsahovat prázdnou
hodnotu).
Přejděme nyní k vytvoření relací v naší
ukázkové databázi Autoservisu.
- Nacházíme se stále v návrhovém zobrazení diagramu.
Pro přehlednost upravíme vzhled našich tabulek jen na názvy
sloupců. Učiníme tak klepnutím pravým tlačítkem myši
na tabulku a vybráním z nabídky Table View -> Column Names.
- Nyní vytvoříme relaci mezi tabulkou Zákazníci a Auta.
Klepnutím a přidržením myši v šedé části tabulky Zákazníci
vlevo od sloupce zakID a následným tažením myši na tabulku
Auta ke sloupci autZakaznici_id se nám zobrazí dialog
Create Relationship. Zde můžeme zadat název relace, případně
výběrem z rolovacího seznamu pozměnit názvy svázaných sloupců
tak, aby odpovídaly našim požadavkům.

Obrázek 22 - Create Relationship - dialog pro vytváření relací
V dialogu je dále možné prostřednictvím
zaškrtávacích políček nastavit:
- Kontrolu existujících dat při vytváření relace
(Check existing data on creation)
- Uplatňovat relace při replikaci
(Enforce relationship for replication)
- Uplatňovat relace při vkládání a aktualizaci dat
(Enforce relationship for INSERTs and UPDATEs),
která se dále upřednostňuje:
- Aktualizace souvisejících polí v kaskádě
(Cascade Update Related Fields) - zajistí, že pokud
uživatel změní hodnotu záznamu v první tabulce, automaticky
se zaktualizují i odpovídající záznamy v tabulce související.
- Odstranění souvisejících polí v kaskádě
(Cascade Delete Related Records) - při zaškrtnutí
této volby budou smazány se záznamem v první tabulce i
záznamy v tabulkách souvisejících.
- Potvrzením OK se dialog uzavře a nám se vykreslí příslušná
relace v diagramu.
- Stejným způsobem vytvoříme relaci mezi tabulkou Auta
(pole autSPZ) a Opravy (pole oprAuta_id).

Obrázek 23 - Diagram s vytvořenými relacemi
V našem diagramu máme tedy vytvořeny relační
vztahy typu 1 : N. Při vytváření tabulek jsme si už definovali
primární klíč (Primary Key). Nyní po uložení celého
diagramu nám vznikne na té straně relačního vztahu, která
obsahuje vazbu více, cizí klíč (Foreign Key). Relační vztah
mezi jednotlivými tabulkami databáze hlídá, aby v podřízených
tabulkách nebylo možné uložit záznam, na který není spojení
v nadřízené tabulce. Volby pro aktualizaci a odstranění polí
v kaskádě při práci se záznamy v tabulkách nám způsobí, že se
všemi souvisejícími záznamy v ostatních tabulkách bude
automaticky provedena stejná operace - např.vymazáním záznamu
v hlavní tabulce se automaticky vymažou všechny záznamy
související s tímto záznamem v ostatních tabulkách.
- Uzavřete diagram a na dotaz, zda chcete uložit změny, odpovězte Yes.
Nyní se můžeme podívat na seznam tabulek.
- Nacházíme se stále v prostředí Enterprise Manager
ve stromové struktuře databáze Autoservisu klepneme levým
tlačítkem myši na položku Tables. Zobrazí se nám seznam
tabulek obsažených v naší databázi. Většina těchto tabulek
je systémových, jejich názvy začínají předponou sys.
- Klepnutím pravým tlačítkem myši například na tabulku
Zákazníci se nám otevře nabídka. Výběrem z této nabídky
můžeme taktéž otevírat dialog pro zakládání tabulek
(New Table), případně úpravu tabulek Design Table aj.
<Předcházející stránka
Další stránka>