Mysql
 sql >> Base de données >  >> RDS >> Mysql

Type MySQL ENUM vs tables de jointure

  • La modification de l'ensemble de valeurs dans un ENUM nécessite un ALTER TABLE ce qui pourrait entraîner une restructuration de la table - une opération incroyablement coûteuse (la restructuration de la table ne se produit pas si vous ajoutez simplement une nouvelle valeur à la fin de la définition ENUM, mais si vous en supprimez une ou modifiez l'ordre, une table restructurer). Alors que la modification de l'ensemble de valeurs dans une table de recherche est aussi simple que INSERT ou DELETE.

  • Il n'y a aucun moyen d'associer d'autres attributs aux valeurs d'un ENUM, comme ceux qui sont retirés et ceux qui peuvent être placés dans une liste déroulante de votre interface utilisateur. Cependant, une table de recherche peut inclure des colonnes supplémentaires pour ces attributs.

  • Il est très difficile d'interroger un ENUM pour obtenir une liste de valeurs distinctes, vous obligeant essentiellement à interroger la définition du type de données à partir de INFORMATION_SCHEMA , et en analysant la liste à partir du BLOB renvoyé. Vous pouvez essayer SELECT DISTINCT status de votre table, mais cela n'obtient que les valeurs d'état actuellement utilisées, qui peuvent ne pas être toutes les valeurs de l'ENUM. Cependant, si vous conservez des valeurs dans une table de recherche, il est facile d'interroger, de trier, etc.

Je ne suis pas un grand fan d'ENUM, comme vous pouvez le constater. :-)

Il en va de même pour les contraintes CHECK qui comparent simplement une colonne à un ensemble fixe de valeurs. Bien que MySQL ne supporte pas les contraintes CHECK de toute façon.

Mise à jour :MySQL 8.0.16 implémente désormais CHECK contraintes .