Самый простой способ - использовать обычный столбец без ограничений. Если вас интересуют все текущие значения, используйте DISTINCT, чтобы запросить их:
select distinct YourColumn from YourTable
Таким образом, у вас нет обслуживания, и вы можете хранить в таблице все, что захотите.
Таблица внешнего ключа, которую вы упоминаете, также является хорошим вариантом. Внешний ключ будет ограничивать исходный столбец. Перед фактической вставкой вы запускаете запрос, чтобы развернуть таблицу enum:
insert into EnumTable (name)
select 'NewEnumValue'
where not exists (select * from EnumTable where name = 'NewEnumValue')
Не уверен, что именно вы пытаетесь достичь, кстати; ограничить столбец, но автоматически расширить выбор, когда кто-то нарушает предел?