48 lines
1.5 KiB
SQL
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`);
|