MySQL - Дизайн базы данных для Twitter, как Timeline - PullRequest
1 голос
/ 11 марта 2020

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

Временная шкала пользователя состоит из следующих элементов:

  1. Отчеты какой пользователь создал

  2. Отчеты, которые создал другой пользователь, и попадают под радиус его «местоположения предупреждения»

  3. Отчеты других пользователей, за которыми он / она следует (Даже если этот отчет не попадает в радиус «местоположения оповещения»)
  4. Отчет, который публикуется / переписывается пользователем, следует (даже если этот отчет не попадает в радиус «местоположения оповещения»)
  5. Сообщает, какой другой пользователь создал и попадает под его / ее радиус «текущего местоположения», когда он путешествует.
  6. Следить за уведомлением - Когда кто-то начал следовать за ним / ее
  7. Уведомление о сообщении - Когда кто-то отправил ему / ей сообщение

Примечание: - Как только отчет появится на временной шкале пользователя, он не исчезнет, ​​даже если пользователь выйдет за пределы радиуса местоположения или изменяет «место оповещения». Он исчезнет только тогда, когда он будет удален или помечен как неподходящий.

Требование: Мне нужна оптимальная схема БД (с запросом SELECT), чтобы я мог показывать вышеупомянутые сообщения на временной шкале пользователя.

Вот моя текущая структура БД:

Table: users
   UserID (PK)
   email
   password

Table: alert_locations 
   alertLocationID (PK) 
   user_id (FK) 
   latitude 
   longitude 
   radius

Table: followers 
   follower_id (FK) 
   following_id (FK)(follower_id + following_id) = PK

Table: reports 
   reportID (PK) 
   reported_by_id (FK) 
   location 
   latitude 
   longitude 
   parent_id (FK- For retweet relations)

Теперь, учитывая вышеприведенные случаи временной шкалы, я имею в виду таблицу timeline со структурой, показанной ниже:

Table Name: timeline
          timelineID  (PK)
          reference_id  (Can be report_id or follower_id or message_sender_id)
          user_id   (FK) 
          title
          type       (1:For Report, 2:Follow, 3:Message)

Итак, при создании отчета для каждого пользователя вставляется новая строка в таблице timeline, которая имеет право просматривать этот отчет. Используя эту таблицу, я могу запросить все типы сообщений для временной шкалы пользователя. Но, как я вижу, этот подход, похоже, имеет проблемы с масштабированием, и он не выглядит мудрым, чтобы вставлять количество n строк в таблицу timeline каждый раз, когда создается новый отчет.

Есть ли что-нибудь еще лучше решение для достижения этого?

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