Реализовать функцию «подписывайся, публикуй» в asp.net mvc - PullRequest
4 голосов
/ 19 июля 2011

В любой социальной сети вы можете подписаться на человека, пост или что угодно, все, что вы отслеживали, будет отображаться на вашей стене, теперь я хочу реализовать ту же функцию в asp.net mvc, но у меня есть проблема с таблицей дизайна, чтобы запросить все следующие вещи пользователя. Это таблицы, которые я разработал:

 [User(id,name,email,password)]
 [Following(id,personId,followingId,source)]
 [Post(id,title,description,authorId)]

Таким образом, когда пользователь последовал за другим пользователем, будет добавлена ​​новая запись. Следующая таблица с следующим идентификатором - userId, а источником - таблица «Пользователь», так же, как и после записи с последующим идентификатором - postId, а источником - «Сообщение». Таблица. Проблема заключается в том, что при получении данных из того, что вы используете, запрос объединяет множество таблиц, чтобы вернуть результат, если пользователь следовал большему количеству вещей, чем сообщение, и другой пользователь (например, тег, тема ...). это будет не хорошая производительность и время запроса для возврата данных пользователю. У вас есть идеи по этому поводу? Я очень рад услышать ваше решение, большое спасибо!

1 Ответ

1 голос
/ 19 июля 2011

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

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

[User(id,name,email,password)]
[Post(id,title,description,authorId)]
[UserFollowingUser(id, userId, followedUserId]
[UserFollowPost(id,userId,postId)]

Поэтому получить всех пользователей, следующих за публикацией, или всех сообщений, за которыми следует пользователь, или получить всех пользователей, следующих за определенным пользователем, или получить всех пользователей, за которыми следует определенный пользователь, очень просто.

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