从 RDBMS 的角度构建 Firebase 中的数据

Posted

技术标签:

【中文标题】从 RDBMS 的角度构建 Firebase 中的数据【英文标题】:Structuring data in firebase from RDBMS perspective 【发布时间】:2016-03-26 21:50:35 【问题描述】:

我正在开发一个使用 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 - 我没有保存在用户中的位置,因为角色不同。 这是一个好习惯吗?

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

【问题讨论】:

NoSQL 数据建模是一个非常广泛的话题,远远超出了我们在 *** 上可以处理的范围。我建议仔细阅读这篇文章:highlyscalable.wordpress.com/2012/03/01/…. 一般来说,您的问题太宽泛,无法在 *** 上回答,所以我将投票关闭它。您还一口气问了很多问题。下面是对一个不太主观的问题的回答。我建议您阅读我链接的文章,为您的应用程序提出一个数据架构,稍微使用它,然后当您对此有具体问题时:发布一个新问题。 【参考方案1】:

对于位置,我不想存储每个用户的位置,只有具有特定角色的用户才应该保存他们的位置。我应该在用户节点中添加位置对象吗?

没有。使用 Geofire 可以将地理位置与有关对象的其他数据分开。

一个例子:

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

在这个 JSON sn-p 中,locations 保存 Geofire 查询的数据,而 users 保存每个用户的其他数据。

【讨论】:

以上是关于从 RDBMS 的角度构建 Firebase 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

角度 4 - 从 firebase 动态读取数组

使用firebase以角度获取当前用户?

从延迟和安全角度来看,Firebase 云消息传递类型之间有啥区别?

角度应用程序中的 Firebase 功能不起作用

有啥方法可以使用角度组件中的 onCall Firebase 函数?

我们如何使用 SQoop 对从 RDBMS 迁移到 HDFS 的数据进行测试?