One-to-many dictionary (lookup) table vs varchar vs enum?
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 ENUM list.

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.

An 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.