Skip to content

3.8.1

Choose a tag to compare

@nilsonLazarin nilsonLazarin released this 11 May 13:55
· 266 commits to master since this release

What's Changed

Full Changelog: 3.8.0...3.8.1

Nova tabela

-- -----------------------------------------------------
-- Table `wegia`.`socio_has_tag`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `wegia`.`socio_has_tag` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `id_socio` INT(11) NOT NULL,
  `id_sociotag` INT(11) NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_socio_tag` (`id_socio`, `id_sociotag`),
  KEY `idx_sociotag` (`id_sociotag`),  -- índice extra para busca por tag isolada
  CONSTRAINT `fk_socio_has_tag_socio`
    FOREIGN KEY (`id_socio`) REFERENCES `wegia`.`socio` (`id_socio`)
    ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_socio_has_tag_sociotag`
    FOREIGN KEY (`id_sociotag`) REFERENCES `wegia`.`socio_tag` (`id_sociotag`)
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB 
  DEFAULT CHARSET = utf8mb4 
  COLLATE = utf8mb4_unicode_ci;

Migração para bancos de dados em produção.

-- Migracao para remover a coluna socio.id_sociotag
-- Importante:
-- 1) Faça backup antes de executar em producao.
-- 2) Em MySQL, ALTER TABLE faz commit implicito. Esta migracao nao e atomica.
-- 3) Execute em janela de manutencao.

-- Etapa 1: copiar qualquer tag legada ainda existente em socio.id_sociotag
-- para a tabela pivô, sem duplicar vinculos ja migrados.
INSERT INTO socio_has_tag (id_socio, id_sociotag)
SELECT s.id_socio, s.id_sociotag
FROM socio s
LEFT JOIN socio_has_tag sht
  ON sht.id_socio = s.id_socio
 AND sht.id_sociotag = s.id_sociotag
WHERE s.id_sociotag IS NOT NULL
  AND sht.id IS NULL;

-- Etapa 2: validacao opcional.
-- Esta consulta deve retornar 0 antes da remocao da coluna.
-- SELECT COUNT(*) AS socios_sem_tags_legadas_migradas
-- FROM socio s
-- WHERE s.id_sociotag IS NOT NULL
--   AND NOT EXISTS (
--     SELECT 1
--     FROM socio_has_tag sht
--     WHERE sht.id_socio = s.id_socio
--       AND sht.id_sociotag = s.id_sociotag
--   );

-- Etapa 3: remover FK, indice e coluna antiga.
ALTER TABLE socio
  DROP FOREIGN KEY fk_socio_socio_tag1;

ALTER TABLE socio
  DROP INDEX fk_socio_socio_tag1_idx;

ALTER TABLE socio
  DROP COLUMN id_sociotag;