Behandlung von Datenbankbeziehungen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Datenquellen und -ziele > Datenbanken und MapForce > Einführung in Datenbank-Mappings >

Behandlung von Datenbankbeziehungen

Bei relationalen Datenbanken sind, Beziehungen zwischen deren Tabellen definiert. Wenn Sie z.B. einen Blick auf die Datenbank altova.mdb aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\ werfen, so gibt es darin eine Reihe von Beziehungen:

 

Die Beispielfirma (entspricht der Tabelle "Altova") besteht aus einer oder mehreren Niederlassungen (Offices) (z.B. in Brenton und Vereno). In Datenbankbegriffen ausgedrückt besteht eine 1:n-Beziehung zwischen der Tabelle "Altova" und der Tabelle "Office". Anders ausgedrückt kann es für jeden PrimaryKey-Datensatz in der Tabelle "Altova" mehrere ForeignKey-Datensätze in der Tabelle "Office" geben. Jeder "Office"-Datensatz, in dem der ForeignKey-Wert dem PrimaryKey-Wert in "Altova" entspricht, wird daher als eine Niederlassung von "Altova" betrachtet.
Jede Niederlassung besteht aus einer oder mehreren Abteilungen (departments) (z.B., "Marketing", "IT", "Development"). Auch hier besteht wieder eine 1:n-Beziehung zwischen den Tabellen "Office" und "Department".
Schließlich besteht jede Abteilung aus einem oder mehreren Mitarbeitern (person). Daher besteht hier eine 1:n-Beziehung zwischen den Tabellen "Department" und "Person".

mf_db_relationships_01

Tabellenbeziehungen in der Datenbank altova.mdb (Microsoft Access-Ansicht "Relationships")

Beziehungen zwischen Datenbanktabellen sind wichtig für Mapping-Zwecke. MapForce berücksichtigt solche Datenbankbeziehungen, wenn Sie eine Datenbank zum Mapping hinzufügen. Auf diese Art können Sie beim Mappen von Daten von oder auf eine Datenbank die Datenbankbeziehungen beibehalten. Fügen Sie zum besseren Verständnis dieses Prinzips die Datenbank altova.mdb (mit dem Menübefehl Einfügen | Datenbank) zum Mapping hinzu. Nennen wir jeder der unten stehenden Tabellen eine "root"-Tabelle:

mf_db_relationships_02

"Root"-Tabellen

Wenn Sie eine "root"-Tabelle erweitern, werden alle damit in Beziehung stehenden Tabellen in einer Baumstruktur angezeigt. Wenn Sie z.B. die Tabelle Office erweitern, sehen Sie, wie die Hierarchie der damit in Beziehung stehenden Tabellen angezeigt wird:

 

ein Linkspfeil ( mf_ic_db_left_arrow ) vor einer Tabelle zeigt an, dass dies eine Child-Tabelle ist. So ist z.B. Address ein Child von Office. Department ist ebenfalls ein Child von Office und gleichzeitig eine gleichrangige Tabelle zu Address, daher befinden sich beide Tabelle auf derselben Einrückungsebene. Wie Sie sehen, entspricht die Beziehung im Mapping der im Beziehungsdiagramm oben.
Ein Rechtspfeil ( mf_ic_db_right_arrow ) vor einer Tabelle kennzeichnet eine Parent-Tabelle. So ist z.B. Altova ein Parent von Office.

mf_db_relationships_03

Tabellenbeziehungen in MapForce (altova.mdb Datenbank)

Diese hierarchische Tabellendarstellung hilft Ihnen, die bestehenden Datenbankbeziehungen zu erhalten, wenn Ihr Mapping Daten aus einer Datenbank liest oder in diese schreibt. Angenommen Sie möchten alle Datensätze aus der Tabelle Person gruppiert nach Abteilung (Department) in eine XML-Datei schreiben. Dabei sollte in Ihrer XML-Datei jeder Mitarbeiter, ähnlich wie in der in diesem Beispiel verwendeten Datenbank altova.mdb, mit einer Abteilung verknüpft sein:

mf_db_relationships_04

Wie Sie in der Abbildung oben sehen, hat die Abteilung "Administration" drei Mitarbeiter, "Marketing" zwei, "Engineering" sechs, usw.

 

Wenn Sie beim Mappen von Daten aus dieser Datenbank möchten, dass jeder Mitarbeiter der richtigen Abteilung zugeordnet wird, müssen Sie Department als "root"-Tabelle verwenden und die Daten anschließend von der Tabelle Person, die ein Child von Department ist, mappen.

mf_db_relationships_05

Das Mapping oben ist eine geänderte DB_Altova_Hierarchical.mfd-Datei aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\. Bei Anzeige einer Vorschau des Mappings wird als Ergebnis jeder Mitarbeiter nach Abteilung gruppiert, was Ziel dieses Mappings war. "Administration" hat also drei Mitarbeiter, "Marketing" zwei, "Engineering" sechs, usw.

mf_db_relationships_06

 

Werfen Sie nun einen Blick auf das geänderte Mapping unten, in dem die Verbindungen absichtlich so gezogen wurden, dass sowohl Department als auch Person "root"-Tabellen sind.

mf_db_relationships_07

Wenn Sie diesmal eine Vorschau des Mappings anzeigen, werden alle Mitarbeiter (unabhängig von Ihrer eigenen Abteilung) unter jeder Ziel-Abteilung gruppiert, was nicht beabsichtigt war. Hier hat nun "Administration" 21 Mitarbeiter, ebenso wie "Marketing", "Engineering", usw.

mf_db_relationships_08

 

Im zweiten Beispiel werden die Datenbankbeziehungen aufgrund der Art, wie die Verbindung erstellt wurde, ignoriert.

 

Wenn Sie daher Datenbankbeziehungen erhalten möchten, stellen Sie sicher, dass die Verbindungen von oder auf dieselbe "root"-Tabelle, die die gewünschten Child-Verbindungen enthält, gezogen werden. Dies funktioniert sowohl bei der Quell- als auch der Zieldatenbank auf dieselbe Art. Beispiele für Datenbankmappings, in denen Beziehungen erhalten bleiben, finden Sie in den Dateien DB_Altova_Hierarchical.mfd und Altova_Hierarchical_DB.mfd aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\ (siehe auch Einfügen von Daten in mehrere verknüpfte Tabellen)..

 

In manchen Fällen sollten Datenbankbeziehungen nicht beibehalten werden. Angenommen, Sie möchten alle Daten aus der Datenbank altova.mdb in eine flache, gemäß der SQL/XML-Spezifikation (Teil 14 der Structured Query Language (SQL)-Spezifikation) erstellte XML-Datei exportieren. Diese Art von Mapping sehen Sie in der Beispieldatei DB_Altova_SQLXML.mfd aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\. Ziel des Mappings ist, Datenbankdaten als flache XML-Datei anzulegen. Das SQL/XML-Zielschema wurde mit XMLSpy mit dem Menübefehl Konvertieren | XML-Schema von DB-Struktur erzeugen generiert.

mf_db_relationships_09

DB_Altova_SQLXML.mfd

Wie oben gezeigt, hat jede Datenbanktabelle ein entsprechendes Element in der XML-Zieldatei. Bei Anzeige einer Vorschau auf das Mappingergebnis sehen Sie, dass die Datenbankzeilen aus den einzelnen Tabellen in die "row"-Elemente in der Zieldatei geschrieben werden.

mf_db_relationships_10

Wie Sie in der XML-Ausgabedatei sehen, gibt es zwischen den XML-Elementen keine Hierarchie; es handelt sich um eine flache SQL/XML-Struktur. Die Datenbankbeziehungen wurden ignoriert, da wir die Daten absichtlich von mehreren "root"-Tabellen aus gemappt haben.


© 2019 Altova GmbH