Допустимо использовать любой скалярный тип данных для столбца. Использование ENUM не обязательно портит реляционное качество таблицы.
Что касается реляционных, то нет никакой разницы между ENUM и использованием другого скалярного типа данных, который ограничен конечным набором значений.
Фактически, в SQL и Реляционная теория , Крис Дата определяет тип данных как:
Именованный конечный набор значений.
Другими словами, все типы данных ограничены конечным набором значений, даже если набор довольно большой. Например, INT UNSIGNED
ограничен набором целых чисел от 0 до 2 32 -1. Довольно большой набор, но все же конечный.
ENUM просто позволяет вам быстро объявить гораздо меньший набор значений, допустимых в вашем столбце.
Однако синтаксис, который вы показываете ENUM(Y|N)
MySQL не поддерживается. Вы должны прочитать https://dev.mysql.com/doc/refman/8.0/en/enum.html для примеров правильного синтаксиса.
Я обычно рекомендую использовать ENUM, когда набор значений не изменится и не будет иметь логической причины для изменения. Пример ENUM('Y','N')
подойдет, если предположить, что для этого столбца больше не будет необходимости, например «возможно» или «частично».
Но я бы не использовал ENUM для houseType или vehicleType, потому что вероятно, со временем он изменится, и добавлять новые значения в ENUM неудобно. Вы должны использовать ALTER TABLE
. Для случаев расширения перечислений я бы использовал таблицу поиска. Затем вы можете добавить новое допустимое значение, просто используя INSERT
, чтобы добавить новую строку в таблицу поиска.