我目前正在使用用户配置文件构建我的iOS 10应用程序,该应用程序应具有某些成就和经验值(与StackOverflow类似的系统)。我已经建立了我的Facebook登录,FIRAuth等。目前我正在考虑Firebase数据库的数据结构。我已阅读Firebase Guide for flat data structures和一些常规Firebase数据指南,例如来自Ray Wenderlich的指南。
这是用户可以已经做的事情:
这是我的待办事项列表:
基于徽章/标题的基本成就,类似于StackExchange / StackOverflow,例如用户已完成动作XY 20次=>行动XY的20次徽章;我在考虑:
a)在每个用户的个人资料中都有一个数组/列表,其中包含所有收集的徽章(作为字符串)或
b)在用户个人资料中为每个成就设置一个布尔变量
第二个成就跟踪器,它跟踪应用程序的一般用法 - 类似于RPG游戏中的练级系统,具有经验值,因此只是DB中每个配置文件的Int值
我的问题:
您如何将FIRAuth配置文件与数据库结合起来以保存上述徽章(可能达到50-60个成就)以及用户的单独级别/ xp点?
请记住,我是JSON DB建模的新手。我不想要在代码等方面为所讨论的功能提供解决方案 - 只需为用户配置文件的数据结构提供帮助。
我还将研究未来用户配置文件的扩展(消息传递等),我应该能够向所有具有某些级别/成就的用户发送通知(这使我倾向于b)) - 因此过多的嵌套是不可能的。
答案 0 :(得分:2)
使用下面的结构,您可以通过观察用户成就路径的子项来检索特定用户的成就。然而,这只是成就的关键。
如果您的用户使用了1j6Ft1BT30TFG403obvGfjOHE4th
,则user-achievements/1j6Ft1BT30TFG403obvGfjOHE4th
中的每个孩子都可以使用子键在achievements/-KQpsPExLsKdnVHMliiP
处观察每项成就的价值。
{
"users": {
"1j6Ft1BT30TFG403obvGfjOHE4th": {
"username": "john"
}
},
"user-achievements": {
"1j6Ft1BT30TFG403obvGfjOHE4th": {
"-KQpsPExLsKdnVHMliiP": true
}
},
"achievements": {
"-KQpsPExLsKdnVHMliiP": {
//
}
}
}