Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Scrivere in algebra relazionale la seguente interrogazione

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?

Re: Scrivere in algebra relazionale la seguente interrogazione

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.

Re: Scrivere in algebra relazionale la seguente interrogazione

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} \]
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.