602SQL-Úplná dokumentace Index  

Domény

Doména je datový typ spolu s případnými dalšími vlastnostmi (jako implicitní hodnota nebo integritní omezení) označený identifikátorem.

Je-li ve schématu definována doména, pak její identifikátor lze použít všude tam, kde se používá typ, například v popisu sloupců v tabulce nebo při deklaraci proměnných.

Doménu obvykle vytváříme pro označení typu dat, která se ve schématu vyskytují na více místech. Přínosem domény je:

Motivační příklad

Uvažujme účetní aplikaci, která obsahuje evidenci faktur. Vytvoříme doménu CISLO_FAKTURY typu Integer a použijeme ji v tabulce faktur, v tabulce položek na fakturách a při deklaraci proměnných v procedurách, které s fakturami manipulují.

Když se ukáže, že číslo faktury může být patnáctimístné, stačí změnit typ domény na BigInt. Když vyvstane potřeba, aby v čísle faktury bylo lomítko, typ domény se změní na řetězec znaků.

Pokud jsou obě tabulky propojeny vztahem referenční integrity přes číslo faktury, pak bez použití domény by změna jeho typu byla obtížná. Vyžadovala by napřed zrušit referenční integritu, následně změnit typ sloupce v obou tabulkách a nakonec obnovit referenční integritu. Při použití domény CISLO_FAKTURY stačí změnit její definici.

Pokud chceme bránit tomu, aby číslo faktury bylo prázdné, stačí do definice domény napsat NOT NULL. Pokud číslo faktury musí mít speciální formát, kontrolu formátu lze zadat pomocí klauzule CHECK. Tyto podmínky budou kontrolovány na všech místech, kde je použita doména CISLO_FAKTURY.

Manipulace s doménami

Domény se definují, mění a ruší trojicí SQL příkazů CREATE DOMAIN, ALTER DOMAIN a DROP DOMAIN.

Ve vývojovém prostředí 602SQL se domény navrhují interaktivním návrhářem.

Použití domén

Identifikátor domény lze použít všude tam, kde se dá použít typ. Jsou-li v definici domény údaje, které se v konkrétním kontextu nedají použít (například NOT NULL nebo CHECK při deklarování proměnné), ignorují se.

Implicitní hodnota uvedená v definici domény se může uplatnit pouze při použití domény v takovém kontextu, kde má implicitní hodnota smysl, tedy při deklaraci sloupce v tabulce, deklaraci proměnné, nebo deklaraci parametru uložené procedury. Implicitní hodnota se ignoruje například u typu návratové hodnoty funkce nebo v operaci CAST.

Je-li implicitní hodnota specifikována zároveň v definici domény i v místě použití domény, pak se uplatní specifikace v místě použití domény.

Klauzule NOT NULL uvedená v definici domény nebo v místě použití domény má stejný efekt.

Klauzule CHECK (integritní omezení) uvedená v definici domény nebo v místě použití domény má stejný efekt. Je-li uvedena na obou místech, použijí se obě.

Restrukturalizace tabulek po změně domény

Je-li doména použita v tabulkách naplněných daty, data se při změně domény zachovají. Pokud původní typ domény lze pomocí funkce CAST konvertovat na nový typ domény, pak se zachovají také data obsažena ve sloupci, jehož typ je zadán pomocí této domény, v opačném případě budou ve sloupci implicitní hodnoty, případně NULL.

Pokud při restrukturalizaci tabulek dojde k chybě (například některá hodnota se nedá konvertovat na nový typ), pak je celá restrukturalizace i změna domény odvolána.

Jsou-li tabulky využívající doménu naplněny velkým množstvím dat, pak změna domény může trvat delší dobu a může se zvětšit transakční i databázový soubor.

Všechny operace po změně domény se provádějí jako jedna transakce. Po dokončení změny je transakce uzavřena a nelze ji odvolat příkazem ROLLBACK.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

Implementací definované vlastnosti SQL ve 602SQL