2015-09-23 1 views
0

У меня есть веб-страница с функцией входа в систему. Вход в систему основан на адресах электронной почты. Кроме того, я должен держать основную информацию о профиле пользователя, как:Если адрес электронной почты является логином на моей веб-странице - как мне создать простую базу данных позади нее?

  • улице
  • город
  • почтовый индекс
  • мобильный телефон
  • страна
  • имя контакта

И адрес электронной почты пользователя и хэш их пароля (конечно). Более того, когда пользователь меняет какие-либо данные, я хочу отслеживать его и хранить его. Я знаю, что хранить все эти данные в одной таблице - плохая идея, но пока я не могу найти лучшее решение. Можете ли вы мне помочь в этом и предложить способ деления этих данных на разные таблицы?

+0

Если вам действительно нужно сохранить этот материал, я оставил бы его прямо внутри этого стола. Все остальное только усложняет ситуацию. Просто выполните аутентификацию против новейшей записи, соответствующей адресу электронной почты, и вставьте новую строку для каждого изменения. – arkascha

ответ

2

Чтобы сохранить все данные в одной таблице, это плохая идея, если слишком много повторяющихся длинных данных.

Например, если название страны Соединенные Штаты Америки, и есть много пользователей, зарегистрированных с этим названием страны, это лучшая практика для создания другой таблицы для хранения названий стран с некоторым кодом и в основная таблица вставить только код страны

Кроме того, нет никакой гарантии, что их разделение делает вашу схему базы данных оптимальной.

Если вы еще не знаете, как создать базу данных, прочитайте о normalization forms. Это методы, проверенные временем.

В вашем случае что-то вроде следующего можно управлять:

пользователя (идентификатор, Логин, имя, пароль)

user_actions (user_id, ACTION_TYPE, action_time)

user_specifics (user_id, адрес , телефон, country_code)

COUNTRY_NAME (country_code, имя)

+0

Спасибо за подсказку. Что такое action_type здесь? Что я могу там хранить? Кроме того, почему я должен хранить имя в пользователе, а не в user_specifics? Потому что - если я получу это правильно - логин означает электронную почту, верно? – randomuser1

+0

Мне нравится этот пример формы нормировки –

1

Вам нужно несколько таблиц:

users [id email timestamp]  
    user_profiles [id user_id name address city ... timestamp] 
    user_changes [id user_id old_data_serialized timestamp] 

Затем вам нужно искать, как запрашивать таблицы реляционные, вы можете найти сеть Есть много учебников по нему.

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

О сериализации данных, я обычно не после сериализации агрегированного блока данных, но для простоты и того, что вы новичок, этого может быть достаточно, хотя я все еще сомневаюсь.

1

пользователя (идентификатор, адрес электронной почты, пароль, имя Логин, моб.телефон, почтовый индекс)

email уникален здесь. id предназначен для заказа по умолчанию.

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

Оставшиеся зависят от масштабов применения и средней продолжительности каждой информации ниже:

названия улицы: если названия улиц длинные и большинство пользователей являются из меньшего количества улиц. город name: такой же с улицей. страна: то же, что и в городе.