在React Native中使用Parse创建与查询一对多关系
在许多后端的核心,您会发现存储数据的能力。使用Parse,您可以存储数据对象并建立它们之间的关系。数据关系标准化了每个数据对象与其他对象的关系或关联。这在构建和运行复杂查询时可以为您提供额外的能力。主要有三种关系类型:
- 一对多, 一个对象可以与多个其他对象相关;
- 一对一, 在两个对象之间建立直接关系,仅限于这两个对象;
- 多对多, 可以在多个对象之间创建许多复杂的关系。
在本指南中,我们将重点关注最常见的关系,即一对多。数据存储后端通常会要求明确声明这些关联,甚至要求您自己创建关系表以管理它们的连接。Parse为您自动完成这一切,消除了在构建数据关系时出错的可能性,并加快了您的应用建模过程。
在Parse中创建一对多关系有两种方法。第一种是使用Parse.Object指针,这在创建和查询时间上是最快的。第二种是使用数组,这可能会导致查询时间变慢,具体取决于它们的大小。由于这个性能问题,从现在开始我们将只使用指针的示例。
在本指南中,您将实现一个包含三种主要数据关联的React Native图书注册应用程序。您将学习如何使用Back4App和React Native创建和查询一对多数据关系。
您可以随时通过我们的GitHub仓库访问此项目,以查看样式和完整代码。
使用 Parse 一对多关系来建模一个书店 React Native 应用
由于我们将在本指南中使用书籍注册应用程序示例,您首先需要了解该数据库中对象关系的布局。您将使用的主要对象类是 书籍 类,存储注册中的每本书条目。此外,还有其他四个对象类:
- 出版商: 书籍出版商名称,与书籍
- 类型: 书籍类型,与书籍. 请注意,在本示例中,我们将考虑一本书只能有一个类型;
- 作者: 书籍作者,与书籍, 因为一本书可以有多个作者,而一个作者也可以有多本书;
- ISDB: 书籍的ISDB识别号码,与书籍, 因为这个号码对于每本书都是唯一的。
以下是这些数据库表的可视化表示:

为了简单起见,我们将假设每个对象类只有一个字符串类型的 名称 属性 (标题 对于 书籍),除了任何额外的关系属性。
在进入这一步之前,我们建议您克隆并运行 React Native 库应用示例 (JavaScript 示例库, TypeScript 示例库)。该应用程序有两个主要屏幕:一个负责列出注册的书籍,另一个负责创建新书。在书籍注册表单中,有直接链接到其他相关对象,因此当用户选择出版商或类型选项时,表单字段将包含完整的 Parse.Object 实例。

让我们来看看提交此表单时调用的书籍创建方法:
看看 bookPublisherObject 和 bookGenreObject 是如何设置为新的书籍 Parse.Object 实例的。看看在 Parse 中创建一对多关系是多么简单:你可以通过使用 Parse.Object.set 方法来分配目标对象实例或指向它的指针,该方法接受两个参数:字段名称和要设置的值。Parse 将在你的仪表板上创建一个指针数据类型列,并在后台提供一个直接链接以便快速访问。

在您的仪表板上点击对象指针值将带您到引用的对象条目。这看起来可能是一个无害的功能,但这使得调试和错误追踪比手动搜索快得多。
查询一对多相关对象非常简单,因为大部分工作都是由 Parse 处理的。看看书籍注册列表屏幕中的查询功能:
在这种情况下,要查询与特定出版商或类型相关的任何书籍,您只需执行一个 Parse.Query.equalTo 方法,传递 Parse.Object 实例作为参数。查询后,Parse 将在结果对象中存储任何一对多关系字段的完整实例。要从这些对象实例中检索和显示数据,您可以像这样链接 Parse.Object.get 方法: bookParseObject.get(('publisher').get('name'). 下面是使用这些获取器从列表项中检索出版商和类型名称的列表屏幕的样子:

在本指南的最后,您学习了如何在 React Native 中创建和查询 Parse 的一对多关系。在下一个指南中,我们将向您展示如何进行多对多和一对一的查询和关系。