Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL ENUM tipo vs tabelas de junção


  • Alterar o conjunto de valores em um ENUM requer um ALTER TABLE o que pode causar uma reestrutura de tabela -- uma operação incrivelmente cara (a reestrutura de tabela não acontece se você simplesmente adicionar um novo valor ao final da definição ENUM, mas se você excluir um ou alterar a ordem, ele faz uma tabela reestruturar). Considerando que alterar o conjunto de valores em uma tabela de pesquisa é tão simples quanto INSERT ou DELETE.

  • Não há como associar outros atributos aos valores em um ENUM, como quais foram retirados e quais são elegíveis para serem colocados em uma lista suspensa em sua interface de usuário. No entanto, uma tabela de pesquisa pode incluir colunas adicionais para esses atributos.

  • É muito difícil consultar um ENUM para obter uma lista de valores distintos, basicamente exigindo que você consulte a definição do tipo de dados de INFORMATION_SCHEMA , e analisando a lista do BLOB retornado. Você pode tentar SELECT DISTINCT status da sua tabela, mas que obtém apenas os valores de status atualmente em uso, que podem não ser todos os valores no ENUM. No entanto, se você mantiver valores em uma tabela de pesquisa, será fácil consultar, classificar etc.

Eu não sou um grande fã do ENUM, como você pode ver. :-)

O mesmo se aplica às restrições CHECK que simplesmente comparam uma coluna a um conjunto fixo de valores. Embora o MySQL não suporte restrições CHECK de qualquer maneira.

Atualização:MySQL 8.0.16 agora implementa CHECK restrições .