Vytváření primárních a cizích klíčů segmentů a dokumentů

Pro správné pochopení struktury tabulek je třeba vědět, co jednotlivé klíče reprezentují. To nejlépe ukážeme na způsobu rozkládání dokumentů do tabulek. Nejjednodušší případ nastává u dokumentu bez opakovaného segmentu a bez odkazování na cizí dokument. Pro takový dokument se vytvoří jedna tabulka, která bude mít v prvním sloupci hodnoty primárních klíčů jednotlivých instancí daného typu dokumentu (pdk - viz dokument A na obrázku).

základní tabulka

Pokud vytvoříme dokument B, který bude obsahovat propojení na uvedený dokument A, dojde v B k vytvoření cizího klíče na dokument (fdk). Může například jít o situaci, kdy dokument A bude reprezentovat klienta a dokument B bude reprezentovat fakturu tohoto klienta. Pak je zřejmé, že do faktury musí být uložena informace o tom, ke kterému klientovi patří (viz. obrázek).

propojeni přes klíče

Jakmile v dokumentu A vytvoříme opakovatelný segment, vytvoří se v databázi pro tento segment nová tabulka. V prvním sloupci této tabulky bude také primární klíč, ovšem nikoli dokumentu ale opakovatelného segmentu (psk). V dalším sloupci této tabulky bude cizí klíč dokumentu (tdk) odkazující u každé instance segmentu na instanci dokumentu, ke které patří (viz. obrázek).

propojeni přes klíče

Pokud situaci opět doplníme o dokument B, který z nějakého důvodu odkazuje na dokument A, pak v tomto dokumentu B vznikne vedle pdk i fdk spojující jednotlivé instance dokumentu B s instancemi dokumentu A (viz. obrázek). V takovémto případě může dokument B obsahovat i odkazy do opakovatelné oblasti dokumentu A a pokud bude v B zvoleno závislostní opakování pomocí repeat=depend, nebude v B vytvářen jiný klíč než fdk stejně, jako kdyby B bralo údaje jen z hlavní tabulky A (viz. obrázek)

propojeni přes klíče

Pokud by ovšem došlo k potřebě vybrat pro dokument B jen některá opakování segmentu dokumentu A, přibude evidence další klíčové hodnoty (v XDS se tato skutečnost identifikuje tak, že v rámci dokumentu B odkážeme přímo na opakovanou segment dokumentu A, ale nenastavíme atribut repeat na depend).

Tato hodnota se uloží do hlavní tabulky dokumentu B a bude se jednat o klíč cizího segmentu (fsk). Vazba mezi hlavními tabulkami obou dokumentů zůstane samozřejmě zachována (viz. obrázek).

propojeni přes klíče

Pokud bychom chtěli, aby dokument B obsahoval například dvě opakování. Může nastat například pokud dokument A budou firmy, opakovaná segment budou zástupci firmy a dokument B budou smlouvy podepsané s těmito firmami; pak můžeme chtít, aby na každé smlouvě byli podepsáni alespoň dva zástupci dané firmy. V jiném případě se může stát že dokument A bude reprezentovat fakturu a opakovaná oblast bude obsahovat položky faktury. Dokument B pak může být reklamačním protokolem, který z dané faktury potřebuje vybrat jen ty položky, u kterých došlo k závadě. U všech takovýchto případů vznikne v naší databázi čtvrtá tabulka jako podřízená opakovaná segment dokumentu B (viz čtvrtý obrázek).

propojeni přes klíče

V XDS tuto skutečnost zavedeme nastavením atributu repeat v dokumentu B na hodnotu user. Pak se bude klíčová hodnota zvoleného opakování segmentu dokumentu A (fsk) vepisovat do podřízené tabulky dokumentu B a nikoli přímo do jeho hlavní tabulky. Tato tabulka (viz obrázek) se vytvoří se svým primárním klíčem (psk), s odkazem na hlavní tabulku dokumentu (tdk) a nakonec s již zmíněným odkazem do tabulky opakovaného segmentu dokumentu A (fsk).

Vyskytuje-li se v opakovaném segmentu dokumentu opakovaný dětský segment, rozkládá se tento dětský segment do tabulky, kde si zachovává nejen klíč instance nadřízeného segmentu (fsk), ale i klíč instance dokumentu (tdk). Zároveň každá podřízená tabulka opakovaného segmentu nižších úrovní si zachovává vždy nejen klíč instance přímo nadřízeného segmentu, ale i klíče instancí všech nadřízených segmentů za účelem rychlejších výběrů i úprav.

Zvláštním způsobem jsou propojovány tabulky, které jsou definovány pouze pomocí source = "initial:..." a nikoli pomocí source = "foreign:...". Je třeba si uvědomit, že zatímco z hlediska dokumentů se zdá být důvod kombinace zřejmý a relativně přehledný, v databázi nám již vzniká poněkud složitější struktura tabulek. Ovšem jsou jednoznačně založeny na XDS definicích dokumentů a není tedy třeba se jimi při návrhu příliš zabývat. Pro analytiky, kteří připravují novou aplikaci systému flexideo je to příležitost vtáhnout uživatele více do vlastního návrhu, aniž by jim museli vysvětlovat složité vztahy vytvářené v tabulkách.

Pro návrh XDS to sice není důležité, ale je dobré znát jak se automaticky pojmenují klíčové sloupce tabulek, neboť se tak budeme schopni zorientovat v databázi pro případné hromadné operace s daty jako je načtení dat z původní aplikace apod.

Názvy primárních klíčů (tj. pdk a psk) jsou použity jako názvy odpovídajících sloupečků v tabulce databáze. Jsou to sloupečky na začátku tabulky a slouží spolu s typem tabulky (názvem) k jednoznačné identifikaci údaje celého řádku.

Cizí klíče pro propojení opakování k dokumentu či rodičovského opakování (tdk a tak) jsou využity stejným způsobem jako primární klíče. To znamená, že jich je využito k pojmenování odpovídajících sloupečků tabulky pro uložení cizího klíče, jenž navazuje na primární klíč dokumentu či rodičovské oblasti.

U cizích klíčů výběrových uzlů (fsk a fdk) je zapotřebí ještě přidat pořadovou číslici od jedné, neboť může dojít k výskytu více cizích výběrových klíčů na jednom řádku tabulky. Názvy odpovídajících sloupečků tabulky u těchto cizích klíčů jsou pak takovéto:

fdk1, fsk1, fsk2 atd.

Úplné informace i s příklady XDS, odpovídajících tabulek (DAD) a dalších souvislostí najdete v oblasti popisující schema DAD, jehož tvorba je založena na uvedených principech.

Ke klíčům rovněž najdete informaci v oblasti technické podpory v tématu segmenty a metadata dokumentů.


Rozkládání dokumentů do databázových tabulekNázvosloví klíčových sloupců tabulekVytváření primárních a cizích klíčů segmentů a dokumentůCo je DAD?