@DarkUser1337

Правильно ли выглядит структура таблиц в MySQL?

Здравствуйте! Правильно ли настроены эти таблицы с точки зрения грамотного хранения данных и оптимизации? Какие ошибки и недочеты могут возникнуть? Что исправить?

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;
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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