Azure / Azure/data-api-builder

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

Abierto
#3,079 0 comentarios 2 reacciones 2 asignados Reclamado por @JerryNixon Ver en GitHub
2.2 enhancement graphql has-pr mssql pgsql mysql
Lenguaje dominante
C#
Estrellas
1.5k
Forks
370
Merge medio
3 d 22 h
PR fusionados (30 d)
9

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.