【问题标题】:How to pass a MySQL database for structured data in JSON Firebase如何在 JSON Firebase 中为结构化数据传递 MySQL 数据库
【发布时间】:2016-01-05 09:06:53
【问题描述】:

对于 Firebase 中的数据结构,我需要一些帮助。我已经阅读了 API 指南和一些类似的博客文章:

  1. Queries, Part 1: Common SQL Queries Converted for Firebase
  2. Firebase: Now with more querying!
  3. Denormalizing Your Data is Normal

我要离开 SQL(特别是 MySQL 和 SQLite)并尝试迁移到 Firebas。我想知道如何在 Firebase 中为结构化 JSON 构建这些表和关系。 关系1-1; 1 - N; N - N; 我正在发送包含一些关系的示例数据库的图片,你能给我这个支持吗?在你的数据库中看起来像这样吗?请记住,我需要查阅与在 SQL 中查询相同的数据。

这是我的数据库:

【问题讨论】:

  • 在 NoSQL 解决方案中,您可以更多地根据您期望读取数据的方式对数据进行建模。如果没有详尽的用法列表,这将是不可能的。即使有这样一个列表,这个问题(虽然很有趣)对于 StackOverflow 来说也太宽泛了。

标签: json database data-structures firebase mbaas


【解决方案1】:

我会试一试...

首先,Firebase 不是关系数据库,因此不应以这些术语来考虑它。但是,您可以在(对于最终用户)感觉“相关”的数据之间建立“关系”

让我们使用类似部门和员工的示例。一个部门可以有很多员工,而这些员工属于该部门。

departments
  dept_00
    dept_name: "Bridge"
  dept_01
    dept_name: "Engineering"
  dept_02
    dept_name: "Medical"

crew
 crew_00
  crew_name: "Kirk"
  in_dept: "dept_00"
 crew_01
  crew_name: "Scotty"
  in_dept: "dept_01"
 crew_02
  crew_name: "Bones"
  in_dept: "dept_02"
 crew_04
  crew_name: "Spock"
  in_dept: "dept_00"

使用这种结构,可以对作为桥梁成员的船员执行查询:这是一个 ObjC 片段

Firebase *ref = [myRootRef childByAppendingPath:@"crew"];
FQuery *q1 = [ref queryOrderedByChild:@"in_dept"];
FQuery *q2 = [q1 queryEqualToValue:@"dept_00"];

[q2 observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
  NSLog(@"%@", snapshot.value);
}];

这将返回crew_00 (Kirk) 和crew_04 (Spock) 节点。

注意数据(Bridge、Engineering)和节点名称(dept_00、dept 01)之间的分离。这允许在不破坏它们之间的“链接”的情况下修改数据。所以我可以将“Engineering”重命名为“Scotty's Hideaway”,一切都会继续进行。这些“随机”节点名称将由 firebase 中的 push() 或 ChildByAutoId (objc) 生成

同样,如果我们知道机组成员的姓名(Bones),我们可以查询该特定节点以返回他属于 dept_02(医疗)。

如果 Spock 和 Bones 属于多个不同的部门,例如 Bridge 和 Engineering,您可以通过添加另一个节点来跟踪机组成员所属的部门,从而超越此范围:

belongs_to
  crew_02
   dept_00: true
   dept_02: true
  crew_04
   dept_00: true
   dept_01: true

这里,crew_02 (Bones) 现在在医疗和桥梁部门(这让 Spocks 很沮丧),而 cramp_04 (Spock) 现在在桥梁和工程部门。使用这个添加的belong_to 节点,in_dept 子节点可以从crew 节点中移除。

应该包括一对一、一对多和多对多

【讨论】:

  • 谢谢,感谢它的解释,我可以理解并更好地理解结构。我想我现在可以为我的项目结构建模了。
猜你喜欢
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2022-01-20
  • 1970-01-01
  • 2016-05-08
  • 2020-08-04
相关资源
最近更新 更多