6. Tvorba a editace uživatelem definovaných datových typů

Po stisknutí tlačítka pro vstup do modulu editace datových typů, které se nachází na tlačítkové liště hlavního okna, se objeví dialog (viz Obrázek 28). Zde je možno definovat vlastní datové typy postavené nad zabudovanými typy (Integer, Char, Varchar2 atd.) nebo nad již existujícími typy uživatelem nadefinovanými.

Obrázek 28 - Dialog pro vytváření a editaci uživatelsky definovaných datových typů

6.1. Tvorba nového typu

Pro tvorbu nového datového typu musíte nejprve zvolit možnost Add a new type. Do textového pole New type name zadáte jméno nově vytvářeného typu, poté zvolíte, případně ještě upřesníte datový typ, nad nímž bude tento nově vytvářený datový typ postaven, a nakonec stisknete tlačítko OK. Obrázek 29 ilustruje vytvoření typu muj_varchar2 postaveného nad typem Varchar2(1000).

Obrázek 29 - Tvorba nového uživatelsky definovaného datového typu

Následuje popis tvorby netriviálních uživatelem definovaných datových typů (typy Object, Varray a Nested table).

6.1.1. Tvorba typu Object

Po zvolení položky Object v sekci Data type přibude do okna sekce Items in Object, která představuje seznam všech položek v tomto Objectu obsažených. Na počátku je tento seznam prázdný (viz. Obrázek 30).

Obrázek 30 - Tvorba datového typu Object

Do seznamu položek lze přidat novou položku dvojitým kliknutím na nápis <new>. Následně se zobrazí okno, kde je možno zvolit jméno a datový typ přidávané položky (viz. Obrázek 31). Po stisku tlačítka OK se položka přidá do seznamu. Pokud stisknete křížek v pravém horním rohu okna, okno se zavře a položka se do seznamu nepřidá.

Obrázek 31 - Změna položky v datovém typu Object

Položku lze měnit tak, že na ní dvakrát kliknete myší. Tato akce otevře stejné okno, jako při přidávání položky (viz. Obrázek 31). V tomto okně lze měnit jak název, tak typ této položky. Stisk tlačítka OK změny potvrdí, stisk křížku v pravém horním rohu okna změny stornuje.

Položku lze smazat tak, že na ní najedete kurzorem a poté stisknete klávesu "Delete".

6.1.2. Tvorba typu Varray

Po zvolení položky Varray v sekci Data type se v pravé části okna objeví pole Length pro určení maximálního počtu prvků, které může tento typ Varray obsahovat, a tlačítko s datovým typem těchto prvků (viz. Obrázek 32).

Obrázek 32 - Tvorba datového typu Varray

Počet prvků lze měnit snadno pomocí šipek, nebo přímým vepsáním číselné hodnoty do pole a potvrzením klávesou "ENTER". Typ prvků lze změnit kliknutím na tlačítko s nadpisem Type of items a s názvem aktuálního typu prvků (zde Integer).

To způsobí vyvolání okna, v němž lze nastavit nový datový typ prvků (viz. Obrázek 33).

Obrázek 33 - Změna datového typu prvků v typu Varray

Změnu typu není třeba potvrzovat, promítne se automaticky. O změně nás informuje změna popisu tlačítka v hlavním okně modulu tvorby a editace datových typů. Z nabídky datových typů prvků jsou automaticky odstraněny všechny typy Nested table a Varray a rovněž typy Object obsahující položky typu Nested table nebo Varray.

6.1.3. Tvorba typu Nested table

Po zvolení položky Nested table v sekci Data type se v pravé části okna objeví tlačítko s datovým typem prvků, které budou obsaženy v tomto typu.

Obrázek 34 - Tvorba datového typu Nested table

Typ prvků lze změnit kliknutím na tlačítko s nadpisem Type of items a s názvem aktuálního typu prvků (zde Integer). To způsobí vyvolání okna, v němž lze nastavit nový datový typ prvků (viz. Obrázek 34).

Změnu typu není třeba potvrzovat, promítne se automaticky. O změně nás informuje změna popisu tlačítka v hlavním okně modulu tvorby a editace datových typů. Z nabídky datových typů prvků jsou automaticky odstraněny všechny typy Nested table a Varray a rovněž typy Object obsahující položky typu Nested table nebo Varray.

6.2. Editace existujícího uživatelem definovaného typu

Pokud chcete editovat existující typ, zvolíte nejprve možnost Edit / Delete existing type. Tím se zpřístupní nabídka již vytvořených typů, ze které si vyberete ten, jehož vlastnosti chcete měnit. Po jeho zvolení se v pravé části okna zobrazí nastavení vybraného typu. Nyní lze zvolený typ měnit.

POZOR!!!
Veškeré provedené změny jsou aplikovány okamžitě a tudíž jsou nevratné!!!

6.3. Smazání existujícího uživatelem definovaného typu

Pro smazání typu zvolíte nejprve možnost Edit / Delete existing type. Tím se zpřístupní nabídka již vytvořených typů, ze které si vyberete ten, který chcete smazat. Poté stisknete tlačítko "Delete".

Pokud byl právě smazaný typ použit jako prvek jiného uživatelem definovaného datového typu, bude v něm nahrazen typem Integer. Na tuto skutečnost jste upozorněni zprávou (viz. Obrázek 35).

Obrázek 35 - Dialog s upozorněním na použití mazaného typu

Stisk tlačítka OK smazání potvrdí, stisk tlačítka CANCEL smazání zruší. Po zaškrtnutí políčka s nápisem Do not show this warning next time se toto varování příště již nebude zobrazovat.

6.4. Ošetření chyb

Některé podmínky konzistence konceptuálního schématu jsou hlídány v průběhu vytváření, některé teprve při požadavku transformace nebo na explicitní žádost.

6.5. Kontrola v průběhu vytváření schématu

V průběhu vytváření schématu je hlídána acykličnost grafu závislostí, povinnost atributů v primárním klíči a primární klíč jako takový. V případě chyby není požadovaná akce provedena a zobrazí se dialog s popisem chyby.

Entity EntityName have primary key
hlásí, když je entitní typ vkládán do hierarchie objektů jako podtyp a přitom má určen primární klíč
After adding entity EntityName to list of sons of entity EntityName would appear cycleName cycle
hlásí, když by operací vznikl cyklus v závislostech
ISA child EntityName cannot have primary key
hlásí, když entitní typ je podtypem a tudíž mu nelze určit primární klíč
Atribute AtributeName cannot be set optional or not unique while being part of primary key
hlásí, když je atribut součástí primárního klíče a přitom se ho uživatel pokouší nastavit jako nepovinný nebo zrušit vlastnost Unique
Entity EntityName is strong addicted
hlásí, když je odebírán nebo nastavován na jiný primární klíč slabého entitního typuTaková změna není dovolena
Relationship RelationName cannot have primary key
hlásí, když by se někdo snažil nastavit atribut patřící k vztahovému typu jako člena primárního klíče
Relationship RelationName can't have more than 2 connections to entities
hlásí, když je přidávána třetí účast do vztahu v binární nebo UML notaci

Ostatní hlášené chyby jsou vnitřními chybami aplikace a v takovém případě není dobré pokračovat v práci, protože je vnitřní reprezentace schématu v nekonzistentním stavu. Tyto chyby mohou sloužit pro odhalování implementačních chyb v aplikaci.

6.6. Kontrola na vyžádání

Pro kompletní kontrolu aktuálního schématu slouží tlačítko pro kontrolu na liště hlavního okna aplikace. V tomto případě platí, pokud není nalezena chyba, je zobrazený seznam prázdný a schéma je naprosto v pořádku připravené pro transformaci. Pokud byla nalezena chyba (nebo více chyb), potom jsou tyto chyby zobrazeny ve speciálním dialogovém okně.

Obrázek 36 - Dialog s konflikty ve schématu

Levá část dialogového okna má stromovou strukturu. První úroveň stromu reprezentuje seznam všech chyb, druhá úroveň jednotlivé nalezené chyby a třetí úroveň je vždy seznam objektů, kterých se chyba týká. Příklad takové prezentace seznamu chyb naleznete na předchozím obrázku (viz. Obrázek 36).

V pravé části dialogového okna můžete provádět různé operace v závislosti na vybrané položce z levé části. Velikost obou částí můžete měnit tažením za středový panel. Tlačítkem Refresh aktualizujete seznam chyb.

Popis chybových hlášení:

Equal names of atributes in the scope of their owner
Atributy nesmí mít stejné jméno v rámci svého vlastníka.
Bad first character ('char') in object's name
Nepovolený počáteční znak ve jménu objektu.
Bad characters (list of chars) in object's name
Nepovolené znaky ve jménu objektu.
Cannot be both strong addicted and ISA son
Entitní typ nesmí být slabý a zároveo podtyp.
Equal names of cardinalities
Účasti nesmí mít stejná jména.
Equal names of constructs
Entitní a vztahové typy nesmí mít stejná jména.
No atribute
Entitní typ nemá žádné atributy.
Relationship should be connected to at least 2 entities
Vztahový typ není připojen k dostatečnému počtu entitních typů, minimum jsou 2 účasti.
No name
Objekt nemá jméno.
Subtype in ISA hierarchy may not have a primary key
Podtyp nesmí mít určen primární klíč.
No primary key
Entitní typ nemá určen primární klíč.
No atribute in unique key
Skupina unikátního klíče je prázdná.
Equal semantics of unique keys
Unikátní klíče definují stejnou skupinu atributů.
Unique key atributes cannot be a subset of primary key atributes
Skupina unikátního klíče nesmí být podmnožinou skupiny atributů primárního klíče.
Equal names of unique keys
Unikátní klíče nesmí mít stejné jméno.
Atribute of NESTED TABLE, VARRAY or OBJECT data type cannot be in PRIMARY KEY
V primárním klíči nesmí být žádný atribut typu NESTED TABLE, VARRAY ani OBJECT.
Atribute of NESTED TABLE, VARRAY or OBJECT data type cannot be in UNIQUE KEY
V unikátním klíči nesmí být žádný atribut typu NESTED TABLE, VARRAY ani OBJECT.
Atribute of NESTED TABLE data type cannot be set NOT NULL
Atribut typu NESTED TABLE nesmí být zvolen jako povinný.
Datatype <type> is not defined!!
Atribut má zvolen jako svůj datový typ uživatelem definovaný typ jménem <type>, ale tento typ již neexistuje (pravděpodobně byl smazán).

6.6.1. Vazba mezi dialogem chyb a pracovní plochou

Stromová reprezentace nabízí inteligentní navigaci na ploše. Vyberete-li levým tlačítkem myši nalezenou chybu, na ploše se vyberou všechny objekty, které jsou s chybou svázány, nebo které chybu způsobily. Můžete vybrat také pouze jeden objekt a to tím, že vyberete ve stromu chyb uzel, který objektu odpovídá (viz. Obrázek 37).

Obrázek 37 - Vazba mezi dialogem chyb a pracovní plochou