Вопрос: Какова лучшая структура БД при добавлении подписки / подписчиков? - PullRequest
0 голосов
/ 28 февраля 2019

У меня сейчас есть приложение со следующей структурой БД, оно использует базу данных Firebase и работает на Swift IOS:

  "Posts" : {
"Dm8iyaXXdTOJGsymEiLNVO6OdDK2" : {
  "post:570915537" : {
    "Media" : {
      "image" : {
        "mediaUrl" : "https://firebaseURL",
        "postTimeStamp" : 5.70915539085856E8,
        "timeStamp" : 5.7091551482329E8
      }, ...

Я собирался добавить к нему подписчиков.Я думал, что я либо добавлю целую новую группу:

  "Followers" : {
"Dm8iyaXXdTOJGsymEiLNVO6OdDK2" : {
  "Following" : {
    follower1: "Dm8iyaXXdTOJGsymEiLNVO6OdDK2";
    //other followers
  }, ...

, либо добавлю новый узел в исходную группу и добавлю их туда.Последний вариант - сделать что-то похожее на то, что сделано выше, но в разделе «Пользователи».

Как лучше всего действовать?

1 Ответ

0 голосов
/ 01 марта 2019

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

users/{userID}
  .. userData
  .. followerCount
  .. followedCount


following/{followerID_followedID}
  .. followerId
  .. followedId
  .. createdAt

Когда пользователь A начинает следовать за пользователем B:

  • установить новый документ с идентификатором userAuid_userBuid в после коллекция.
  • запускает облачную функцию, которая запустит транзакцию для обновления счетчиков обоих пользователей.

Сделайте обратное, когда пользователь перестает следовать за другим пользователем.

В клиенте вы можете узнать, следует ли userA за userB, просто проверив, существует ли документ userAuid_userBuid в коллекции , следующей за .Вы также можете получить список подписчиков пользователя, запросив коллекцию, где followId == идентификатор текущего пользователя.

Надеюсь, что вам это поможет.

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