-- ============================================================================ -- Migration 030 - UNIQUE(policy_id, version) su policy_versions (P3 hardening) -- ---------------------------------------------------------------------------- -- Evita snapshot duplicati della stessa versione di policy (riapprovazioni -- ripetute con la stessa version creavano righe duplicate, confondendo il diff). -- Idempotente: aggiunge l'indice solo se assente; de-duplica prima se necessario. -- -- mysql -h localhost nis2_agile_db -e "source docs/sql/030_policy_versions_unique.sql" -- ============================================================================ -- 1) Rimuovi eventuali duplicati pre-esistenti (mantieni il piu recente per id) DELETE pv1 FROM policy_versions pv1 JOIN policy_versions pv2 ON pv1.policy_id = pv2.policy_id AND pv1.version = pv2.version AND pv1.id < pv2.id; -- 2) Aggiungi UNIQUE solo se non esiste gia DELIMITER // DROP PROCEDURE IF EXISTS _mig030 // CREATE PROCEDURE _mig030() BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'policy_versions' AND INDEX_NAME = 'uq_policy_version' ) THEN ALTER TABLE policy_versions ADD UNIQUE KEY uq_policy_version (policy_id, version); END IF; END // DELIMITER ; CALL _mig030(); DROP PROCEDURE IF EXISTS _mig030; -- ROLLBACK: -- ALTER TABLE policy_versions DROP INDEX uq_policy_version;