2015-10-27 59 views
0

我在关系数据库中拥有强大的背景。但是,我一直在寻找提高我的技能。最近我接触过Firebase。这似乎很有趣。但是,如果这是正确的术语,我会被“模式”所迷惑。Firebase中架构的结构

从我所知道的情况来看,每个Firebase“应用程序”基本上都代表一个“表格”。因此,如果我正在构建一个具有两个相关但独立实体的Web应用程序,那么我将不得不拥有两个Firebase“应用程序”。例如,也许我正在构建一个包含足球队,教练员和球员的Web应用程序。在关系数据库中,我可能有这样的事情:

关系数据库

Team  Coach  TeamCoachLookup Player  TeamPlayerLookup 
----  -----  --------------- ------  ---------------- 
ID   ID   ID    ID   ID 
Name  FirstName TeamID   FirstName TeamID 
Location LastName CoachID   LastName PlayerID 

上面显示了一个可能的关系数据库结构。有些人可能想要Person表格和RoleID来表示该人是玩家还是教练。这是一种方法。尽管如此,当我看着Firebase模型时,我很难理解上面的结构。难道是:

http://teams.firebaseio.com http://coaches.firebaseio.com http://players.firebaseio.com

每个项目的JSON将代表数据库中的一行?或者,如果它只是http://teams.firebaseio.com和架构是这样的:

{ 
    coaches: [ 
    { id:1, firstName:'Joe', lastName:'Smith' } 
    ], 
    players: [ 
    { id:1, firstName:'Bill', lastName:'Mans' }, 
    { id:2, firstName:'Zack', lastName:'Dude' } 
    ] 
} 

第二种方法似乎使我更有意义。但是,我没有看到Firebase如何支持这一点。相反,在我看来,Firebase对每个“表格”都有一个URL,而JSON并不是真正的分层结构。我离开吗?是否有任何人可以推荐给我的文档?

谢谢!

+0

https://www.firebase.com/docs/web/guide/structuring-data.html – Kato

回答

4

相应概念应该是(火力地堡< =>关系):

  • 应用< =>架构
  • 根节点< =>表
  • 子节点< =>行
  • 节点键< =>行ID(通常为push ids

在你的具体例子中:

  • football-app.firebaseio。COM
      • fx7Q7q
        • 名称: “富”
    • 教练
      • ix0GWF
        • 姓: “乔”
        • 名字: “史密斯”
    • 球员
      • uQ8fJK
        • 姓: “条例”
        • 名字: “芒”
    • teamCoachLookup
      • QkW9uH
        • 团队: “fx7Q7q”
        • 教练: “ix0GWF”
    • teamPlayerLookup
      • BmI48N
        • 团队: “fx7Q7q”
        • 球员: “uQ8fJK”

https://www.firebase.com/docs/web/guide/structuring-data.html见。

+0

很好的答案。我想考虑的一件事是将球队/教练和球队/球员查找存储在每个球队/教练/球员之下。它会复制一些数据,但你必须读取更少的位置。如果你把5个表分开,我会去'/ teamCoachLookup/$ teamId/$ coachId'和'/ teamPlayerLookup/$ teamId/$ playerId'。这将阻止必须查询以获得团队的所有球员;相反,你可以使用直接访问:'ref.child('teamPlayerLookup')。child(teamId).on('value'...' –