0

我正在开发一个使用 firebase 作为后端的混合移动应用程序。我习惯了传统的关系型 DBMS,这是我第一次尝试 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

我在firebase中使用facebook身份验证创建了用户,这就是在firebase中创建的

myfirebaseio.com/users/
facebook:some-uid {
    email : "a@a.com",
    name : "abc xyz",
    userid : some-uid,
}

如何以良好的扁平结构在 Firebase 中构建我的数据。我能想到的firebase中用户域的一个例子如下 -

myfirebaseio.com/users/
    facebook:some-uid {
        email : "a@a.com",
        name : "abc xyz",
        userid : some-uid,
        role : {
            id : id,
            name : "rolename"
        }
        services : {
            id: id,
            name : "service name",
            categoryid : "catid"
        }
    }

现在我的问题是我不确定是否也应该创建所有其他表节点。它将增加冗余。

我如何构建用户和服务?一个用户可以提供许多不同类型的服务,一个服务可以由许多用户提供。

我想将 geofire 用于基于位置的服务 - 对于位置,我不想存储每个用户的位置,只有具有特定角色的用户才应该保存他们的位置。我应该在用户节点中添加位置对象吗?2个不同的用户节点可以有不同的属性吗?对于用户 A - 我在用户中设置了位置。但对于用户 B - 我没有将位置保存在用户中,因为角色不同。这是一个好习惯吗?

如果有人可以为这些表建议一个好的数据结构,那就太好了。

4

1 回答 1

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保存了每个用户的其他数据。

于 2015-12-20T23:42:26.323 回答