Как подключить таблицу пользователей к таблице ролей (используя таблицу user_roles)? - PullRequest
1 голос
/ 21 июня 2011

Мне нужно создать базовую базу данных для аутентификации пользователя. Пока что у каждого пользователя есть имя, пароль и роль. Я нашел это где-то в Интернете, что выглядит довольно многообещающе:

create table if not exists users (
  id int unsigned not null auto_increment,
  username varchar(100) not null,
  password binary(60) not null,
  primary key(id),
  unique(username)
);

create table if not exists roles (
  id int unsigned not null auto_increment,
  role varchar(100) not null,
  primary key(id),
  unique(role)
);

create table if not exists user_roles (
  user_id int unsigned not null,
  role_id int unsigned not null,
  unique(user_id, role_id),
  index(user_id)
);

Но ... если бы я создавал новых пользователей, как бы я заполнил таблицу user_roles? У меня есть ощущение, что есть какой-то «автоматический способ» сделать это, но я понятия не имею (быть noob базы данных :-)). Как я могу каким-то образом подключить пользователя к роли?

Ответы [ 2 ]

9 голосов
/ 21 июня 2011

Вы бы сначала заполнили таблицу roles. Затем добавьте пользователя в таблицу users. Затем, взяв идентификатор из таблицы users, вы хотите связать его с идентификатором из таблицы roles внутри таблицы user_roles. Вот так:

---- Users Table ---------
ID | UserName | Password
 1 | Test     | *****
--------------------------

---- Roles Table ---------
ID | Role
 1 | Test_Role
 2 | Another_Role
--------------------------

---- User Roles Table ---------
UserID | RoleID
     1 |      1
     1 |      2
-------------------------------

Это сделано для отношений «Многие ко многим». Это также называется «Нормализация» вашей базы данных.

1 голос
/ 21 июня 2011

Для каждого пользователя вы просто вставляете одну строку в таблицу user_roles для каждой роли, которую вы хотите назначить данному пользователю. В этом нет ничего автоматического. Это отношения многие ко многим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...