Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh memasukkan data dengan cekap ke dalam jadual induk dan anak dalam struktur data yang kompleks menggunakan prosedur tersimpan, memastikan pemetaan data yang betul dan prestasi optimum?

Bagaimanakah saya boleh memasukkan data dengan cekap ke dalam jadual induk dan anak dalam struktur data yang kompleks menggunakan prosedur tersimpan, memastikan pemetaan data yang betul dan prestasi optimum?

DDD
Lepaskan: 2025-01-14 19:12:44
asal
496 orang telah melayarinya

Prosedur tersimpan untuk memasukkan data jadual ibu bapa-anak dengan cekap ke dalam struktur data yang kompleks

Soalan:

Dalam struktur pangkalan data yang kompleks, bagaimana menggunakan prosedur tersimpan untuk memasukkan data dengan cekap ke dalam jadual induk-anak sambil memastikan pemetaan data yang betul dan mengoptimumkan prestasi?

Penyelesaian:

Untuk memasukkan data ke dalam jadual induk-anak dengan cekap, ikut langkah berikut:

  1. Buat lajur ID sementara: Tambah lajur EmployeeId dalam jadual takrif pengguna (UDT) untuk menyimpan ID sementara setiap pekerja.

  2. Isi UDT dengan ID sementara: Masukkan data ke dalam UDT, termasuk ID sementara.

  3. Buat jadual pemetaan EmployeeID: Isytihar pembolehubah jadual (@EmployeeidMap) untuk memetakan nilai yang disisipkan daripada jadual pekerja kepada ID pekerja sementara dalam UDT.

  4. Gunakan pernyataan MERGE untuk memasukkan ke dalam jadual pekerja: Gunakan pernyataan MERGE untuk memasukkan data ke dalam jadual @MainEmployee dan keluarkan data sumber ID pekerja dan memasukkan ID pekerja pada pemetaan meja.

  5. Masukkan ke dalam jadual ParentEmployeeDepartment: Sertai UDT dengan jadual pemetaan, dapatkan ID pekerja sebenar dan masukkan data ke dalam jadual @ParentEmployeeDepartment.

  6. memetakan ke ParentEmployeeDepartmentID: Menggunakan data dalam @ParentEmployeeDepartment, petakan nilai sebenar dalam ParentEmployeeDepartmentID kepada data yang dihantar oleh prosedur tersimpan.

  7. Sisipkan ke dalam subjadual: Gunakan Parent dan EmployeeID daripada jadual DepartmentType untuk menentukan subjadual yang anda ingin masukkan data.

Kod:

<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>
Salin selepas log masuk

Output:

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

Nota:

Penyelesaian ini menggunakan jadual pemetaan untuk memadankan data berbeza antara jadual dengan cekap. Ia mengelakkan operasi baris demi baris dan mengoptimumkan prestasi, menjadikannya sesuai untuk set data yang besar.

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?

Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan data dengan cekap ke dalam jadual induk dan anak dalam struktur data yang kompleks menggunakan prosedur tersimpan, memastikan pemetaan data yang betul dan prestasi optimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan