如何在 JSON Firebase 中为结构化数据传递 MySQL 数据库
How to pass a MySQL database for structured data in JSON Firebase
作为 Firebase 中的数据结构,我需要一些帮助。我已阅读 API 指南和一些博客文章,例如:
- Queries, Part 1: Common SQL Queries Converted for Firebase
- Firebase: Now with more querying!
- Denormalizing Your Data is Normal
我要离开 SQL(具体是 MySQL 和 SQLite)并尝试迁移到 Firebas。我想知道如何在 Firebase 中为结构化 JSON 构建这些表和关系。
关系1-1; 1 - 否; N-N;
我正在发送包含一些关系的示例数据库的图片,你能给我这个支持吗?在你的数据库中看起来像这样?请记住,我需要查询与在 SQL.
中查询的数据大致相同的数据
这是我的数据库:
我会试试这个...
首先,Firebase 不是关系数据库,因此不应该用这些术语来考虑它。但是,您可以在(最终用户)感觉 'relational'
的数据之间制作 'relationships'
让我们使用类似部门和员工的示例。一个部门可以有很多员工,这些员工属于该部门。
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);
}];
这将 return crew_00 (Kirk) 和 crew_04 (Spock) 节点。
注意数据(桥梁、工程)与节点名称(dept_00、部门 01)之间的分离。这允许在不破坏它们之间的 'links' 的情况下修改数据。所以我可以将 'Engineering' 重命名为“Scotty's Hideaway”,一切都将继续有效。这些 'random' 节点名称将由 firebase 中的 push() 或 ChildByAutoId (objc)
生成
同样,如果我们知道船员姓名(骨骼),我们可以查询 return 他属于 dept_02(医疗)的特定节点。
如果 Spock 和 Bones 属于几个不同的部门,例如 Bridge and Engineering,您可以通过添加另一个节点来跟踪船员属于哪些部门:
belongs_to
crew_02
dept_00: true
dept_02: true
crew_04
dept_00: true
dept_01: true
在这里,crew_02 (Bones) 现在在医疗和桥梁部门(这让 Spocks 非常沮丧),crew_04 (Spock) 现在在桥梁和工程部门。添加此 belong_to 节点后,可以从 crew 节点中删除 in_dept 个子节点。
应该涵盖一对一、一对多和多对多
作为 Firebase 中的数据结构,我需要一些帮助。我已阅读 API 指南和一些博客文章,例如:
- Queries, Part 1: Common SQL Queries Converted for Firebase
- Firebase: Now with more querying!
- Denormalizing Your Data is Normal
我要离开 SQL(具体是 MySQL 和 SQLite)并尝试迁移到 Firebas。我想知道如何在 Firebase 中为结构化 JSON 构建这些表和关系。 关系1-1; 1 - 否; N-N; 我正在发送包含一些关系的示例数据库的图片,你能给我这个支持吗?在你的数据库中看起来像这样?请记住,我需要查询与在 SQL.
中查询的数据大致相同的数据这是我的数据库:
我会试试这个...
首先,Firebase 不是关系数据库,因此不应该用这些术语来考虑它。但是,您可以在(最终用户)感觉 'relational'
的数据之间制作 'relationships'让我们使用类似部门和员工的示例。一个部门可以有很多员工,这些员工属于该部门。
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);
}];
这将 return crew_00 (Kirk) 和 crew_04 (Spock) 节点。
注意数据(桥梁、工程)与节点名称(dept_00、部门 01)之间的分离。这允许在不破坏它们之间的 'links' 的情况下修改数据。所以我可以将 'Engineering' 重命名为“Scotty's Hideaway”,一切都将继续有效。这些 'random' 节点名称将由 firebase 中的 push() 或 ChildByAutoId (objc)
生成同样,如果我们知道船员姓名(骨骼),我们可以查询 return 他属于 dept_02(医疗)的特定节点。
如果 Spock 和 Bones 属于几个不同的部门,例如 Bridge and Engineering,您可以通过添加另一个节点来跟踪船员属于哪些部门:
belongs_to
crew_02
dept_00: true
dept_02: true
crew_04
dept_00: true
dept_01: true
在这里,crew_02 (Bones) 现在在医疗和桥梁部门(这让 Spocks 非常沮丧),crew_04 (Spock) 现在在桥梁和工程部门。添加此 belong_to 节点后,可以从 crew 节点中删除 in_dept 个子节点。
应该涵盖一对一、一对多和多对多