Разработка базы данных - Действия друзей - PullRequest
0 голосов
/ 31 октября 2010

В настоящее время я разрабатываю небольшую систему Twitter / Facebook, где пользователь должен видеть последние действия своих друзей.

Я использую ASP.NET с базой данных MySQL.

Моя таблица дружбы выглядит следующим образом:

| Friendshipid | friend1 | Friend2 | подтвердили |

Friend1 и Friend2 в приведенной выше таблице являются идентификаторами пользователей.

Дизайн таблицы действий пользователя следующий:

| ActivityID | Идентификатор_пользователь | деятельность | Датируется |

Теперь я ищу лучший способ запросить последние 50 действий друзей для пользователя.

Например, скажем, если Том войдет в систему, он сможет увидеть последние 50 действий среди всех своих друзей.

Любые указатели на лучшие практики, запрос или любую информацию приветствуется.

Ответы [ 2 ]

2 голосов
/ 31 октября 2010

Это в значительной степени зависит от того, какие данные хранятся в таблице дружбы. Например, в каком порядке хранятся поля Friend1 и Friend2? Если для полей (friend1, friend2) существует кортеж (1, 2), будет ли существовать также (2, 1)?

Если это не так, то это должно работать:

SELECT activities.* 
FROM Activities 
    INNER JOIN Friendships ON userid = friend1 OR userid = friend2 
WHERE activity.userid != [my own id]
    AND confirmed = TRUE
LIMIT 50;
1 голос
/ 01 ноября 2010

Если у вас есть проблемы с производительностью базы данных, вы можете переопределить таблицу дружбы следующим образом:

friendshipid, userid, friendid, confirmed

Когда вы запрашиваете последние 50 действий , SQL будет:

SELECT act.*
FROM Activities AS act
    INNER JOIN
    Friendships AS fs
    ON fs.friendid = act.userid
        AND fs.user_id = 'logon_user_id'
        AND confirmed = TRUE
ORDER BY act.dated DESC
LIMIT 50;

И если в столбце «Friendships (userid)» есть индекс, это даст базе данных возможность оптимизировать запрос.

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

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