Optionen für Child-Tabellen bei Aktualisierung einer Parent-Tabelle

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

Startseite >  Datenquellen und -ziele > Datenbanken und MapForce > Mappen von Daten auf Datenbanken >

Optionen für Child-Tabellen bei Aktualisierung einer Parent-Tabelle

Wenn mit dem Mapping eine Tabelle aktualisiert wird, bei der es sich um eine "Parent"-Tabelle handelt (d.h. die Tabelle hat Sekundärschlüsselbeziehungen zu anderen Tabellen), können Sie konfigurieren, wie die abhängigen Datensätze in der Quellkomponente und in der Zieltabelle behandelt werden sollen. Angenommen Sie möchten die Tabelle "Department" in der Datenbank altova.mdb aktualisieren. Da jede Person (person) über einen Sekundärschlüssel mit einer Abteilung (department) verknüpft ist, sollte auch an der Tabelle "Person" eine Aktion (z.B. Einfügen, Aktualisieren oder Löschen) ausgeführt werden. Dadurch bewahren Sie die Datenbankintegrität und vermeiden Mapping-Fehler.

 

In diesem Kapitel werden die Optionen behandelt, die für die Tabelle "Person" zur Verfügung stehen, wenn Sie die Parent-Tabelle "Department" aktualisieren. Im Beispiel werden die folgenden Dateien verwendet:

 

altova-cmpy-extra.xml - enthält die Quelldaten, die in die Datenbank eingefügt werden sollen
Altova_Hierarchical.xsd - das Schema, anhand dessen die obige Instanzdatei validiert wird
Altova.mdb - die Zieldatenbank, die aktualisiert werden soll.

 

Sie finden all diese Dateien im Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\. Der vollständige Pfad wurde in der Folge aus Gründen der Einfachheit weggelassen.

 

Im Mapping in diesem Beispiel wird eine Beispieldatenbankdatei geändert. Es wird empfohlen, eine Sicherungskopie der Originaldatenbank zu erstellen und mit einer neuen Kopie zu arbeiten, bevor Sie die unten stehende Anleitung befolgen. Dadurch stellen Sie sicher, dass die Originaldaten nicht überschrieben werden und Sie dasselbe Ergebnis, wie unten beschrieben, erhalten. Nähere Informationen dazu finden Sie unter Ausführen von Mappings, die Datenbanken modifizieren.

 

Fügen Sie zuerst das XML-Quellschema und die XML-Instanz sowie die Zieldatenbank zum Mapping hinzu (siehe Beispiel: Hinzufügen der Datenbank "altova.mdb" zum Mapping). Gehen Sie vor, wie im Kapitel Die Aktion "Aktualisieren, wenn...Rest einfügen" beschrieben. Ziehen Sie anschließend die Mapping-Verbindungen, wie unten gezeigt:

mf_db_child_table_01

Wie Sie in der Abbildung oben sehen, aktualisiert das Mapping die Tabelle "Department" in der Zieldatenbank. Die Tabelle "Department" wurde als "Root"-Tabelle ausgewählt. Nähere Informationen zu Root-Tabellen und deren Zweck finden Sie unter Behandlung von Datenbankbeziehungen. Thema des aktuellen Kapitels ist die Aktion, die an der Child-Tabelle "Person" ausgeführt wird.

 

In den folgenden Tabellen sind verschiedene Konfigurationsoptionen und das entsprechende Mapping-Ergebnis beschrieben. Diese Optionen können im Dialogfeld "Datenbankaktionen" der Parent-Tabelle "Department" und der Child-Tabelle "Person" ausgewählt werden.

 

Konfiguration A

Einstellungen

Mapping-Ergebnis

mf_db_child_table_02

Tabelle "Department"

mf_db_child_table_03

Tabelle "Person"

Aktualisiert die Department-Datensätze, deren PrimaryKey in der XML-Quelldatei mit dem PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
Fügt alle Person-Datensätze aus der XML-Input-Instanz, die nicht bereits in der Datenbank vorhanden sind, in die Datenbank ein.
Löscht die Child-Daten (Person-Datensätze) derjenigen Department-Datensätze, die die Aktualisieren, wenn...-Bedingung erfüllen.

 

Konfiguration B

Einstellungen

Mapping-Ergebnis

mf_db_child_table_04

Tabelle "Department"

mf_db_child_table_03

Tabelle "Person"

Das Mapping schlägt mit einem SQL-Fehler fehl. Grund dafür ist, dass versucht wird, neue Person-Datensätze einzufügen, die denselben Primärschlüssel wie die vorhandenen Person-Datensätze haben. Wenn Sie zusätzlich zu den bereits vorhandenen Datensätzen neue Datensätze aus der XML-Input-Datei einfügen möchten, dann verwenden Sie die nächste Option.

 

Konfiguration C

Einstellungen

Mapping-Ergebnis

mf_db_child_table_04

Tabelle "Department"

mf_db_child_table_06

Tabelle "Person"

Aktualisiert die Department-Datensätze, bei denen PrimaryKey in der XML-Quelldatei mit PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
Zusätzlich zu den vorhandenen Datensätzen werden neue Person-Datensätze (mit generierten Primärschlüsseln) in die Tabelle "Person" eingefügt.

 

Konfiguration D

Einstellungen

Mapping-Ergebnis

mf_db_child_table_05

Tabelle "Department"

mf_db_child_table_03

Tabelle "Person"

Aktualisiert die Department-Datensätze, bei denen PrimaryKey in der XML-Quelldatei mit PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
In die Tabelle "Person" werden keine Datensätze eingefügt, weil die Option Input-Child-Daten ignorieren für die Parent-Tabelle "Department" aktiviert ist.

 

Konfiguration E

Einstellungen

Mapping-Ergebnis

mf_db_child_table_02

Tabelle "Department"

mf_db_child_table_07

Tabelle "Person"

Aktualisiert die Department-Datensätze, bei denen PrimaryKey in der XML-Quelldatei mit PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
Löscht alle Personen, die mit einer Abteilung (Department) verknüpft sind, für die es in der XML-Quelldatei eine Primärschlüsselentsprechung gibt. Der Grund dafür ist, dass die Option Daten in Child-Tabellen löschen für die Parent-Tabelle "Department" aktiviert ist.
Personen-Datensätze, die mit einer Abteilung verknüpft sind, die die Aktualisieren, wenn...-Bedingung nicht erfüllen, bleiben in der Datenbank.
Es werden keine Datensätze in der Tabelle "Person" aktualisiert.

 

 

Konfiguration F

Einstellungen

Mapping-Ergebnis

mf_db_child_table_02

Tabelle "Department"

mf_db_child_table_08

Tabelle "Person"

Aktualisiert die Department-Datensätze, bei denen PrimaryKey in der XML-Quelldatei mit PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
Löscht alle Personen, die mit einer Abteilung (Department) verknüpft sind, für die es in der XML-Quelldatei eine Primärschlüsselentsprechung gibt. Der Grund dafür ist, dass die Option Daten in Child-Tabellen löschen für die Parent-Tabelle "Department" aktiviert ist.
Personen-Datensätze, die mit einer Abteilung verknüpft sind, die die Aktualisieren, wenn...-Bedingung nicht erfüllen, bleiben in der Datenbank.

 

 

Konfiguration G

Einstellungen

Mapping-Ergebnis

mf_db_child_table_04

Tabelle "Department"

mf_db_child_table_08

Tabelle "Person"

Aktualisiert die Department-Datensätze, bei denen PrimaryKey in der XML-Quelldatei mit PrimaryKey in der Datenbanktabelle übereinstimmt.
Vorhandene Department-Datensätze, die in der XML-Input-Datei keine Entsprechung haben (in der Quelldatei ist kein solcher Schlüssel vorhanden), werden nicht aktualisiert.
Löscht alle Personen, die beide der folgenden Bedingungen erfüllen:

 

a.Der Personen-Datensatz ist mit einer Abteilung verknüpft, die eine PrimaryKey-Entsprechung in der XML-Quelldatei hat und
b.Der Personen-Datensatz hat in der XML-Quelldatei eine PrimaryKey-Entsprechung.

© 2019 Altova GmbH