Перечислимый тип данных по сравнению с таблицей данных в MySQL?

У меня есть одна таблица MySQL, users, со следующими столбцами:

  1. user_id (PK)
  2. электронная почта
  3. имя:
  4. пароль

Для управления ролевой системой, там была бы оборотная сторона к любой из следующих опций?

Опция 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 на форуме.

7
задан Mike Moore 2 June 2010 в 07:05
поделиться

1 ответ

В общем, типы ENUM не предназначены для использования используется в этих ситуациях. Это особенно актуально, если вы намереваетесь обеспечить гибкость добавления или удаления ролей в будущем. Единственный способ изменить значения ENUM - использовать ALTER TABLE , в то время как определение ролей в их собственной таблице просто потребует новой строки в ролях ] стол.

Кроме того, использование таблицы ролей позволяет добавлять дополнительные столбцы для лучшего определения роли, например поле описание , которое вы предложили в Варианте 1. Это невозможно, если вы должны были использовать тип ENUM , как в Варианте 2.

Лично я бы не стал выбирать ENUM в этих сценариях. Возможно, я увижу их использование для столбцов с абсолютно конечным набором значений, например {Пики, Червы, Бубны, Трефы} , чтобы определить масть карты, но не в таких случаях, как та. под вопросом, из-за недостатков, упомянутых ранее.

9
ответ дан 7 December 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: