48 lines
1.5 KiB
SQL

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`);