У меня есть таблица с названием members. Я ищу совет, как его улучшить.
- id: это идентификатор пользователя (уникальный) (автоинкремент) (индексируется)
- статус: может содержать «активирован», «приостановлен», «подтвердить», «удалить»
- admin: просто содержит 0 или 1 (если пользователь является администратором или нет)
- временно отозвано. Примечание: если учетная запись участника приостановлена, я могу добавить заметку, поэтому при попытке войти в систему она увидит заметку.
- failed_login_count: в основном 1 цифра от 0 до 4, считает неудачные входы в систему
- last_visited: метка времени Unix, когда они последний раз посещали сайт; (обновляется при выходе) (я делаю это через php со временем ())
- имя пользователя: может содержать от 3 до 15 символов (уникальных и проиндексированных)
- first_name: может содержать только буквы длиной от 3 до 40 символов
- last_name: может содержать только буквы и длиной от 2 до 50 символов
- электронная почта: может содержать адрес электронной почты (я использую php почтовый фильтр, чтобы проверить правильность)
- пароль: может содержать от 6 до 10 символов в длину, хэшируется и содержит фиксированную длину в 40 символов в базе данных после хэширования
- date_time: метка времени unix (я делаю это через php с time ()). Когда пользователь входит в систему
- ip: члены ip при регистрации / логинах
- ключ активации: я использую md5 и соль для создания уникального ключа активации; длина всегда 32 символа
- пол: либо пустой, либо мужской / женский и ничего больше.
- websiteurl: можете добавить URL сайта;
- msn: может содержать адрес электронной почты msn (используйте регулярное выражение, чтобы соответствовать этому)
- aim: целевое прозвище (используйте регулярное выражение для сопоставления)
- yim: псевдоним yim (используйте регулярное выражение, чтобы соответствовать этому)
- twitter: твиттер (используйте регулярное выражение, чтобы соответствовать этому)
suspended_note; first_name; last_name; date_time; ip; gender; websiteurl; msn; aim; yim; twitter
может быть нулевым, поскольку при регистрации требуются только имя пользователя, адрес электронной почты и пароль, поэтому эти поля будут пустыми до тех пор, пока они не будут заполнены (они в основном необязательны и не обязательны), кроме ip, который используется при регистрации / входе в систему.
Может ли кто-нибудь сказать мне, основываясь на информации, которую я привел, как я могу улучшить и изменить эту таблицу более эффективно? Я бы сказал, что мог бы улучшить его, поскольку я склонен использовать varchar для большинства задач и стремлюсь добиться максимальной производительности.
Я склонен делать довольно много выборок и сохранять пользовательские данные в сеансах, чтобы избежать необходимости каждый раз запрашивать базу данных. Имя пользователя уникально и индексируется как id, так как большинство из моих выбранных сравнений содержат имя пользователя с LIMIT 1 в моих запросах.
UPDATE:
Я хотел бы спросить, изменил ли я, например, enum, как мне сделать запрос на выборку и сравнение, например, в php для enum? Я посмотрел онлайн, но не могу найти примеры запросов с использованием enum. Также, если я изменил date_time, например, на timestamp, я все еще использую time () в php, чтобы вставить метку времени unix в базу данных столбцов date_time?
Причина, по которой я спрашиваю, состоит в том, что я читал один учебник в Интернете, в котором говорится, когда строка запрашивается, выбирается, обновляется и т. Д. MySQL автоматически обновляет временную метку для этой строки; это правда, так как я скорее вставляю метку времени, используя php time () в поле метки времени. Я использую php time () уже для date_time, но в настоящее время использую varchar, а не timestamp.
Плюс серверное время в США, и в php.ini я установил его на британское время, но, полагаю, mysql сохранит его на сервере, что опять-таки не годится, как я хочу на британском.