Здравствуйте! Правильно ли настроены эти таблицы с точки зрения грамотного хранения данных и оптимизации? Какие ошибки и недочеты могут возникнуть? Что исправить?
TINYINT использую вместо bool, значение всегда будет 1/0
DATETIME естественно для даты и времени. Может лучше использовать UNIX time с целыми числами?
таблица
restore для восстановления пароля
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL DEFAULT 0,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`restore_key` varchar(191) COLLATE utf8_unicode_ci NOT NULL, -- ключ, который отправится на email
`changed` tinyint(1) NOT NULL DEFAULT 0, -- при следующем переходе по той же ссылке, проверяется это значение, менялся ли уже пароль
`created_at` datetime NOT NULL
таблица
users
`user_id` int(11) UNSIGNED NOT NULL,
`username` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`password_salt` varchar(64) COLLATE utf8_unicode_ci NOT NULL, -- динамическая соль
`token` varchar(191) COLLATE utf8_unicode_ci NOT NULL, -- ключ для доступа к API
`hwid` varchar(128) COLLATE utf8_unicode_ci NOT NULL, -- хеш
`activation_key` varchar(191) COLLATE utf8_unicode_ci NOT NULL, -- ключ для подтверждения email'a
`status` tinyint(1) NOT NULL DEFAULT 0, -- подтвержден ли email
`password_changed_date` datetime NOT NULL DEFAULT current_timestamp(),
`join_date` datetime NOT NULL
таблица
user_privileges привилегии для пользователей (админ, модератор и т.п.)
`id` int(11) NOT NULL,
`user_id` int(11) UNSIGNED NOT NULL,
`level` int(11) NOT NULL DEFAULT 1
Индексы
таблицы
restore,
user_privileges
ADD PRIMARY KEY (`id`);
таблица
users
ADD PRIMARY KEY (`user_id`),
ADD KEY `username` (`username`),
ADD KEY `email` (`email`),
ADD KEY `hwid` (`hwid`),
ADD KEY `token` (`token`);
Атрибут AUTO_INCREMENT
таблицы
restore,
user_privileges
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
таблица
users
MODIFY `user_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;