Pagina 1 di 1

Scrivere in algebra relazionale la seguente interrogazione

MessaggioInviato: 03/01/2019, 10:22
da abaco90
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?

Re: Scrivere in algebra relazionale la seguente interrogazione

MessaggioInviato: 04/01/2019, 01:20
da apatriarca
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.

Re: Scrivere in algebra relazionale la seguente interrogazione

MessaggioInviato: 06/01/2019, 16:35
da abaco90
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} \]