Utilizzo
join: view_name_2 {
relazione: one_to_one
}
}
Gerarchia
relationship |
Valore predefinito
many_to_one Accetta
Una relazione (many_to_one , many_to_many , one_to_many , one_to_one )
|
Definizione
relationship
ti consente di descrivere la relazione di join
tra le visualizzazioni unite. Per poter calcolare con precisione le misure, è importante definire correttamente il tipo di relazione.
Per comprendere la relazione che viene definita, considera questo esempio:
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
join: user_facts {
sql_on: ${user.id} = ${user_facts.user_id} ;;
relationship: one_to_one
}
}
Quando una vista viene collegata direttamente a un'esplorazione, come la vista user
in questo esempio, la relazione proviene da l'esplorazione alla vista unita. Diciamo che potrebbero esserci molti ordini per un utente.
Quando una vista viene collegata a un'esplorazione tramite un'altra vista, ad esempio il modo in cui user_facts
unisce le metriche user
alla order
, in questo esempio la relazione viene definita dalla visualizzazione intermedia (user
) alla vista finale (user_facts
). In questo esempio stiamo dicendo che esiste un utente per un record utente.
I valori possibili per relationship
sono descritti in queste sezioni di questa pagina:
one_to_one
Se una riga in Esplora può corrispondere a una sola riga nella visualizzazione unita, la relazione è one_to_one
.
Ad esempio, un'esplorazione user
con una visualizzazione dna
combinata sarebbe one_to_one
.
Una relazione
one_to_one
richiede che non ci siano valori null nelle chiavi primarie delle tabelle. Se sono presenti valori nulli in una o entrambe le chiavi primarie delle tabelle, la relazione èmany_to_many
omany_to_one
.
molti_a_uno (valore predefinito)
Se molte righe in Esplora possono corrispondere a una riga nella vista unita, la relazione è many_to_one
. Ad esempio, un'esplorazione order
con una visualizzazione user
combinata sarebbe many_to_one
.
one_to_many
Se una riga in Esplora può corrispondere a molte righe nella visualizzazione unita, la relazione è one_to_many
. Ad esempio, un'esplorazione order
con una visualizzazione item
combinata sarebbe one_to_many
.
molti_a_molti
Se molte righe in Esplora possono corrispondere a molte righe nella visualizzazione unita, la relazione è many_to_many
. Ad esempio, un'esplorazione student
con una visualizzazione unita class
potrebbe essere many_to_many
se lo schema è stato progettato come nell'esempio successivo. Nella pratica, le relazioni many-to-many
sono spesso evitate nella progettazione di database SQL, perciò la maggior parte dei modelli non necessita del many_to_many
.
Esempi
Dichiara la relazione da user
a dna
come one_to_one
:
explore: user {
join: dna {
sql_on: ${user.dna_id} = ${dna.id} ;;
relationship: one_to_one
}
}
Dichiara la relazione da order
a user
come many_to_one
:
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
}
Dichiara la relazione da order
a item
come one_to_many
:
explore: order {
join: item {
sql_on: ${order.order_id} = ${item.order_id} ;;
relationship: one_to_many
}
}
Dichiara la relazione da student
a class
come many_to_many
:
explore: student {
join: class {
sql_on: ${student.student_id} = ${class.student_id} ;;
relationship: many_to_many
}
}
Dichiara la relazione da user
a user_type
come many_to_one
:
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
join: user_type {
sql_on: ${user.type_id} = ${user_type.id} ;;
relationship: many_to_one
}
}