Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le relazioni di entità consentono alle query GraphQL di attraversare le entità correlate, abilitando forme di dati complesse con una singola query. Per esempio:
{
books {
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
A tale scopo, daB deve essere indicato come le entità sono correlate tramite la relationships sezione nel file di configurazione.
Configurazione
Per definire una relazione tra entità:
- Usare l'oggetto
relationshipsall'interno della configurazione dell'entità. - Specificare il
target.entitynome. - Impostare
cardinalitysu"one"o"many". - Facoltativamente, specificare
source.fieldsetarget.fields. - Usare
linking.objectdurante la modellazione di relazioni molti-a-molti senza esporre la tabella di associazione.
Esempio di CLI
dab update Book \
--relationship authors \
--target.entity Author \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "book_id" \
--linking.target.fields "author_id"
Esempio di configurazione
"Book": {
"source": "dbo.books",
"relationships": {
"authors": {
"cardinality": "many",
"target.entity": "Author",
"source.fields": [ "id" ],
"target.fields": [ "id" ],
"linking.object": "dbo.books_authors",
"linking.source.fields": [ "book_id" ],
"linking.target.fields": [ "author_id" ]
}
}
}
Uno-a-molti
- Usare la cardinalità
"many". - Esempio: un
Seriesha moltiBooks. - DAB può dedurre campi se esiste una chiave esterna.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
Molti-a-Uno
- Usare la cardinalità
"one". - Esempio: un
Bookoggetto appartiene a unSeriesoggetto .
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
Molti-a-Molti (oggetto di collegamento)
- Utilizzare una tabella di unione che non è esposta in GraphQL.
- Definire il collegamento dei campi dall'origine alla destinazione tramite la tabella join.
dab update Author \
--relationship books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "author_id" \
--linking.target.fields "book_id"
Molti-a-Molti (entità di collegamento esplicito)
- Esporre la tabella di unione come oggetto GraphQL.
- Definire le relazioni in tutte e tre le entità.
dab add BookAuthor \
--source dbo.books_authors \
--permissions "anonymous:*"
dab update BookAuthor \
--relationship book \
--target.entity Book \
--cardinality one \
--relationship.fields "book_id:id"
dab update BookAuthor \
--relationship author \
--target.entity Author \
--cardinality one \
--relationship.fields "author_id:id"
Relazioni reciproche
Per consentire lo spostamento in entrambe le direzioni (ad esempio, da Book a Author e da Author a Book), definire una seconda relazione sull'entità di destinazione che inverte i campi di origine e di destinazione.
Esempio
dab update Author \
--relationship books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "author_id" \
--linking.target.fields "book_id"
Questa relazione tra Book e Author abilita l'attraversamento simmetrico in GraphQL:
{
authors {
items {
first_name
books {
items {
title
}
}
}
}
}
Supporto di GraphQL
- I campi correlati vengono visualizzati come oggetti annidati.
- La cardinalità determina se viene restituito un elenco o un singolo oggetto.
- I nomi dei tipi GraphQL e i campi corrispondono ai nomi di configurazione.
Limitazioni
- Le relazioni richiedono che le entità esistano nello stesso file di configurazione.
- È supportata solo la navigazione a un hop.
- I cicli e il profondo annidamento non sono ottimizzati.
- REST non supporta le relazioni (solo GraphQL).