relazione

Utilizzo

esplora: view_name {
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 o many_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
  }
}