Skip to main content
Version: v2.x

Postgres: Creating Relationships

Introduction

A relationship from one table/view to another can be created by defining a link between a column of the table/view to a column of the other table/view.

Typically, relationships are defined using foreign-key constraints. But in some cases, it might not be possible to use foreign-key constraints to create the relation. For example, while trying to create a relationship involving a view as foreign-keys can't be created on views.

Using foreign keys

Say we created two tables, authors(id, name) and articles(id, title, content, rating, author_id).

Let us now connect these tables to enable nested queries using a foreign-key:

Step 1: Add foreign-key constraint

Let's add a foreign-key constraint to the author_id column in the articles table.

In the console, navigate to the Modify tab of the articles table. Click the Add button in the Foreign Keys section and configure the author_id column as a foreign-key for the id column in the authors table:

Add foreign-key constraint

Step 2: Create an object relationship

Each article has one author. This is an object relationship.

The console infers potential relationships using the foreign-key created above and recommends these in the Relationships tab of the articles table.

Add an object relationship named author for the articles table as shown here:

Create an object relationship

We can now run a nested object query that is based on this object relationship.

Fetch a list of articles and each article's author:

GraphiQL
Query Variables
Request Headers

Step 3: Create an array relationship

An author can write multiple articles. This is an array relationship.

You can add an array relationship in the same fashion as an object relationship as shown above.

On the console, add an array relationship named articles for the authors table as shown here:

Create an array relationship

We can now run a nested object query that is based on this array relationship.

Fetch a list of authors and a nested list of each author's articles:

GraphiQL
Query Variables
Request Headers

Using manual relationships

Let's say you have a table authors (id, name) and a view author_avg_rating (id, avg) which has the average rating of articles for each author.

Let us now create an object relationship called avg_rating from the authors table to the author_avg_rating view using a manual relationship:

Step 1: Open the manual relationship section

  • Open the console and navigate to the Data -> authors -> Relationships tab.
  • Click on the Configure button:
Open the manual relationship section

Step 2: Define the relationship

The above step will open up a section as shown below:

Define the relationship

In this case:

  • Relationship Type will be: Object Relationship
  • Relationship Name can be: avg_rating
  • Reference will be: id -> author_avg_rating . id (similar to defining a foreign-key)

Step 3: Create the relationship

Now click on the Save button to create the relationship.

We can now run a nested object query that is based on this object relationship.

Fetch a list of authors with the average rating of their articles:

GraphiQL
Query Variables
Request Headers

Tracking existing relationships inferred via foreign-keys

As mentioned in the Introduction section above, relationships can be inferred via foreign-keys that exist in your database:

The console infers potential relationships using existing foreign-keys and recommends these on the Data -> Schema page

Track all relationships

You can choose to track the relationships individually using the Track buttons or hit the Track all button to track all the inferred relationships in one go.