リレーションシップ
データベース内のテーブル/ビューに関連性がある場合、リレーションシップによって、ネストされたオブジェクトクエリを作成できます。
GraphQLスキーマのリレーションシップは、以下のいずれかになります。
- オブジェクトリレーションシップ(1対1)
- 配列リレーションシップ(1対多)
オブジェクトリレーションシップ
例えば、workspace
と、それを作成した user
に関する詳細情報をクエリしたい場合を考えます。これは、その二つの間に関係が存在する場合、ネストされたクエリを使って達成できます。これは1対1のクエリであり、オブジェクトリレーションシップと呼ばれます。
このようなネストされたクエリの例は、以下のようになります。
query {workspace {idnameowner {idname}}}
1つのクエリで、ワークスペースとそれに関連するユーザー情報を取得できます。任意のレベルにネストできるため、これは非常に有効です。
配列リレーションシップ
配列リレーションシップのクエリの例を見てみましょう。
query {users {idnamemessages {idmessagechannel_id}}}
このクエリでは、ユーザーを取得できます。そして、ユーザーごとに、そのユーザーが送信したメッセージ(複数)を取得します。ユーザーは複数のメッセージを持つことができるため、これは配列リレーションシップです。
リレーションシップは、外部キー制約によってキャプチャできます。外部キー制約により、ぶら下がったデータがなくなります。 Hasuraコンソールは、これらの制約に基づいて自動的にリレーションシップを提案します。
制約はオプションですが、データ一貫性のためにこれらの制約を適用することをお勧めします。
上記のクエリは、リレーションシップを定義していないため、まだ機能しません。しかし、これによってネストされたクエリがどのように動作するかを理解できます。
Build apps and APIs 10x faster
Built-in authorization and caching
8x more performant than hand-rolled APIs

