Azure / Azure/data-api-builder

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

Offen
#3,079 0 Kommentare 2 Reaktionen 2 zugewiesene Personen Beansprucht von @JerryNixon Auf GitHub ansehen
2.2 enhancement graphql has-pr mssql pgsql mysql
Vorherrschende Sprache
C#
Sterne
1.5k
Forks
370
Ø Merge
3 T. 22 Std.
Gemergte PRs (30 T.)
9

Beschreibung

## 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" ]
}
}
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.