Maison >base de données >tutoriel mysql >Comment puis-je insérer efficacement des données dans des tables parent et enfant dans une structure de données complexe à l'aide d'une procédure stockée, garantissant ainsi un mappage de données approprié et des performances optimales ?

Comment puis-je insérer efficacement des données dans des tables parent et enfant dans une structure de données complexe à l'aide d'une procédure stockée, garantissant ainsi un mappage de données approprié et des performances optimales ?

DDD
DDDoriginal
2025-01-14 19:12:44520parcourir

Une procédure stockée pour insérer efficacement des données de table parent-enfant dans des structures de données complexes

Question :

Dans une structure de base de données complexe, comment utiliser des procédures stockées pour insérer efficacement des données dans des tables parent-enfant tout en garantissant un mappage correct des données et en optimisant les performances ?

Solution :

Pour insérer efficacement des données dans des tables parent-enfant, suivez ces étapes :

  1. Créez une colonne d'ID temporaire : Ajoutez une colonne EmployeeId dans la table définie par l'utilisateur (UDT) pour enregistrer l'ID temporaire de chaque employé.

  2. Remplir l'UDT avec un identifiant temporaire : Insérez des données dans l'UDT, y compris un identifiant temporaire.

  3. Créer une table de mappage EmployeeID : Déclarez une variable de table (@EmployeeidMap) pour mapper la valeur insérée dans la table des employés à l'ID d'employé temporaire dans l'UDT.

  4. Utilisez l'instruction MERGE pour insérer dans la table des employés : Utilisez l'instruction MERGE pour insérer des données dans la table @MainEmployee et affichez l'ID d'employé des données sources et l'ID d'employé inséré dans le mappage tableau.

  5. Insérer dans la table ParentEmployeeDepartment : Rejoignez l'UDT avec la table de mappage, obtenez l'ID réel de l'employé et insérez les données dans la table @ParentEmployeeDepartment.

  6. correspond à ParentEmployeeDepartmentID : À l'aide des données de @ParentEmployeeDepartment, mappez la valeur réelle de ParentEmployeeDepartmentID aux données envoyées par la procédure stockée.

  7. Insérer dans une sous-table : Utilisez Parent et EmployeeID de la table DepartmentType pour déterminer dans quelle sous-table vous souhaitez insérer des données.

Code :

<code class="language-sql">-- 创建EmployeeID映射表
DECLARE @EmployeeidMap TABLE (temp_id int, id int);

-- 使用MERGE语句插入员工表
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;

-- 插入ParentEmployeeDepartment表
INSERT INTO @ParentEmployeeDepartment (EmployeeID, DepartmentType)
SELECT Id, DepartmentType
FROM @tEmployeeData
INNER JOIN @EmployeeidMap ON EmployeeID = temp_id;

-- 映射到ParentEmployeeDepartmentID
SELECT FirstName,
     LastName,
     SentData.DepartmentType AS [Dept. Type],
     DepartmentBuilding AS Building,
     DepartmentEmployeeLevel AS [Emp. Level],
     DepartmentTypeAMetadata AS [A Meta],
     DepartmentTypeBMetadata AS [B Meta],
     SentData.EmployeeId AS TempId, EmpMap.id AS [Emp. Id], DeptMap.ParentEmployeeDepartmentID AS [Dept. Id]
FROM @tEmployeeData SentData
INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id
INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID;</code>

Sortie :

FirstName LastName Dept. Type Building Emp. Level A Meta B Meta TempId Emp. Id Dept. Id
Dave_FN Dave_LN B OpenC XII NULL Lab 8 1 1
Joe_FN Joe_LN A 101 IV Tech/IT NULL 7 2 2
Mike_FN Mike_LN B OpenH XII NULL Med 6 3 3
Tom_FN Tom_LN A 101 IV Tech/IT NULL 5 4 4

Remarque :

Cette solution utilise des tables de mappage pour faire correspondre efficacement différentes données entre les tables. Il évite les opérations ligne par ligne et optimise les performances, ce qui le rend adapté aux grands ensembles de données.

How can I efficiently insert data into parent and child tables in a complex data structure using a stored procedure, ensuring proper data mapping and optimal performance?

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!

Déclaration:
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