|
![]() | Přenosy dat z relačně propojených tabulek | ![]() | Přenosy dat z relačně propojených tabulek |
V relační databází jsou data umístěná v různých tabulkách propojena na základě stejných hodnot klíčů. Při importu XML souboru do databáze očekáváme, že vznikne relační propojení záznamů, které reprezentuje vztahy mezi daty.
Hodnoty klíčů propojujících záznamy mohou být:
Příklady DAD, uváděné níže, lze použít pro export i import dat. Před exportem je třeba naplnit tabulky pomocí procedury Data for export, před importem doporučujeme vymazat data z tabulek pomocí procedury Clear before import.
Pokud jsou dvě tabulky propojeny v návrhu DAD podmínkou T1.C1=T2.C2, využije se to při importu. Je-li v XML uvedena hodnota C1 a není-li v něm hodnota C2, pak se hodnota C1 zapíše i do slupce C2 v odpovídajícím záznamu v T2. Naopak, je-li v XML uvedena hodnota C2 a není-li v něm hodnota C1, pak se hodnota C2 zapíše i do sloupce C1 v odpovídajícím záznamu v T1.
Je-li T1 nadřazená tabulka a připojuje-li se k ní více záznamů z podřízené tabulky T2 a hodnota C1 není obsažena v XML souboru, pak se v záznamu v T1 použije hodnota C2 z prvního výskytu elementu popisujícího záznam v T2.
V příkladech XML DAD jménem Join key 1 demonstruje přenesení hodnoty z nadřazené tabulky do podřízené. DAD Join key 2 demonstruje přenesení hodnoty z podřízené tabulky do nadřazené.
Výše popsaná pravidla platí v plné míře i pro propojovací klíče skládající se z více sloupců. Přenos hodnoty klíče z nadřazené tabulky do podřízené nebo naopak se uskuteční podle stejných pravidel pro každý sloupec použitý v klíči zvlášť.
Tato cesta využívá specifické schopnosti 602SQL vygenerovat klíč při vkládání záznamu do tabulky a posléze přečíst hodnotu tohoto klíče. Není použitelná pro ODBC zdroje dat.
Postupujte takto: V návrhu databázových tabulek zadejte implicitní hodnotu sloupce, který je klíčem, tak aby se generovaly unikátní hodnoty. Využijte například objekt sekvence nebo implicitní hodnotu UNIQUE.
Při importu se nový klíč vygeneruje při vložení záznamu do nadřazené tabulky. Hodnota tohoto klíče se přepíše do příslušného sloupce ve všech odpovídajících záznamech vkládaných do podřízené tabulky.
V příkladech XML DAD jménem Join key 2 demonstruje vytvoření nové propojovací hodnoty během importu.Tato cesta je určena pro databáze, v nichž lze definovat generátor unikátních hodnot nesvázaný s tabulkou. Před vložením záznamu do tabulky se generátor zavolá a získaná hodnota se přidá k hodnotám z XML souboru při vkládání záznamu. Pak se použije i v podřízených záznamech ve funkcí odkazu na nadřízený záznam.
V dialogu popisujícím element, v němž se připojuje nová tabulka, stiskněte tlačítko Generování hodnoty klíče. V dialogu Generování klíčů pak vyberte druhou variantu generování, zadejte sloupec tabulky pro zápis hodnoty klíče a generující výraz.
V databázích jako Oracle nebo 602SQL se na novou hodnotu z generátoru odkazuje zápisem jméno_sekvence.nextval. Získat tuto hodnotu lze pomocí výstupního parametru nebo pomocí hodnoty sloupce z dotazu. V prvním případě použijte generující výraz např.:SET ?=jméno_sekvence.nextval
SELECT jméno_sekvence.nextval INTO ?podle toho, jakou syntaxi připouští zdroj dat, v druhém případě např. (pro Oracle):
SELECT jméno_sekvence.nextval FROM dual
Tato cesta je určena pro databáze, v nichž lze definovat generátor unikátních hodnot svázaný se sloupcem tabulky, a lze se dotázat na poslední generovanou hodnotu. Při vložení záznamu do tabulky server automaticky zavolá generátor a získaná hodnota se objeví v záznamu spolu s hodnotami z XML souboru. Pak modul importující XML soubor vyhodnotí zadaný výraz a hodnota klíče se přečte, aby se mohla použít i v podřízených záznamech ve funkcí odkazu na nadřízený záznam.
V dialogu popisujícím element, v němž se připojuje nová tabulka, stiskněte tlačítko Generování hodnoty klíče. V dialogu Generování klíčů pak vyberte třetí variantu generování, zadejte sloupec tabulky pro zápis hodnoty klíče a výraz zjišťující hodnotu.
V databázích jako Oracle nebo 602SQL se na poslední hodnotu z generátoru odkazuje zápisem jméno_sekvence.currval, v jiných databázích se použije zápis jako IDENTITY, LAST_INSERT_ID a podobně. K získání této hodnoty použijte některou ze syntaxí uvedených výše, např. (pro MySQL - připojená tabulka má sloupec s klíčem s příznakem AUTO_INCREMENT):
SELECT LAST_INSERT_ID()
![]() | Přenosy dat z relačně propojených tabulek | ![]() | Přenosy dat z relačně propojených tabulek |