-- ======================================== -- Script d'ajout de contraintes UNIQUE -- Pour éviter les doublons dans ope_users et ope_users_sectors -- Date: 2025-10-10 -- ======================================== USE pra_geo; -- ======================================== -- 1. TABLE ope_users -- ======================================== -- Vérifier et supprimer les doublons existants avant d'ajouter la contrainte -- (Garde la première occurrence, supprime les duplicatas) DELETE ou1 FROM ope_users ou1 INNER JOIN ope_users ou2 WHERE ou1.id > ou2.id AND ou1.fk_operation = ou2.fk_operation AND ou1.fk_user = ou2.fk_user; -- Ajouter la contrainte UNIQUE sur (fk_operation, fk_user) ALTER TABLE ope_users ADD UNIQUE KEY `idx_operation_user` (`fk_operation`, `fk_user`); -- ======================================== -- 2. TABLE ope_users_sectors -- ======================================== -- Vérifier et supprimer les doublons existants avant d'ajouter la contrainte -- (Garde la première occurrence, supprime les duplicatas) DELETE ous1 FROM ope_users_sectors ous1 INNER JOIN ope_users_sectors ous2 WHERE ous1.id > ous2.id AND ous1.fk_operation = ous2.fk_operation AND ous1.fk_user = ous2.fk_user AND ous1.fk_sector = ous2.fk_sector; -- Ajouter la contrainte UNIQUE sur (fk_operation, fk_user, fk_sector) ALTER TABLE ope_users_sectors ADD UNIQUE KEY `idx_operation_user_sector` (`fk_operation`, `fk_user`, `fk_sector`); -- ======================================== -- Vérification -- ======================================== -- Vérifier les contraintes ajoutées SHOW INDEX FROM ope_users WHERE Key_name = 'idx_operation_user'; SHOW INDEX FROM ope_users_sectors WHERE Key_name = 'idx_operation_user_sector'; -- Compter les doublons restants (devrait retourner 0 lignes) SELECT fk_operation, fk_user, COUNT(*) as count FROM ope_users GROUP BY fk_operation, fk_user HAVING count > 1; SELECT fk_operation, fk_user, fk_sector, COUNT(*) as count FROM ope_users_sectors GROUP BY fk_operation, fk_user, fk_sector HAVING count > 1;