Scrivere in algebra relazionale la seguente interrogazione

Messaggioda abaco90 » 03/01/2019, 10:22

Ciao a tutti,

sto studiando il capitolo sull'algebra relazionale ed il modello relazionale per l'esame di basi di dati.

Ho un esercizio che mi chiede:
"Scrivere in algebra relazionale la seguente interrogazione: “trovare i nomi dei clienti che hanno ordinato esattamente gli stessi tipi di pizza di Mario Rossi.
Si assuma che Mario Rossi abbia ordinato almeno una pizza."


Lo schema è:

Pizze(codPizza, nome, tempoPrep, prezzo)
– Ingredienti(codIngrediente, nome, quantitàMagazzino, costoBase)
– Ricette(codPizza*, codIngrediente*, quantità)
codPizza FK(Pizze)
codIngrediente FK(Ingredienti)
– Ordini(codOrdine, nomeCliente, indirizzoCliente, oraConsegna, codPizza*)
codPizza FK(Pizze)

Le chiavi primarie sono sottolineate, le chiavi esterne sono date esplicitamente.

Un'idea potrebbe essere quella di spezzettare il problema, trovando innanzitutto la pizza ordinata da Mario Rossi in questo modo:

P_MR = $π$ nome ($σ$ nomeCliente = 'Mario Rossi' (Pizze codPizza = codPizza Ordini))

L'ultimo uguale comprende anche l'operatore di giunzione $⋈$.

Questo però andrebbe unito ad un altra espressione e qui sono un pò in difficoltà...

Chi mi può aiutare?
abaco90
Junior Member
Junior Member
 
Messaggio: 196 di 200
Iscritto il: 01/11/2016, 17:38

Re: Scrivere in algebra relazionale la seguente interrogazione

Messaggioda apatriarca » 04/01/2019, 01:20

Ciao, prima di tutto ti consiglio di fare uso delle formule latex invece di inserire le formule come testo in quando non sono particolarmente leggibili così..

Se ho capito bene la tua espressione è la seguente:
\[ P_{MR} = \Pi_{\,\text{nome}} \; \sigma_{\,\text{nomeCliente}\,=\,\text{"Mario Rossi"}} \; \underset{\text{codPizza}\,=\,\text{codPizza}}{\text{Pizze} ⋈ \text{Ordini}} \]

Non mi è chiaro come mai tu stia cercando di ottenere i nomi delle pizze invece dei codici che sono più semplici da usare per il passaggio successivo. Hai infatti bisogno di selezionare tutte le righe di Ordini in cui il codice sia contenuto tra quelli selezionati dalla tua espressione. Per ottenere questo risulato puoi ad esempio usare una join tra la tabella e il risultato della tua espressione. Qualcosa come:
\[ \Pi_{\,\text{nomeCliente}} \; \Bigl( \text{Ordini} ⋈ \bigl( \Pi_{\,\text{codPizza}} \; \sigma_{\,\text{nomeCliente}\,=\,\text{"Mario Rossi"}} \; \text{Pizze} ⋈ \text{Ordini} \bigr) \Bigr) \]

Non faccio esercizi del genere da un po' ma spero di esserti stato di aiuto.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5176 di 5196
Iscritto il: 08/12/2008, 20:37
Località: Londra

Re: Scrivere in algebra relazionale la seguente interrogazione

Messaggioda abaco90 » 06/01/2019, 16:35

Ciao, grazie della risposta!

Guardando più a fondo negli appunti credo che la soluzione più corretta si ottenga utilizzando l'operatore di divisione, scrivendo quindi:
\[ \Pi_{\,\text{nomeCliente} , \text{codPizza}} (Ordini)\; / P_{MR} \]
abaco90
Junior Member
Junior Member
 
Messaggio: 199 di 200
Iscritto il: 01/11/2016, 17:38


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti