Организация прав доступа на сайте
Не понимаю, в чем косяк создания foreign key?
Валится ошибка:
Невозможно создать таблицу
account_roles(ошибка: 150 "Foreign key constraint is incorrectly formed")
, хотя типы столбцов идентичны.
По ситуации: Организовываю права на самописной CMS, для этого завожу 3 таблицы:
account (id, login, password, email)
roles (role_name, read, edit)
account_roles(id_user, role), которая должна хранить в себе уникальную по id_user запись для присваивания 1-пользователю одной из ролей (admin, default, banned)
Мой SQL запрос выглядит следующим образом :
CREATE TABLE `account` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`login` varchar(100) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Дамп данных таблицы `account`
--
INSERT INTO `account` (`id`, `login`, `password`, `email`) VALUE
(1, 'testuser', '$2y$10$fkxT3kqlsEBcaqAZ.2VSx.rSwy872qzk2ApUyhuhIOYpDZBw/ecv2', 'testuser@testuser')
-- --------------------------------------------------------
--
-- Структура таблицы `account_roles`
--
--
-- Структура таблицы `roles`
--
CREATE TABLE `roles` (
`role_name` varchar(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY(`role_name`),
`read` tinyint(1) NOT NULL,
`edit` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Дамп данных таблицы `roles`
--
INSERT INTO `roles` (`role_name`, `read`, `edit`) VALUES
('admin', 1, 1),
('banned', 0, 0),
('default', 1, 0);
CREATE TABLE `account_roles` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
Primary key(`id`),
`id_user` int(10) UNSIGNED NOT NULL,
FOREIGN KEY (`id_user`) REFERENCES account(id) ON UPDATE CASCADE ON DELETE CASCADE,
`role` varchar(255) NOT NULL,
FOREIGN KEY ( `role` ) REFERENCES roles(role_name) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Дамп данных таблицы `account_roles`
--
INSERT INTO `account_roles` (`id_user`, `role`) VALUES
(1, 'default');