2014-11-03 3 views
3

У меня есть таблица users в моей базе данных и три вида пользовательских ролей - менеджер (администратор), эксперт и ученик.Лучший способ хранения столбца «один ко многим» в базе данных

Я попытался сохранить их роль в качестве столбца role в таблице users, но мой вопрос - это то, что является лучшим способом его сохранить?

Например, следует использовать числа - 1 для администратора, 2 для экспертов и 3 для учащихся. Или только один персонаж - «А» для администратора, «E» для эксперта и «S» для ученика? Или полный «админ» для администратора и т. Д., Или что?

Редактировать

Ребята, я хочу, наиболее эффективный способ. Некоторые из вас сказали мне, что у меня есть другая таблица, но этих отношений мало для многих, это одно для многих, потому что у пользователей может быть только одна роль.

+1

Это еще зависит от ваших требований сценариев использования и спецификации, но если бы это было мне, я хотел бы сделать что-то с нормализацией, чтобы сделать его более динамичным – mituw16

ответ

5

Вы могли бы хотеть иметь отдельную распределительную таблицу, например user_roles, которые будут иметь столбцы: id, user_id и role_id. Таким образом, каждый пользователь может иметь несколько ролей в будущем, даже если прямо сейчас они имеют только 1.

И что role_id будет указывать на роль в новой таблице roles, которая может содержать все данные, связанные с ролями.

Или, если вам действительно не нужен соединительный стол, просто поставьте role_id прямо в таблицу users.

Посмотрите базу данных «нормализация». В принципе, если у вас есть определенный набор данных, которые будут повторяться в столбце, вы можете поместить его в свою собственную таблицу.

+0

любому пользователю только одну роль – Arman

+1

Это может быть правдой, но сегодня если вы не можете гарантировать, что он останется верным навсегда, следуйте советам в этом ответе. –

+0

@ А это не мой ответ, я хочу, чтобы хранить столбец ролей, и как сохранить роль в новой таблице? – Arman

1

Вы можете создать отдельную таблицу с двумя столбцами: role_nbr, роль со значениями: 1, Admin; 2, эксперт; 3, Student

Затем включите role_nbr в таблицу users и используйте номера, привязывая их к таблице ролей, чтобы найти имя роли. Таким образом, если вы когда-либо увеличите свои роли, его легко добавить в отдельную таблицу. Хорошее исследование будет касаться нормализации - это поможет вам устранить сохранение дублирующейся информации, в которой у вас есть много информации для хранения (например, имя роли - с момента хранения номера или буквы - как бы вы помнили, для чего она предназначена?)

0

Используйте тип enum. Ниже приведен пример

CREATE TABLE users (
    -- the other columns 
    role ENUM('admin, 'expert', 'student') 
); 

перечисление является строка объекта со значением, выбранным из списка разрешенных значений, перечисленные в явном виде в спецификации столбца во время создания таблицы.

Это означает, что enum типа уже определены значения (и может содержать только один значение для каждой строки - вы не можете иметь пользователя, который admin и в то же время student). В вашем случае это admin, expert и student.

DOCS

Смежные вопросы