Azure / Azure/data-api-builder

[Enh]: Support relationships between views (and tables).

Open
#3,079 0 comments 2 reactions 2 assignees Claimed by @JerryNixon View on GitHub
2.2 enhancement graphql has-pr mssql pgsql mysql
Dominant language
C#
Stars
1.5k
Forks
370
Avg merge
3d 17h
Merged PRs (30d)
8

Description

## What

Allow entities backed by **views** to participate in relationships.

### Supported combinations

* view → view
* view → table
* table → view

No new configuration syntax. Existing `entities..relationships` settings continue to work.

### Unlimited combinations

```mermaid
flowchart LR
Table1
Table2
View1
View2

Table1 --> Table2
Table1 --> View1
View1 --> View2
View1 --> Table2
```

> [!NOTE]
> Stored procedures cannot be related.

## Why

Today relationships only work between table entities.

However, DAB already allows relationships to be defined in configuration without requiring database FK constraints. If a relationship can be described using fields in configuration, the engine should be able to generate the join even when the underlying object is a view.

This enables common read models where views shape the data exposed through the API. A view such as `SeriesActors` can already be exposed as an entity, but it cannot currently participate in relationships.

## Example

View → table relationship

> Exactly the same syntax as before

```json
"entities": {
"BooksView": {
"source": { "object": "dbo.vw_books_details", "type": "view" },
"relationships": {
"publisher": {
"cardinality": "one",
"target.entity": "Publisher",
"relationship.fields": [ "publisher_id:id" ]
}
}
}
}
```

### View → view relationship

> Exactly the same syntax as table

```json
"relationships": {
"authors": {
"cardinality": "many",
"target.entity": "AuthorsView",
"relationship.fields": [ "id:book_id" ]
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.