Maison > base de données > tutoriel mysql > Comment insérer efficacement des données dans les tables parent et enfant avec un mappage correct ?

Comment insérer efficacement des données dans les tables parent et enfant avec un mappage correct ?

DDD
Libérer: 2025-01-14 19:26:45
original
569 Les gens l'ont consulté

How to Efficiently Insert Data into Parent and Child Tables with Correct Mapping?

Insérer les données dans la table parent-enfant

L'objectif de cet exemple est d'insérer les données d'un UDT entrant (@tEmployeeData) dans plusieurs tables, garantissant ainsi un mappage correct entre les enregistrements parent et enfant.

Résoudre les problèmes de cartographie

Pour établir le mappage nécessaire, nous ajoutons une colonne temporaire employeId à l'UDT et la remplissons de valeurs continues. De plus, nous créons une variable de table (@EmployeeidMap) pour mapper l'ID d'employé temporaire dans l'UDT avec l'ID d'employé réel généré dans la table cible.

Remplir la table principale

Nous utilisons MERGE pour remplir la table @MainEmployee avec les valeurs des données insérées et des données sources. Cela nous permet de capturer la valeur EmployeeID générée et de remplir la table de mappage en même temps.

<code class="language-sql">MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (FirstName, LastName)
VALUES (sourceData.FirstName, sourceData.LastName)
OUTPUT sourceData.EmployeeId, inserted.EmployeeID 
INTO @EmployeeidMap (temp_id, id);</code>
Copier après la connexion

Mapper et insérer dans les tables parent-enfant

Nous rejoignons ensuite @tEmployeeData avec @EmployeeidMap pour obtenir l'identifiant réel de l'employé, que nous utilisons pour remplir la table @ParentEmployeeDepartment. De même, nous connectons @ParentEmployeeDepartment avec @tEmployeeData pour mapper l'ID parent aux données enfants et insérons les données dans @ChildEmployeeDepartmentTypeA et @ChildEmployeeDepartmentTypeB.

Insert de test

Pour vérifier que le mappage a réussi, nous exécutons une requête qui joint les données UDT au mappage et aux tables cibles.

<code class="language-sql">SELECT FirstName,
     LastName,
     SentData.DepartmentType As [部门类型],
     DepartmentBuilding As 建筑物,
     DepartmentEmployeeLevel As [员工级别],
     DepartmentTypeAMetadata As [A 元数据],
     DepartmentTypeBMetadata As [B 元数据],
     SentData.EmployeeId As 临时ID, EmpMap.id As [员工ID], DeptMap.ParentEmployeeDepartmentID As [部门ID]
FROM @tEmployeeData SentData
INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id 
INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID</code>
Copier après la connexion

Cette approche garantit que les données enfants sont correctement mappées à leur enregistrement parent respectif, tout en optimisant les performances en évitant les opérations ligne par ligne inutiles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal