Вы можете иметь char
или столбцы с другими типами, используемыми в качестве внешних ключей.Проблема в том, что ваши столбцы будут шире.A TINYINT
, достаточный для хранения 256 различных состояний, требует 1 байт.A CHAR(10)
, поэтому вы можете хранить 'Active'
, 'Suspended'
и т. Д., Требуется 10 байтов.Не только строки будут шире, но и индексы тоже.И пространство может не быть проблемой для современных жестких дисков, но размер индекса также влияет на эффективность.
Так что, да, вы можете покончить с числовыми идентификаторами и просто сохранить только значения, если вы терпите производительностьухудшение.
В качестве альтернативы, вы можете использовать CHAR(1)
в качестве первичного ключа таблицы status
(и, конечно, в качестве внешнего ключа в других таблицах), так что вы можете иметь 'A'
, для 'Active'
'S'
для 'Suspended'
и т. Д. Работает, если у вас не более 26 различных статусов.
Тип MySQL ENUM
имеет несколько проблем, описанных в ответе Билла Карвина здесь: Тип Mysql ENUM против таблиц объединения