powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Лента новостей пользователя на сайте.
8 сообщений из 8, страница 1 из 1
Лента новостей пользователя на сайте.
    #37927362
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

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

Варианты:
1. Создать таблицу UserEvent с полями:
- id_user - идентификатор пользователя, для которого выводить событие
- actionType - тип действия
- id_rec - ссылка на запись-источник события
- createDate - дата события
- id_author - автор события
В эту таблицу писать все события для каждого пользователя. Т.е. создал юзер пост, для каждого друга создалась запись в этой таблице. Выборку по таблице осуществлять с фильтром по полю id_user.

Минусы:
- нагрузка при создании (для каждого друга создавать записи в UserEvent. если будет 2000 друзей, то при каждом создании поста создавать 2000 записей в UserEvent?)
- быстрый рост размера БД
Плюс:
- простая выборка, более быстрая
2. Создать таблицу UserEvent с полями:
- actionType - тип действия
- id_rec - ссылка на запись-источник события
- createDate - дата события
- id_author - автор события

В таблице создавать одну запись на одно событие. Выборку осуществлять по двум таблицам UserEvent + таблица с данными о друзьях и данными об избранных постах и вопросах.

Минусы:
- более сложная выборка
Плюс:
- БД относительно не быстро растет
- нет нагрузки при создании записи ( не нужно создавать для каждого юзера запись в таблице UserEvent)

Посоветуйте, как оптимальнее с точки зрения производительности? Может есть какой-нибудь еще вариант?
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37927363
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю СУБД MS SQL 2008
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37927534
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В варианте 2 не совсем понятно, зачем вообще таблица UserEvent - она просто копирует часть полей из оригинальной записи (на которую ссылка ID_rec). И автор, и время создания, и тип там ведь наверняка есть.
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37927549
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинВ варианте 2 не совсем понятно, зачем вообще таблица UserEvent

Это не самое забавное. В этом варианте, когда пользователь отписывается от получения
событий или разрывает дружбу, из его ленты новостей исчезают старые записи, как будто их
никогда и не было.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37927598
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

Она нужна лишь для того, чтобы выводить в хронологическом порядке события (использовать PK с типом int)
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37927600
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Так оно :)
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37928211
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также нужно отслеживать комментирование собственных записей. Думаю, как вот такой запрос будет отрабатывать:

Код: sql
1.
2.
3.
4.
5.
6.
select ue.*
 from UserEvent ue, userlink ul
    where 
(ul.id_user=@idUser and and ue.id_author=ul.id_friend)
or
ue.id_rec=@idUser




Т.е. вроде запрос по двум таблицам, но при этом, также необходимо выбрать записи, которых нет userLink…
...
Рейтинг: 0 / 0
Лента новостей пользователя на сайте.
    #37928217
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее запрос будет такой:
Код: sql
1.
2.
3.
4.
5.
6.
select ue.*
 from UserEvent ue, userlink ul
    where 
(ul.id_user=@idUser and and ue.id_author=ul.id_friend)
or
ue.id_author=@idUser
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Лента новостей пользователя на сайте.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]