React Native中Parse SDK的一对一关系的实现和查询
在许多后端的核心,您会发现存储数据的能力。使用Parse,您可以存储数据对象并建立它们之间的关系。数据关系标准化了每个数据对象与其他对象的关系或关联。这在构建和运行复杂查询时可以为您提供额外的能力。主要有三种关系类型:
- 一对多, 一个对象可以与多个其他对象相关联;
- 一对一, 在两个对象之间建立直接关系,仅限于这两个对象;
- 多对多, 可以在多个对象之间创建许多复杂的关系。
在本指南中,我们将重点关注一对一关系。这些关系在涉及敏感数据和用户管理的应用程序中很常见,这些应用程序需要强制执行唯一字段,例如身份证号码和电话号码。数据存储后端通常会要求明确声明这些关联,而Parse没有自动实现这些关联的解决方案。
然而,可以通过在服务器上使用 Parse.Cloud 函数来实现Parse中的一对一关系,确保在保存数据之前表关系保持唯一。这是通过在两个相关类中创建 beforeSave 函数来完成的,如果父类在子类中已经拥有一个实例,则阻止保存,反之亦然。
您还可以在应用程序的Parse代码中处理这些情况,在保存之前查询服务器并确保该关系。这将是本指南中展示的方法,但请注意,使用云函数要干净得多,并且更为推荐。
在本指南中,您将实现一个包含三种主要数据关联的React Native图书注册应用程序。您将学习如何使用Back4App和React Native创建和查询一对一数据关系。
您可以随时通过我们的GitHub仓库访问此项目,以查看样式和完整代码。
在一个现实场景中,使用 Parse 在 React Native 中执行和演示一对一数据库关系。
由于在本指南中我们将使用一本书的注册应用示例,您需要首先了解该数据库中对象关系的布局。您将使用的主要对象类是 书籍 类,它将存储注册中的每本书条目。这是其他四个对象类:
- 出版商: 书籍出版商名称,与书籍
- 类型: 书籍类型,与书籍. 请注意,在本示例中我们将考虑一本书只能有一个类型;
- 作者: 书籍作者,与书籍, 因为一本书可以有多个作者,而一个作者也可以有多本书;
- ISDB: 书籍的ISDB识别号码,与书籍, 因为这个号码对于每本书都是唯一的。
以下是这些数据库表的可视化表示:

为了简单起见,我们将假设每个对象类只有一个字符串类型的 名称 属性 (标题 用于 书籍),除了任何额外的关系属性。
在进入这一步之前,我们建议您克隆并运行 React Native 库应用示例 (JavaScript 示例库, TypeScript 示例库)。该应用程序有两个主要屏幕:一个负责列出注册的书籍,另一个负责创建新书。在书籍注册表单中,有直接链接到其他相关对象,以及一个 文本输入 字段分配给书籍的 ISBD 值,该值将用于创建您的一对一关系。

让我们看看在提交此表单时调用的书籍创建方法:
看看 bookISBDValue 是如何设置为新的书籍 Parse.Object 实例的。在 Parse 中创建和保存一对一和一对多关系是类似的过程,在这个过程中,你将 Parse.Object 实例作为参数传递,使用 Parse.Object.set 方法,该方法接受两个参数:字段名称和要设置的值。
这里的关键是,在保存之前,您需要确保您的数据库中没有包含所提供的 ISBD ID 字符串值的对象,并且没有与之相关的 书籍 对象。第二部分在这种情况下总是成立,因为您每次都在创建一个新的 书籍 对象。通过使用以下高亮的查询,可以强制 ISBD 的唯一性:
成功保存对象后,Parse 将创建一个指针数据类型列,并在您的仪表板上创建一个直接链接,以便快速访问。

查询一对一相关对象非常简单,因为大部分由 Parse 处理。看看书籍注册列表屏幕中的查询功能:
在这种情况下,要查询与特定 ISBD 相关的任何书籍,您只需执行一个 Parse.Query.equalTo 方法,传递 Parse.Object 实例作为参数。查询后,Parse 将在结果对象中存储任何一对一关系字段的完整实例。要从这些对象实例中检索和显示数据,您可以像这样链接 Parse.Object.get 方法: bookParseObject.get(('isbd').get('name'). 下面是使用这些获取器从列表项中检索 ISBD 名称的列表屏幕的样子:

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