【问题标题】:Trouble creating firebase data structure创建 Firebase 数据结构时遇到问题
【发布时间】:2016-06-26 03:27:30
【问题描述】:

对于我的 Firebase 数据结构,我希望它能够处理这样的事情:

用户可以创建一种记录想法的方式。他们可以随心所欲地称呼它。 Mary Chen 传递参数journalMr Owner 想要命名它(传递参数)log。 Firebase 将它们保存为他们自己的树命名它用户要求命名它的任何参数。

然后出现另一棵树:whenLoggedIn + \(parameter)。这棵树将yyyy-mm-dd 日期保存到相应的帖子中。

例子:

{
    "uids": {
        "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": {
            "friends": {
                "IbTuUfmIeO0KOBr5Q4gAqD": true
            },
            "name": "Mary Chen",
            "journal": {
                "entry 1- trader joes": "went to store! :)",
                "entry 2- ate sushi": "took out the garbage today then got free sushi from trader joes!!!"
            },
            "whenLoggedInJournal": {
                "1": "1997-12-25",
                "2": "2016-2-23"
            }
        },
        "L8kBHaGBr5Q4gAqDOhFY29Okepm1": {
            "friends": {
                "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": true
            },
            "name": "Mr Owner",
            "journal": {
                "log 1": "spotted some drunkard in my store",
                "log 2": "drainage pipe clogged with tomatos, I suspect the drunkard",
                "log 3": "did inventory check, 1 less sushi box, suspect the drunkard"
            },
            "whenLoggedInLog": {
                "1": "1997-12-25",
                "2": "2016-2-27",
                "3": "2016-4-2"
            }
        }
    }
}

我通读了 Firebase 指南上的“结构化数据”,但我没有掌握如何一次添加树。我也想实现一个扁平化的数据集;这对我正在做的事情有必要吗?

【问题讨论】:

    标签: ios swift firebase firebase-authentication nosql


    【解决方案1】:

    推荐的 Firebase 数据结构是将每个实体拉到自己的顶级节点。因此,在您的情况下,这将导致:

    {
        "userNames": {
            "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": "Mary Chen",
            "L8kBHaGBr5Q4gAqDOhFY29Okepm1": "Mr Owner"
        },
        "userFriends": {
            "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": {
                "IbTuUfmIeO0KOBr5Q4gAqD": true
            },
            "L8kBHaGBr5Q4gAqDOhFY29Okepm1": {
                "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": true
            }
        },
        "userJournals": {
            "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": {
                "entry 1- trader joes": "went to store! :)",
                "entry 2- ate sushi": "took out the garbage today then got free sushi from trader joes!!!"
            },
            "L8kBHaGBr5Q4gAqDOhFY29Okepm1": {
                "log 1": "spotted some drunkard in my store",
                "log 2": "drainage pipe clogged with tomatos, I suspect the drunkard",
                "log 3": "did inventory check, 1 less sushi box, suspect the drunkard"
            }
        },
        "whenLoggedInJournals": {
            "D0Ez8edYhIbTuUfmIeO0KOq5xVB3": {
                "1": "1997-12-25",
                "2": "2016-2-23"
            },
            "L8kBHaGBr5Q4gAqDOhFY29Okepm1": {
                "1": "1997-12-25",
                "2": "2016-2-27",
                "3": "2016-4-2"
            }
        }
    }
    

    这个结构:

    • 使加载部分用户数据变得更加容易,例如只是名字
    • 更容易保护数据,例如公开用户名,他们的朋友列表可以被他们自己和他们的朋友看到​​,日志和登录数据只有他们自己可以看到

    【讨论】:

    • So would this structure work? 添加另一个日志日期会是.childByAppendingPath("whenLoggedInJournals") 吗?您如何指定将其附加到哪个 uid 上?检索数据时如何指定从哪个用户获取数据?
    • @user5812721 一切都与用户 uid 绑定。该用户登录后,您将通过 Firebase authData.uid 变量了解他们的 uid。从那里您可以通过该 uid 轻松查询或写入数据。所以是的,要向loggedIn添加第三个日期,您将写入.childByAppendingPath(“whenLoggedInJournals/uid/3”)。setValue(todayDate)将添加“3”:“2016-6-25”。附带说明 - 一般来说,在 Firebase 中,结构越扁平越好,但应该有理由将数据扁平化。不要这样做“只是因为”。即日志条目可以加时间戳,并将条目包含在单个节点中。
    猜你喜欢
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多