Ios 最佳数据结构做法

Ios 最佳数据结构做法,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我试图在扁平化的数据结构和减少非规范化过程中对服务器的调用之间找到适当的平衡。我的iOS应用程序有两种型号“团队”和“玩家” 下面我将得到我当前用户的团队,然后为每个玩家再打2个电话 let currentUserRef = rootRef.child("players/" + currentUser.uid) // get current user's team ID currentUserRef.child("/team").observeSingleEventOfType(.Value,

我试图在扁平化的数据结构和减少非规范化过程中对服务器的调用之间找到适当的平衡。我的iOS应用程序有两种型号“团队”和“玩家”

下面我将得到我当前用户的团队,然后为每个玩家再打2个电话

let currentUserRef = rootRef.child("players/" + currentUser.uid)
// get current user's team ID
currentUserRef.child("/team").observeSingleEventOfType(.Value, withBlock: { snapshot in
    let teamID = snapshot.value as! String
    let teamRef = rootRef.child("teams/" + teamID)

    // get current user's team data
    teamRef.observeEventType(.Value, withBlock: { snapshot in

        // get player 1 data
        let player1ID = snapshot.value!["player1"] as! String
        rootRef.child("players/" + player1ID).observeSingleEventOfType(some callback)

                 // get player 2 data
        let player2ID = snapshot.value!["player2"] as! String
        rootRef.child("players/" + player2ID).observeSingleEventOfType(some callback)

    })
 })
来自SQL后台,经常对服务器进行这些嵌套调用是不正常的。这是典型的吗?将玩家信息移动到团队中会更好吗?假设我还可以将每个玩家的团队成员信息嵌套在玩家本身中

"players": {
    "p1ID": {
      "firstName": "Joe",
      "lastName": "Smith",
      "team": "teamID",
    }
  }

"teams": {
    "t1ID": {
       "player1": {
          "ID": "player1ID",
          "firstName": "Joe",
          "lastName": "Smith"
       }
       "player2": {
         ...
       }
    }
}

多次调用Firebase数据库服务器不是问题。看见不过,您需要跟踪您的听众,这样您就不会在每个播放机上都有多个听众(并将听众与不再播放的播放机断开)。Downvoter:请在您进行downvote时留下评论。就我所知,这个问题表明了我的努力和明确。我不是反对者,但我能理解他们的想法。问题是问什么是最好的,但没有指定要使用的标准。因此,答案必然是意见,而不是客观结果。意见将吸引更多的人来感谢FrankvanPuffelen的帮助和Feldur的反馈@费尔德,如果投票结果接近,不是更好吗?我想可能更多的是讨论meta。多次调用Firebase数据库服务器不是问题。看见不过,您需要跟踪您的听众,这样您就不会在每个播放机上都有多个听众(并将听众与不再播放的播放机断开)。Downvoter:请在您进行downvote时留下评论。就我所知,这个问题表明了我的努力和明确。我不是反对者,但我能理解他们的想法。问题是问什么是最好的,但没有指定要使用的标准。因此,答案必然是意见,而不是客观结果。意见将吸引更多的人来感谢FrankvanPuffelen的帮助和Feldur的反馈@费尔德,如果投票结果接近,不是更好吗?我想这可能更像是对梅塔的讨论。
"players": {
    "p1ID": {
      "firstName": "Joe",
      "lastName": "Smith",
      "team": "teamID",
    }
  }

"teams": {
    "t1ID": {
       "player1": {
          "ID": "player1ID",
          "firstName": "Joe",
          "lastName": "Smith"
       }
       "player2": {
         ...
       }
    }
}