Должен ли я хранить в друзьях как "строки" или "целые числа" в php и mysql? - PullRequest
1 голос
/ 24 февраля 2009

Я нахожусь в дилемме, не знаю, какая из них лучше. (Я использую php и mysql кстати)

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

Струны => Джон; Брайан; Сэм; Пол; ...;

или

Целые числа => 1; 21; 50; 1779; 30; ...;

Строка означает хранить свое имя пользователя. Целое число означает сохранение их идентификатора пользователя.

Какой из них лучше?

Если строка, то это будет очень, очень большая строка (представьте, что у пользователя 400 друзей, а некоторые имена пользователей очень длинные)

Если id, как вывести список друзей на странице профиля пользователя? Получая список идентификаторов в одну длинную строку (разделенную точкой с запятой), используйте функцию explode, чтобы превратить ее в массив. Затем с помощью циклов для отображения ?? Не хлопотно? Есть ли другой путь? Если да, приведите пример кода.

ИЛИ как обычно, ребята, как сохранить список "друзей" в пользовательской таблице?

Ответы [ 3 ]

8 голосов
/ 24 февраля 2009

Не храните их как разделенные точкой с запятой что-либо . Сохраните их как идентификаторы пользователей в справочной таблице. Предположим, что пользователь # 2. Вы можете иметь:

SourceUserID | FriendUserID
2              1
2              21
2              50
2              1779
2              30
1              // One of John's friends

Затем, чтобы отобразить список друзей, вы запрашиваете эту таблицу, ограничивая ее значением SourceUserID = 2, и присоединяетесь к таблице пользователей, чтобы получить имена. Например:

SELECT Name FROM SITE_USERS
INNER JOIN USER_FRIENDS ON SITE_USERS.ID = USER_FRIENDS.FriendUserID
WHERE SourceUser = ?

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

5 голосов
/ 24 февраля 2009

Обычно вы создаете третью таблицу "users_friends" с двумя столбцами userId и friendId, которые составляют первичный ключ. Быстрый Google придумал это: http://www.tekstenuitleg.net/en/articles/database_design_tutorial/8, но вы, возможно, захотите поискать другие статьи о «отношениях многие ко многим».

0 голосов
/ 24 февраля 2009

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

Чтобы получить друзей пользователей, вам нужно написать объединенный оператор SQL, т.е.

SELECT Friends.FriendName FROM UserFriends 
   INNER JOIN Friends ON Friends.FriendId = UserFriends.FriendId 
   WHERE UserID = @intUserId 

(@ intUserId пользователя, для которого вы хотите составить список друзей)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...