Disons que dans une table aléatoire, vous avez une colonne nommée status . Ses valeurs du monde réel seraient activées ou désactivées .
Est-il préférable que le type de données de cette colonne soit un int / bool (1 ou zéro) ou à utiliser ENUM
avec les valeurs étant enabled
et disabled
? Quels sont les avantages ou les inconvénients?
Disons qu'au lieu de deux statuts valides, vous en avez 4 ou 10, voire plus? Est-ce que les avantages et les inconvénients vont d'un côté ou de l'autre à mesure que le nombre de valeurs requises augmente?
mysql
database-design
datatypes
Jake Wilson
la source
la source
Réponses:
J'ai trouvé un article très bizarre mais instructif sur 8 raisons pour lesquelles on ne devrait pas utiliser ENUM.
Même sans l'article, je sais
la source
units
modèle pour un élément de magasin dans lequel chaque enregistrement doit avoir une propriété pour ses unités associéescomposition
. Soit Ton, Kg, gmTout d’abord, nous avons les exigences de stockage . Je vais supposer que vous vouliez dire un tinyint (au lieu de int).
Donc, en surface, ils sont tous identiques. ENUM utilise cependant quelques métadonnées pour la valeur de chaîne qui lui est associée ( src plus ancien )
Je dirais que, à mesure que vous ajoutez de nouvelles valeurs, tout avantage commence à disparaître
ENUM
. Surtout si vous ajoutez les valeurs après que la table est déjà utilisée, car vous devez modifier la structure de la table pour l'adapter.Quel est l'avantage d'utiliser un
ENUM
? Une représentation sous forme de chaîne de ce que signifie la valeur. Ça y est, en ce qui me concerne. Cela dépend de votre application.la source
Je trouve qu'ENUM est une définition abrégée d'une table de codes. Son principal avantage est d'éviter le code nécessaire pour rejoindre et afficher la description du code. Cela facilite également la définition des valeurs si elles arrivent sous forme de chaîne.
Je trouve qu'il présente les inconvénients suivants:
la source