Datenbankbeziehungen
Wenn Sie eine Datenbank als Quellkomponente zu Ihrem Mapping hinzufügen, werden die einzelnen Tabellen als Root-Tabellen angezeigt (Abbildung unten). Wenn Sie auf das Plus-Symbol einer Root-Tabelle klicken, sehen Sie alle in Beziehung stehenden Tabellen unterhalb der Root-Tabelle. In der Datenbankkomponente unten sehen Sie zwei Arten von Pfeilen. Diese haben folgende Bedeutung:
•Der nach links weisende Pfeil ( ) gibt an, dass die Tabelle Books eine Child-Tabelle der Tabelle Authors ist.
•Der nach rechts weisende Pfeil ( ) gibt an, dass die Tabelle Authors der Parent der Tabelle Books ist.
Struktur von BookCatalog.sqlite
Je nach Anforderung können Sie verschiedene Mapping-Szenarien verwenden. In den folgenden Unterabschnitten werden einige mögliche Szenarien beschrieben. In allen unten beschriebenen Szenarien wird eine hierarchische Datenbank namens BookCatalog.sqlite verwendet. Die Datenbank hat zwei Tabellen (Authors und Books), die eine Sekundärschlüsselbeziehung aufweisen. In der Abbildung unten sehen Sie, dass die Tabelle Books einen Sekundärschlüssel namens AuthorID hat, der den Primärschlüssel in der Tabelle Authors referenziert.
Beispieldaten aus BookCatalog.sqlite
Unten sehen Sie Auszüge aus den Tabellen Authors und Books.
Tabelle "Authors"
Tabelle "Books"
Szenario 1: Beibehaltung der Hierarchie
In unserem ersten Szenario mappen wir Daten aus BookCatalog.sqlite auf Authors.xsd (siehe Abbildung unten). Authors ist in diesem Mapping die Root-Tabelle. Wir möchten nun die hierarchische Beziehung beibehalten und in der Ausgabe alle Autoren mit den dazugehörigen Büchern erhalten.
Im Codefragment unten sehen Sie einen Auszug aus der Ausgabe:
<Authors>
<Author ID="23">
<Name>Fredrik Backman</Name>
<Country>Sweden</Country>
<Website>www.fredrikbackmanbooks.com</Website>
<Publications>
<Publication ID="26">
<Title>Anxious People</Title>
<ISBN>978-1-4059-3025-3</ISBN>
<Publisher>Penguin Books Ltd</Publisher>
<PrintLength>416</PrintLength>
<Year>2021</Year>
<Genre>Humor</Genre>
<Price>9.99</Price>
</Publication>
<Publication ID="27">
<Title>A Man Called Ove</Title>
<ISBN>9781444775815</ISBN>
<Publisher>Sceptre</Publisher>
<PrintLength>320</PrintLength>
<Year>2015</Year>
<Genre>Humor</Genre>
<Price>11.46</Price>
</Publication>
</Publications>
</Author>
</Authors>
Szenario 2: Vertauschung der Tabellen
Im zweiten Szenario möchten wir in der Ausgabedatei eine Liste von Büchern mit den Informationen dazu erhalten. Als Root-Tabelle verwenden wir hierfür Books. Die Tabellenbeziehungen bleiben erhalten. Das Mapping-Design sieht folgendermaßen aus:
Im Codefragment unten sehen Sie einen Auszug aus der Ausgabe:
<Books>
<Book ID="3">
<Title>Blackout</Title>
<Author>Ragnar Jonasson</Author>
<AuthorID>2</AuthorID>
<ISBN>1910633461</ISBN>
<Publisher>Orenda Books</Publisher>
<PrintLength>276</PrintLength>
<Year>2016</Year>
<Genre>Crime & Mystery</Genre>
<Price>8.49</Price>
</Book>
<Book ID="4">
<Title>Outsider</Title>
<Author>Stephen King</Author>
<AuthorID>1</AuthorID>
<ISBN>1501180983</ISBN>
<Publisher>Scribner</Publisher>
<PrintLength>576</PrintLength>
<Year>2018</Year>
<Genre>Horror</Genre>
<Price>12.79</Price>
</Book>
</Books>
Szenario 3: Mappen von Datenbankdaten aus verschiedenen Root-Tabellen
Im dritten Szenario mappen wir Daten aus den einzelnen Root-Tabellen der Datenbankkomponente auf Authors.xsd (siehe Abbildung unten). Die verknüpften Tabellen werden ignoriert.
Als Ergebnis wird unter jedem Autor jedes einzelne Buch unabhängig von seinem Autor aufgelistet (Codefragment unten).
<Author ID="19">
<Name>Sebastian Fitzek</Name>
<Country>Germany</Country>
<Website>www.sebastianfitzek.com</Website>
<Publications>
<Publication ID="1">
<Title>Misery</Title>
<ISBN>1501143107</ISBN>
<Publisher>Scribner</Publisher>
<PrintLength>368</PrintLength>
<Year>2016</Year>
<Genre>Horror</Genre>
<Price>11.99</Price>
</Publication>
<Publication ID="2">
<Title>Nightblind</Title>
<ISBN>9781910633113</ISBN>
<Publisher>Orenda Books</Publisher>
<PrintLength>231</PrintLength>
<Year>2016</Year>
<Genre>Crime & Mystery</Genre>
<Price>9.99</Price>
</Publication>
<Publication ID="3">...</Publication>
<Publication ID="4">...</Publication>
<Publication ID="5">...</Publication>
<Publication ID="6">...</Publication>
<Publication ID="7">...</Publication>
<Publication ID="8">...</Publication>
</Publications>
</Author>
Szenario 4: Mappen von Datenbankdaten auf eine SQL/XML-Struktur
Im vierten Szenario möchten wir Datenbankdaten auf eine flache Schemastruktur (SQL/XML Standard) mappen. Das flache Schema-Modell basiert auf der ISO-ANSI SQL/XML Spezifikation INCITS/ISO/IEC 9075-14-2008. Darin wird definiert, wie Datenbanken auf XML gemappt werden. Beziehungen werden im Schema mittels Identity Constraints definiert und es gibt keine Referenzen auf Elemente. Daher hat das Schema eine flache Struktur, die einer Baumstrukturansicht der Datenbank ähnelt. Die Spezifikation kann im ANSI Store erworben werden. Nähere Informationen dazu finden Sie unter www.iso.org.
Im Mapping unten sehen Sie, dass Datenbankdaten aus verschiedenen Root-Tabellen auf eine flache SQL/XML-Struktur gemappt wurden. Die verknüpften Tabellen werden ignoriert. Es können auch Datenbankdaten aus den verknüpften Tabellen gemappt werden. Falls jedoch Book-Datensätze vorhanden sind, die zu keinem Author-Element gehören, so werden diese Book-Datensätze nicht auf die Zielkomponente gemappt.
Als Ergebnis erhalten wir eine Liste von Author-Zeilen und eine separate Liste von Book-Zeilen (Abbildung unten).
<Author>
<row>
<ID>1</ID>
<Name>Stephen King</Name>
<Country>US</Country>
</row>
<row>
<ID>2</ID>
<Name>Ragnar Jonasson</Name>
<Country>Iceland</Country>
</row>
<row>...</row>
<row>...</row>
</Author>
<Book>
<row>
<Title>Misery</Title>
<BookID>1</BookID>
<AuthorID>1</AuthorID>
<ISBN>1501143107</ISBN>
<Publisher>Scribner</Publisher>
<PrintLength>368</PrintLength>
<Year>2016</Year>
<Genre>Horror</Genre>
<Price>11.99</Price>
</row>
<row>
<Title>Nightblind</Title>
<BookID>2</BookID>
<AuthorID>2</AuthorID>
<ISBN>9781910633113</ISBN>
<Publisher>Orenda Books</Publisher>
<PrintLength>231</PrintLength>
<Year>2016</Year>
<Genre>Crime & Mystery</Genre>
<Price>9.99</Price>
</row>
<row>...</row>
<row>...</row>
</Book>
Ein Beispiel zu diesem Szenario finden Sie im folgenden Mapping: MapForceExamples\DB_Altova_SQLXML.mfd.