DAD příkladu

Začneme samozřejmě opět založením hlavního array:

Zástupce subjektu ­
007 pdk general ...
­ ­
table: zastsub basic true
distance: 0 select: true
previous: 0 key-owner: false
key-prev: 0 frgn-main: false
join-key: - ­

Dosud je vše stejné. Nyní je však třeba připojit data ukládaná do tabulek jiného dokumentu. Uvědomme si nejprve, že vedle prvků definovaných v XDS jsou ještě prvky, které jsou tvořeny automaticky. Jsou to prvky fdk a fsk do kterých se ukládá klíčová hodnota odkazovaného dokumentu a případně i odkazovaného segmentu, pokud je opakovatelný. V případě propojení způsobem foreign jsou klíčové hodnoty jediný údaj, který se v dokumentu ukládá - to je i tento příklad. Vzhledem k tomu, že ani obast iniciály zástupce ani oblast subjekt nejsou opakovatelné, budou se klíče ukládat do hlavního array. U propojení na dokument subjekt je vedle klíče dokumentu ještě zapotřebí klíč provozovny, neboť ta je v dokumentu subjekt opakovatelná (již nepotřebujeme klíče opakovatelné oblasti telefon a opakovatelného prvku e-mail, protože ty nejsou zahrnuty do služby korespondenční adresa. Za klíčové hodnoty ještě doplníme vlastní prvky specifikace vztahu a hlavní array zástupce subjektu bude vypadat takto:

Zástupce subjektu ­ ­ ­ ­ 45 46
007 pdk general ... fdk1 fdk2 fsk1 uprvz_drvz uprvz_fus
­ ­ 008 009 010 ­ ­
table: zastsub basic true
distance: 0 select: true
previous: 0 key-owner: false
key-prev: 0 frgn-main: false
join-key: - ­

Nyní se podívejme na odvozené array pro iniciály zástupce:

Zástupce subjektu 35 36 37 38 39
008 pdk cjm_kjm cjm_pjm adr_uli adr_mst adr_psc
­ ­ ­ ­ ­ ­
table: clovek basic false
distance: 1 select: true
previous: 007 key-owner: false
key-prev: 007 frgn-main: true
join-key: fdk1 ­

Názvy políček v tomto array jsou převzaty z názvů základního (a zároveň hlavního) array dokumentu člověk. Proto neodpovídají skladbě short na větvi každého prvku z dokumentu zástupce subjektu. Ve vlastnostech odvozeného array není název tabulky, která patří dokumentu zástupce subjektu (i když toto odvozené array k němu patří), ale název tabulky pro dokument typu člověk. Zároveň se závislost na hlavním array zvyšuje na hodnotu 1 a ve vlastnostech je jednoznačně určeno, že se jedná o odvozené array (basic=false). I nadále se však jedná o příkazové array (select=true).

Vedle odvozeného array pro iniciály zástupce bude ještě dále existovat odvozené array pro účely subjektu. Zde se nám začínají kombinovat dvě souvislé skutečnosti vytvářející větší počet array než je na první pohled třeba. Jedná se o kombinaci cizího zdroje a opakovatelnosti tohoto zdroje, což na místo jedné array pro subjekt vytváří array dvě a to i přesto, že dokument zástupce subjektu pro účely propojení na dokument subjekt neobsahuje opakovatelné segmenty. Důvod je ovšem prostý, každé array v systému může být (aby plnilo svou funkci) ukládáno pouze v jediné databázové tabulce. Korespondenční adresa subjektu je ukládána do tabulek dvou a proto i všechny další dokumenty využívající tato data musí tuto skutečnost odrážet ve struktuře svých odvozených array. Naše array pro propojení na adresu subjektu budou tedy tato:

Zástupce subjektu 40
009 pdk ozn_ojm
­ ­
table: subjekt basic false
distance: 2 select: true
previous: 007 key-owner: false
key-prev: 007 frgn-main: true
join-key: fdk2 ­
Zástupce subjektu 41 42 43 44
010 psk opr adr_uli adr_mst adr_psc
­ ­ ­ ­ ­
table: subjekt_pvz basic false
distance: 2 select: true
previous: 009 key-owner: false
key-prev: 007 frgn-main: false
join-key: fsk1 ­

Všimněte si, že v array č. 007 jsou uvedeny odkazy na všechny tři zbývající array dokumentu zástupce subjektu (tj. odkazy fdk1 - 008/clovek, fdk2 - 009/subjekt a fsk1 - 010/provozovna). Díky těmto odkazům se pak na základě jednotlivých array tvoří SQL příkazy pro operace s daty dokumentů, kde je třeba realizovat spojení tabulek (viz. algoritmus pro sestavování příkazů SELECT pro přehledy dokumentů dle zadaných výstupních sloupců a vstupních kritérií - příloha 2).

V tomto příkladu se poprvé vyskytla odlišnost vlastnosti previous a key-prev. Zatímco previous odkazuje na cizí array tabulky subjekt,key-prev odkazuje na vlastníka klíče fsk1 v rámci dokumentu zástupce. To je také důvod proč jsou uváděny v každém vedlejším poli obě hodnoty - indikují přesun použitého klíče. POZN: Pokud by bylo z nějaké důvodu u dokumentu zástupce třeba nahlížet na všechny provozovny cizího dokumentu subjekt (a nikoli jen výběr provozovny pro zástupce) a za tím účelem se použilo respektované opakování (repetition="type:depend"), pak by se opět obě hodnoty předchozích array shodovaly.

Pokud by bylo zapotřebí propojit zástupce subjektu s více než jedním subjektem, pak by se oblast subjekt musela nastavit jako opakovatelná. To by pro DAD znamenalo vytvoření ne jednoho základního array, ale dvou. Klíče pro propojení na subjekt, které jsou uloženy v kolonkách fdk2 a fsk1 v hlavním array dokumentu zástupce subjektu by se museli přesunout do vedlejšího základního array pro opakovatelnou oblast a na odvozená array subjektu by bylo odkazováno odtud. Tuto kombinaci nyní uvidíme v další příkladu.


XDS příkladDAD příkladu