ALTER TABLE `person` ADD COLUMN `main_department_id` INT NULL; CREATE INDEX `person_main_department_id_idx` ON `person`(`main_department_id`); ALTER TABLE `person` ADD CONSTRAINT `person_main_department_id_fkey` FOREIGN KEY (`main_department_id`) REFERENCES `department`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; CREATE TABLE `person_department` ( `person_id` INT NOT NULL, `department_id` INT NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`person_id`, `department_id`), INDEX `person_department_department_id_idx`(`department_id`), CONSTRAINT `person_department_person_id_fkey` FOREIGN KEY (`person_id`) REFERENCES `person`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `person_department_department_id_fkey` FOREIGN KEY (`department_id`) REFERENCES `department`(`id`) ON DELETE CASCADE ON UPDATE CASCADE ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; UPDATE `person` AS `p` LEFT JOIN `department` AS `d` ON `d`.`source_group_id` = `p`.`source_main_department_id` SET `p`.`main_department_id` = `d`.`id` WHERE `p`.`source_system` = 'ding_hr' AND `p`.`source_main_department_id` IS NOT NULL; INSERT INTO `person_department` (`person_id`, `department_id`, `created_at`, `updated_at`) SELECT DISTINCT `id`, `main_department_id`, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3) FROM `person` WHERE `main_department_id` IS NOT NULL ON DUPLICATE KEY UPDATE `updated_at` = VALUES(`updated_at`);