Altova MapForce 2023 Enterprise Edition

Options pour tables enfants lors de la mise à jour d'une table parent

Accueil Préc Haut Suivant

Lorsque le mappage met à jour une table qui est une table "parent" (c'est à dire qu'elle a des relations étrangères avec d'autres tables), vous pouvez configurer comment les enregistrements dépendants doivent être traités aussi bien dans les données de source que la table de cible. Par exemple, partons du principe que vous souhaitez mettre à jour la table "Department" dans la base de données altova.sqlite. Étant donné que chaque personne est liée à un département par le biais d'une clé étrangère, vous allez probablement souhaiter prendre aussi une action envers la table "Person" (qui pourrait être insertion, mise à jour ou supprimer). Ainsi, vous contribuez à conserver l'intégrité de la base de données et évitez les erreurs de mappage.

 

Cette rubrique traite des options disponibles pour la table "Person" lorsque vous mettez à jour la table parent "Department". L'exemple utilise les fichiers suivants :

 

altova-cmpy-extra.xml — contient les données de source à insérer dans la base de données.

Altova_Hierarchical.xsd — le schéma utilisé pour valider le fichier d'instance ci-dessus.

altova.sqlite — la base de données cible à mettre à jour.

 

Tous les fichiers sont disponibles dans le dossier <Documents>\Altova\MapForce2023\MapForceExamples\. Ci-dessous, le chemin complet y menant sera omis, pour des raisons de simplicité.

 

Le mappage dans cet exemple modifie un fichier de base de données d'échantillon. Il est fortement recommande de sauvegarder la base de données originale et de commencer avec une nouvelle copie avant de suivre les étapes ci-dessous. Cela garantit que les exemples originaux ne sont pas contournés et que vous obtenez les mêmes résultats ci-dessous. Pour plus d'informations, voir Exécuter des mappages qui modifient les bases de données.

 

D'abord, ajouter le schéma XML de source et d'instance ainsi que la base de données cible dans le mappage. Suivez les mêmes étapes que dans Action "Mettre à jour si... Insérer Rest". Ensuite, tirer les connexions de mappage comme indiqué ci-dessous :

 

mf_db_child_table_01

 

Comme illustré ci-dessus, le mappage met à jour la table "Department" dans la base de données cible. La table "Department" est choisie en tant que table "root". Pour plus d'informations concernant ce qu'est une table racine et pourquoi elle est nécessaire, voir Gérer des relations de base de données. L'action à prendre par rapport à la table enfant "Person" est le sujet de cette rubrique.

 

Les tables suivantes illustrent plusieurs options de configuration et le résultat de mappage correspondant. Ces options peuvent être sélectionnées depuis le dialogue Actions de table de base de données de la table parent "Department" et la table enfant "Person".

 

Configuration A

Paramètres

Résultat de mappage

mf_db_child_table_02

Table "Department"

mf_db_child_table_03

Table "Person"

Met à jour les enregistrements Department dans lequel PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Les Insertions, provenant de l'instance XML d'entrée, tous les enregistrements Person qui n'existent pas déjà dans la base de données.

Supprime des données enfant (enregistrements Person) parmi les enregistrements Department qui satisfont la condition Mettre à jour si....

 

Configuration B

Paramètres

Résultat de mappage

mf_db_child_table_04

Table "Department"

mf_db_child_table_03

Table "Person"

Le mappage échoue avec une erreur d'exécution SQL. La raison est que le mappage tente d'insérer de nouveaux enregistrements Person avec la même clé primaire que les enregistrements de Person existants. Si vous souhaitez insérer des enregistrements depuis le XML d'entrée dans ceux se trouvant déjà dans la base de données, voir l'option suivante.

 

Configuration C

Paramètres

Résultat de mappage

mf_db_child_table_04

Table "Department"

mf_db_child_table_06

Table "Person"

Met à jour les enregistrements Department lorsque PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Des enregistrements New Person (avec des clés primaires générées) sont insérés dans la table Person en plus des enregistrements existants.

 

Configuration D

Paramètres

Résultat de mappage

mf_db_child_table_05

Table "Department"

mf_db_child_table_03

Table "Person"

Met à jour les enregistrements Department lorsque PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Aucun enregistrement n'est inséré dans la table Person par ce que l'option Ignorer les données enfant d'entrée est activée à partir de la table parent Departments.

 

Configuration E

Paramètres

Résultat de mappage

mf_db_child_table_02

Table "Department"

mf_db_child_table_07

Table "Person"

Met à jour les enregistrements Department lorsque PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Supprime tous les enregistrements Person liés à une Department qui dispose d'une PrimaryKey correspondante dans le XML de source. La raison est que l'option Supprimer des données dans des tables enfant est activée pour la table parent Department.

Les enregistrements Person liés à un département qui ne satisfont pas à la condition Mettre à jour si... restent dans la base de données.

Aucun enregistrement n'est mis à jour dans la table Person.

 

Configuration F

Paramètres

Résultat de mappage

mf_db_child_table_02

Table "Department"

mf_db_child_table_08

Table "Person"

Met à jour les enregistrements Department lorsque PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Supprime tous les enregistrements Person liés à une Department qui dispose d'une PrimaryKey correspondante dans le XML de source. La raison est que l'option Supprimer des données dans des tables enfant est activée pour la table parent Department.

Les enregistrements Person liés à un département qui ne satisfont pas à la condition Mettre à jour si... restent dans la base de données.

 

Configuration G

Paramètres

Résultat de mappage

mf_db_child_table_04

Table "Department"

mf_db_child_table_08

Table "Person"

Met à jour les enregistrements Department lorsque PrimaryKey dans le XML de source correspond à la PrimaryKey dans la table de base de données.

Ne met pas à jour les enregistrements Department existants qui n'ont pas de contrepartie dans le fichier XML d'entrée (aucune clé de ce type n'existe dans la source).

Supprime tous les enregistrements Person qui satisfont aux deux conditions suivantes :

 

a.L'enregistrement Person est lié à un Department qui possède une PrimaryKey correspondante dans le XML de source, et

b.L'enregistrement Person possède une PrimaryKey correspondante dans le XML de source.

© 2017-2023 Altova GmbH