Проектирование и реализация пользователей и друзей с помощью Firebase (AngularFire)

#javascript #angularjs #firebase #firebase-realtime-database #angularfire

#javascript #angularjs #firebase #firebase-база данных в реальном времени #angularfire

Вопрос:

Я пытаюсь использовать AngularFire для своего ионного приложения Google Firebase. Я особенно сталкиваюсь с проблемами при проектировании моей базы данных и последующей реализации.

Моя цель — иметь пользователей с некоторой базовой информацией, такой как имя и адрес электронной почты.

Каждый пользователь должен иметь возможность добавлять друзей. Эти друзья хранятся в списке. Каков наилучший способ сделать это в базе данных Firebase? Должны ли пользователи иметь узел списка друзей, указывающий на другие идентификаторы пользователей?

Пример:

 User
   User1
       Name
       Email
       Friends
          Friend1
          Friend2
  

Или должно быть отдельное дерево «дружеских отношений» с узлами, которые принимают два идентификатора пользователя и, следовательно, соединяют их? Пример:

 Friendships
    Friendship1
        User1
        User2
    Friendship2
        etc...
  

Кроме того, учитывая первый описанный мной вариант, который я реализовал до сих пор, я извлекаю своих друзей следующим образом:

     var friendsRef = firebase.database().ref('users/'   firebase.auth().currentUser.uid   '/friends');

    $scope.friends = $firebaseArray(friendsRef);
  

Это отлично работает. Проблема заключается в том, как мне получить данные, связанные с каждым другом в их собственном пользовательском местоположении базы данных, например, имя и адрес электронной почты?

Я надеюсь, что кто-нибудь может дать мне несколько советов, которые помогут мне на этом пути, поскольку я уже давно пытаюсь разобраться в этом. Большое спасибо!

Ответ №1:

Я бы выбрал первый вариант. Но с выравниванием данных.

   users
    user1
      name
      email
    user2
    user3
  friendlist
    user1
      user2
      user5
      user11
    user2
    user3
  

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

Используйте update() метод для сохранения данных в нескольких местах одновременно. Если кто-то хочет удалить друга пользователя, вы можете update() удалить обоих пользователей из списка друг друга.

Используйте правила безопасности, чтобы контролировать, кто может видеть чьи данные. Например user1 , данные a будут видны user1 или тем, у кого есть их userid в friendlist/user1/

Комментарии:

1. Спасибо, это отлично работает. Да, я знал, что мне нужен прямой путь для повышения производительности, но не думал об этой возможности. Я ценю это 🙂

2. Я пытаюсь добиться того же, используя Java, просто любопытно, так что здесь friendship содержит массив пользовательских объектов? Может ли это привести к агрессивному росту базы данных и плохой практике? Буду признателен, если вы могли бы прояснить это.