#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 содержит массив пользовательских объектов? Может ли это привести к агрессивному росту базы данных и плохой практике? Буду признателен, если вы могли бы прояснить это.