Skip to main content

レコード関係

このガイドで学べること

このガイドでは、データベース内の異なるレコード間の関係について見ていきます。これは例えば、あるレコードに格納された別のレコードを指す ポインター のようなものです。また、"多対多"の関係性で、一つのレコードが他の複数のレコードへの ポインター のリストを持つこともあります。

これは、例えばデータベース内にブログ投稿のクラスがあり、その投稿に「いいね」したユーザー(別のクラス)を追跡したい場合など、リレーショナルデータ を扱う際に非常に便利です。

概要

まずはポインター、つまり 一対多 の関係性について見ていきます。次に、リレーション、つまり 多対多の関係性 について見ていきます。

バックエンド、データベース、レコードの操作にある程度の経験があることがこのガイドを最大限に活用するために推奨されます。まだの場合は、以下のガイドを先に進めることをお勧めします。

レコード間の関係

例えば、Post クラスがブログ投稿を含み、Comment クラスがこれらの投稿に対するコメントを含むような異なるクラスを持つアプリを想像してみましょう。これらのクラスのレコードは関連している必要があり、これらの関係をクエリできる必要があります。

ポインター - 一対多の関係性

最も単純な関係はポインターです。このタイプの関係は一般に 一対多 の関係と呼ばれます。例えば、ブログの_Post_ は多くのCommentを持ちますが、各_Comment_ は一つの Post にのみ属します。この種の関係を作成するには、ポインターと呼ばれる特別な種類のプロパティを使用します。

ポインタープロパティは、その_Id_を介して特定のクラスの別のレコードを参照できます。この場合、Comment の所有者である Post を参照したいとします。そこで、Ownerと呼ぶプロパティを_Comment_ クラスに作成し、ポインター タイプを与えて_Post_ レコードを指すように指定します。

?> これは CommentPost を指すという、後方 の関係と呼ばれます。Post に対する全ての_Comment_ を見つけたい場合は、単純にその_Post_ に対して指し戻している全ての_Comment_ を探します。

ポインターを設定するには、Post レコードの id を渡すことができます。例えば、新しい_Comment_ レコード を作成するときにこれを行うことができます。ポインターとして指定されたレコードが正しいタイプであることが重要です。この場合は_Post_です。

後で、Post に対する全ての_Comment_ を取得したい場合は、Query Records ノードを使用して、Owner プロパティが特定のコメントを指している全てのCommentsを求めるだけです。

具体的に探しているidは、入力を通じて提供します。

関係性をデータブラウザで調べることができます。クラウドサービスの_ダッシュボード_を開いて_Comment_ クラスを見つけると、ポインターが現在指しているレコード_Id_を見ることができ、クリックするとその特定のレコードにジャンプできます。

リレーション - 多対多の関係性

新しいクラス Group を導入し、Post が多くの異なるGroupの一部になることができるとしましょう

。この場合、前の例での後方向のポインティングメカニズムを使用することはできません。Post から_Group_ への単一のポインターでは機能しません。なぜなら、Post は多くの_Groups_ の一部である可能性があるからです。代わりにリレーションと呼ばれる概念を使用する必要があります。Group レコードに_Relation_ タイプの新しいプロパティを作成し、ポインターと同様に_タイプ_を指定して名前を付ける必要があります。

?> この場合、前方 の参照になります。つまり、Group がリレーションプロパティを持っています。

リレーションを扱うのは最初は少し難しいかもしれません。これを見る一つの方法は、この例では、Group がそれに属する全ての_Posts_ をそのリストにあるポインターをたどることで簡単に見つけることができるということです。逆の質問、つまり_Post_ が自分が属している_Groups_ を知りたい場合(複数の可能性がある!)は、そのリストに自分を指しているポインターを持っている全ての_Groups_ をクエリすることで見つけることができます。

レコードに_Relation_ プロパティがある場合、Add Record RelationRemove Record Relation ノードを使用して管理する必要があります。これらのノードでは、リレーションプロパティを持つレコードid(この場合はGroup)と、関係に追加または削除したいレコードidを提供する必要があります。

Pointers と同様に、クラウドサービスの_ダッシュボード_に行ってモデルの関係を表で見ることができます。View relation をクリックすると、この特定のモデルの関係の表が表示されます。

最後に、関係をクエリする必要があります。2つのケースがあります:

  1. Group に関連する全ての_Post_ を見つけたい場合。その場合、Post のクラスのQuery Recordsを作成します(クエリから_Posts_を返したい)。次に、以下の画像に従ってフィルターを設定できます

プロパティを持っているクラス(この場合は_Group_)のリレーションプロパティの名前も指定する必要があることに注意してください。

  1. 逆のクエリを行いたい場合、つまり_Post_ に関連する全ての_Groups_ を求めたい場合は、Group のクラスでQuery Records ノードを作成します(クエリから_Groups_を返したい)。Post レコードを持っていて(Post レコードの_Id_を持っていて)、それに属している全ての_Groups_を見つけたい場合、Group クラスに設定されたQuery Recordsで以下のjavascriptクエリを使用します。
where({
posts: { pointsTo: Inputs.PostId },
})

上記のように、Group コレクションの関係フィールド、この場合は_posts_を正しく使用することも確認する必要があります。