дизайн базы данных: какие поля должны быть для пользовательской таблицы в базе данных? - PullRequest
4 голосов
/ 11 апреля 2011

Я пытаюсь спроектировать пользовательскую таблицу для MySQL.

, сейчас моя пользовательская таблица выглядит следующим образом

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME last_login,
DATETIME data_created
)

, какие еще поля я должен также включить и зачем мне это нужноих?

какие поля я должен исключить сверху и почему?

сколько символов я должен выделить для имени пользователя и пароля и почему?

я должен использовать BIGINT для идентификатора?

Заранее благодарим вас за помощь.

ДОБАВЛЕНО Я собираюсь использовать таблицу для социального веб-сайта, поэтому «пользователи» означают людей по всему миру.

Ответы [ 3 ]

11 голосов
/ 11 апреля 2011

Несколько комментариев:

  1. BIGINT в порядке.Я полагаю, вы используете его как суррогатный ключ.В этом случае объявите его как

    первичный ключ идентификатора BIGINT auto_increment,

    Mysql будет автоматически присваивать уникальное значение int вашему идентификатору при каждой вставке (не указывайте для этого значенияполе).Никогда не пытайтесь реализовать это поведение, выбрав максимальный идентификатор и добавив к нему 1 (я видел это много раз).

  2. Длина имени пользователя и пароля: это не составляет большого трудана самом деле, просто выберите длину.Я склонен стандартизировать 255-длину varchars для этих вещей, но это не основано на чем-то эмпирическом.

  3. Назовите вашу таблицу "пользователь", а не "пользователи".Концептуально таблица реализует сущность так же, как класс реализует сущность.Скорее всего, вы создадите класс или структуру данных с именем «user», и имя таблицы должно соответствовать этому.

  4. Каждая таблица, которую я создаю, имеет две метки времени: «create» и «last_updated»,Вы на полпути:)

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

3 голосов
/ 11 апреля 2011

1 / Имя пользователя и пароль: решите сами, насколько большими они должны быть.

2 / BIGINT в порядке, хотя целое число, вероятно, достаточно. Но сделайте это НЕ ПОДПИСАНО и, вероятно, тоже AUTO_INCREMENT.

3 / Постарайтесь сделать таблицу пользователей как можно меньше:

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME data_created
)

Остальное, вы кладете в дополнительные таблицы:

logins (
BIGINT loginid
BIGINT userid
DATETIME last_login,
VARCHAR(15) IP_ADRESS
...
)

Таким образом, ваша таблица пользователей будет изменяться только , когда новый пользователь добавляется или удаляется, или когда кто-то меняет свой пароль, что реже, чем когда кто-то входит в систему . Это позволяет улучшить кэширование таблиц (MySQL очищает кеш таблиц при записи в таблицу).

0 голосов
/ 11 апреля 2011

Все, что зависит только от ваших собственных спецификаций.Для имени пользователя вы можете взять 100, если хотите, для пароля - длину функции хеширования, которую вы хотите использовать (32 для MD5).

Чаще всего INTEGER (10) используется с AUTO_INCREMENT для первичного ключа таблицы.

Возможно, вы захотите запросить имя, фамилию, дату рождения, место проживания и т. Д.Подумайте, что все данные, которые вы запрашиваете у пользователя, должны быть как-то важны для платформы, которую вы строите.

...