2012-03-15 3 views
1

Я работаю над пользовательской социальной сетью. Я создаю сайт на PHP, и я хочу использовать базу данных MySQL для хранения пользовательских данных. Я могу создавать базы данных/таблицы без проблем (я использую phpMyAdmin) Я не уверен, сколько таблиц необходимо и что было бы более практичным для моего веб-приложения. Было бы разумно иметь много таблиц? Например, таблица USERS. С именами столбцов USER_ID, EMAIL, PASSWORD, LAST_LOGIN, а затем таблицей с именем USER_SETTINGS, которая будет содержать настройки учетной записи для каждого пользователя, а другая таблица с именем POSTS с именами и значениями, приписываемыми «обновлению статуса». Или разумно иметь все в одном столе? Какова наилучшая практика?Структурирование таблицы базы данных MySQL

+0

Взгляните на эти ссылки - http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/ и http://goo.gl/m6KSX –

+0

Сохраните структуру чистым и раздельным. Это означает, что у вас, вероятно, будет много таблиц. – Alp

ответ

3

Определенно НЕ держите «все в одном столе». Скорее всего, вы получите «много таблиц», но это звучит плохо - в основном, вы должны сегментировать свои данные на основе логического использования.

Например, если вы сохраняете сообщения в таблице пользователей - как это будет работать? Что произойдет, когда они сделают новый пост - добавили бы вы еще одно поле? (плохо) - или добавьте еще один элемент в поле и разделите его персонажем (плохим) ... и т. д. Единственный реальный способ сделать это - иметь другую таблицу. Вы должны определенно НЕ хранить сообщения в той же таблице, что и пользователи.

Что касается «данных профиля» (или того, что вы хотите назвать), мне нравится держать его отдельным - некоторым людям нравится держать его в таблице пользователей - там предпочтение отдается предпочтению.

В вашем случае, я хотел бы предложить что-то вроде этого:

//users table 
id, 
email, 
password, 
last_login, 
//... 

//profiles table 
id, 
user_id, 
profile, 
age, 
gender, 
//... 

//posts table 
id, 
user_id, 
data, 
created (datetime), 
modified (datetime) 
3

Я в настоящее время здания сайта социальной сети, а также. НЕ ДЕЛАЙТЕ все в одном столе. На самом деле я бы зашел так далеко, чтобы сказать, что вы несете все в одной таблице, не сталкиваясь с массовыми проблемами.

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

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

Смежные вопросы