Discussioni su argomenti di Informatica
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?
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.
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} \]
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.