У меня есть одна таблица MySQL, users
, со следующими столбцами:
Для управления ролевой системой, там была бы оборотная сторона к любой из следующих опций?
Опция 1:
Составьте вторую названную таблицу roles
с тремя столбцами: role_id
(Первичный ключ), name
, и description
, затем партнер users.user_id
с roles.role_id
как внешние ключи в третьей названной таблице users_roles
?
Или...
Опция 2:
Составьте вторую названную таблицу roles
с двумя столбцами: user_id
(Внешний ключ от users.user_id
) и role
(ПЕРЕЧИСЛЕНИЕ)? ПЕРЕЧИСЛИМЫЙ Столбец типа данных позволил бы, чтобы короткий список допустимых ролей был вставлен как значения.
Я никогда не использовал ПЕРЕЧИСЛИМЫЙ тип данных в MySQL прежде, таким образом, мне просто любопытно, поскольку опция 2 означала бы тот меньше таблицы. Я надеюсь, что это имеет смысл, это - первый раз, когда я попытался описать таблицы MySQL на форуме.
В общем, типы ENUM
не предназначены для использования используется в этих ситуациях. Это особенно актуально, если вы намереваетесь обеспечить гибкость добавления или удаления ролей в будущем. Единственный способ изменить значения ENUM
- использовать ALTER TABLE
, в то время как определение ролей в их собственной таблице просто потребует новой строки в ролях
] стол.
Кроме того, использование таблицы ролей
позволяет добавлять дополнительные столбцы для лучшего определения роли, например поле описание
, которое вы предложили в Варианте 1. Это невозможно, если вы должны были использовать тип ENUM
, как в Варианте 2.
Лично я бы не стал выбирать ENUM
в этих сценариях. Возможно, я увижу их использование для столбцов с абсолютно конечным набором значений, например {Пики, Червы, Бубны, Трефы}
, чтобы определить масть карты, но не в таких случаях, как та. под вопросом, из-за недостатков, упомянутых ранее.