Well, I am an advocate of ENUM -- at least in limited use.
I would use it for
status with a small, reasonably static, list of possible values. I would start with
unknown to catch things that are typos.
ALTER TABLE has long been optimized to add a new option on the end of an
I would not use
ENUM for continents. If there are standard abbreviations, I would use a short
VARCHAR for such. For countries, I advocate
country CHAR(2) CHARACTER SET ascii
Using a lookup table can be very bad for efficiency. A "star" schema in Data Warehousing can be terribly inefficient. This happens when multiple
JOINs are needed;
ENUM avoids the inefficiency.
VARCHAR is bulky, which is a big issue in DW applications.
ENUM acts like a string in many situations:
WHERE status = 'OK' is more readable than either of the alternatives.
Comparing two ints versus two strings: Ints is not enough faster to matter.
VARCHAR -- Use when bulkiness is not a problem
ENUM -- Use when bulkiness is a problem, and the number of choices is quite small and stable.
- Dictionary lookup -- Use when multiple tables need to reference the same set of stuff, and/or when there is extra info in the Dictionary.