2012-01-09 5 views
1

У меня есть таблица пользователя, которая имеет поля имени пользователя, пользователя, пароля и электронной почты.PHP базы данных MySQL

Пользователь может публиковать обновления, подписаться на них и общаться с друзьями.

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

Должен ли я добавить еще 3 поля в таблицу пользователей и просто увеличить количество этих трех столбцов?

Спасибо.

+2

НЕ хранить друзей в столбце в таблице пользователя .... научитесь нормализовать свои проекты баз данных и добавить таблицу user_friends ... тогда вы не нажмете столько ограничений –

+0

Я понял, что это была только опечатка, а OP означало еще 3 поля в пользовательской таблице. – bpgergo

+0

Независимо от того, имел ли OP подлинные друзья или поля, ответ остается тем же: не добавляйте их в таблицу users ... normalize –

ответ

0

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

0

Предполагаю, что вы решили ввести «столбцы» вместо «друзей» в этом последнем предложении.

Это один из способов сделать это.

При проектировании вы должны думать об объектах, отношениях и мощностях. Вы хотите отслеживать временную метку для каждого обновления? Если да, я бы сделал это отдельной таблицей с отношением «один ко многим» к пользователю. То же самое для подписчиков и друзей. Ответ зависит от того, как вы выбираете модель проблемы. Нет правильного или неправильного ответа, но есть компромиссы.

0

Ну, это быстрее читать, если вы разделили отношения и контент, однако, если у вас есть только контент и генерирует от него отношения, результат иногда может быть более точным. Таким образом, это зависит.

1

Вы можете создать 3 таблицы: friends (user1_id, user2_id), обновления (user_id, content), подписаться (user1_id, user2_id).
Если база данных большая, и вы не хотите каждый раз подсчитывать друзей, вы можете добавить поле в таблицу пользователей и обновлять его каждый раз, когда друг добавляется/удаляется.
Возможно, диаграмма поможет:
http://en.wikipedia.org/wiki/Entity-relationship_model

1

Во-первых, я бы попытаться вычислить

значение счетчика обновлений, подписчики и друзья пользователя

на лету, что-то л икэ

select count(*) from user_updates where user_id = :uid 
select count(*) from user_subcribers where user_id = :uid 
select count(*) from user_friends where user_id = :uid 

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

1

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

Таблица 'Пользователи':

*user_id* 
username 
password 
email 

Таблица 'Друзья':

id 
*user_id* 
friendids 

Вы можете получить пользователей с чем-то вроде

SELECT * FROM friends WHERE user_id = '$userid' 
Смежные вопросы