Структурирование данных в firebase с точки зрения СУБД

Я разрабатываю гибридное мобильное приложение, используя 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 - у меня нет сохраненного местоположения в пользователе, потому что роль другая. Это хорошая практика?

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


person Nikhil    schedule 20.12.2015    source источник
comment
Моделирование данных NoSQL - это невероятно обширная тема, выходящая далеко за рамки того, с чем мы можем справиться здесь, в StackOverflow. Я рекомендую внимательно прочитать эту статью: highscalable.wordpress.com/ 2012/03/01 /.   -  person Frank van Puffelen    schedule 21.12.2015
comment
В общем, ваш вопрос слишком широк, чтобы ответить на StackOverflow, поэтому я собираюсь проголосовать за его закрытие. Вы также задаете много вопросов за один присест. Ниже дан ответ на один из менее субъективных вопросов. Я предлагаю вам прочитать статью, которую я связал, придумать архитектуру данных для вашего приложения, немного поработать с ней, а затем, когда у вас возникнет конкретный вопрос по этому поводу: опубликуйте новый вопрос.   -  person Frank van Puffelen    schedule 21.12.2015


Ответы (1)


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

Нет. В Geofire геолокация отделена от других данных об объекте.

Пример:

/locations
    user1
        g: "pns0h0mf2u"
        l: [-53.435719, 140.808716]
    user2
        g: "u417k3dwub"
        l: [56.83069, 1.94822]
/users
    user1: ...
    user2: ...
    user3: ...

В этом фрагменте JSON locations хранятся данные, которые запрашивает Geofire, а users - другие данные для каждого пользователя.

person Frank van Puffelen    schedule 20.12.2015