【发布时间】:2016-05-25 15:31:55
【问题描述】:
我正在为 Android 开发一个简单的应用程序。我在使用 Firebase 数据库时遇到了一些问题,因为它使用 JSON 对象并且我习惯于关系数据库。
我的数据将由共享一个值的两个用户组成。在关系数据库中,这将在如下表中表示:
**uname1** **uname2** shared_value
其中用户名是键。如果我想要用户 Bob 与其他用户共享的所有值,我可以执行一个简单的联合语句,该语句将返回以下行:
uname1 == Bob or unname == Bob
但是,在 JSON 数据库中,数据中似乎存在树状层次结构,这很复杂,因为我无法在顶层搜索用户。如果我最常见的搜索与上述搜索类似,我正在寻求有关如何执行此操作或如何构建数据库以获得最佳效率的帮助。
如果这些信息还不够,我会详细说明:我的数据库的结构如下:
{
'username': 'Bob'
{
'username2': 'Alice'
{
'shared_value' = 2
}
}
'username': 'Cece'
{
'username2': 'Bob'
{
'shared_value' = 4
}
}
从示例中可以看出,Bob 包含在两个关系中,但查看 Bobs 节点不会显示该信息。 (关系是可交换的,所以无法预测谁是“第一”)。
解决此问题的最直观方法是复制所有数据。例如,当我们添加 Bob->Alice->2 时,还要添加 Alice->Bob->2。根据我在关系数据库方面的经验,重复可能是一个大问题,这就是为什么我还没有这样做的原因。此外,复制似乎是一种低效的解决方法。
【问题讨论】:
-
如何为数据建模是一个见仁见智的问题。并且根本不需要在文档中包含嵌套(分层)数据。这只是一种可能性,参考文件也是如此。
-
这不是有效的 JSON。您的子文档上的标签是什么?