Я разрабатываю гибридное мобильное приложение, используя firebase для бэкэнда. Я привык к традиционной реляционной СУБД и впервые пробую использовать метод NoSql. Мне сложно структурировать свои данные. Я не уверен, что делаю это правильно. Вот мой домен (определяя его традиционным образом).
User table -
has username
has name
has email
has authentication type - authenticated by facebook or google
has location {}
has role {}
has many services
location table - (separating this table because i would like to use geofire and it probably needs a separate node in firebase.)
has lat
has long
has userid
role table -
has role id
has role name
services table
has service id
has service name
has category id
category table
has category id
has category name
Я создал пользователя с помощью аутентификации facebook в firebase, и это то, что было создано в firebase
myfirebaseio.com/users/
facebook:some-uid {
email : "[email protected]",
name : "abc xyz",
userid : some-uid,
}
Как я могу структурировать свои данные в firebase в хорошей уплощенной структуре. Один из примеров пользовательского домена в firebase, о котором я мог подумать, выглядит следующим образом:
myfirebaseio.com/users/
facebook:some-uid {
email : "[email protected]",
name : "abc xyz",
userid : some-uid,
role : {
id : id,
name : "rolename"
}
services : {
id: id,
name : "service name",
categoryid : "catid"
}
}
Теперь моя проблема в том, что я не уверен, нужно ли мне создавать и все остальные узлы таблиц. Это добавит избыточности.
Как структурировать пользователей и сервисы? Пользователь может предоставлять множество различных типов услуг, и услуга может предоставляться многими пользователями.
Я хочу использовать geofire для служб на основе местоположения - для местоположения я не хочу сохранять местоположение каждого пользователя, только пользователи с определенной ролью должны сохранять свое местоположение. Должен ли я добавить объект местоположения в узел пользователей? Могут ли 2 разных узла пользователей иметь разные атрибуты? для пользователя A - у меня задано местоположение в user. но для пользователя B - у меня нет сохраненного местоположения в пользователе, потому что роль другая. Это хорошая практика?
Было бы здорово, если бы кто-нибудь мог предложить хорошую структуру данных для этих таблиц.