Basi di dati: Esercizi modello relazionale.

Darèios89
Salve ragazzi, se qualcuno di voi è pratico potrebbe darmi una mano?

Ho questa base di dati:



E due esercizi, questo:



Praticamente il mio dubbio è, facendo la equi-join, io faccio il prodotto cartesiano e seleziono le tuple in cui vale quella condizione, e poi faccio la proiezione su Head, però a me così facendo non risulta la tabella con 3 righe, praticamente quella con 301 mi si ripete due volte visto che ci sono due impiegati con lo stesso capo, come mai?

E poi quest' altro:



Ottengo lo stesso risultato diciamo, solo che io non ho ridenominato tutti gli attributi della prima relazione, ho ridenominato solo Number, va bene oppure no? Se è sbagliato il mio metodo perchè c' è bisogno di ridenominare tutti gli attributi?

Grazie.

Risposte
Rggb1
"Darèios89":
... poi faccio la proiezione su Head, però a me così facendo non risulta la tabella con 3 righe, praticamente quella con 301 mi si ripete due volte ...

E' impossibile che si ripeta. Cosa intendi con "mi si ripete due volte", intendi il risultato di una query SQL di prova?

Darèios89
Premesso che devo rivedere il tutto, se prendo quella soluzione io dopo aver selezionato gli impiegati con salario maggiore di quaranta ho il responsabile 301 che è responsabile di due dipendenti, quindi nella equijoin avrò una tabella in cui nell' attributo head dovrei avere due volte l' istanza 301 in una tupla che corrisponde al primo impiegato, e poi di nuovo 301 associato alla tupla dell' altro impiegato. Se faccio poi la proiezione su head non dovrei avere due volte il valore 301? Cioè un' altra riga contenente 301?

Rggb1
"Darèios89":
... Se faccio poi la proiezione su head non dovrei avere due volte il valore 301?

No: il risultato è un insieme, non una "serie di righe". Vedi per esempio
http://en.wikipedia.org/wiki/Projection ... algebra%29
o qualunque altro testo di algebra relazionale.

Questo errore concettuale in merito all'algebra relazionale l'ho visto spesso, è "indotto" se così si può dire da alcune nostre abitudini, ma non è preoccupante poiché se ne viene a capo in due minuti. In soldoni, in un insieme non ci sono elementi duplicati.

Darèios89
Ah, quindi anche se nel mio insieme ho due istanze con lo stesso valore, facendo la proiezioni semplicemente quando trovo due istanze uguali la si prende solo una volta e l' altra viene scartata?

Rggb1
"Darèios89":
semplicemente quando trovo due istanze uguali la si prende solo una volta e l' altra viene scartata?
Anche detta così va bene. :)

Come ho detto prima, in algebra relazionale si opera su insiemi.

Darèios89
Ti ringrazio, mentre ci sono volevo chiederne altre due cose su due esercizi, ma non è che esiste un software che permette di controllare data una query se la mia soluzione è corretta? ](*,)

Allora date le relazioni precedenti:

Employees(Number, Name, Age, Salary)
Supervision(Head, Employee)

Trovare numero e nome dei responsabili i cui impiegati guadagnano TUTTI più di 40000 euro.

[tex]R1: Supervision_{\Join Employee=Number}(Employees)[/tex]

[tex]R2:\rho (Employees)_{Number->NumberH, Name-> NameH, Age-> AgeH, Salary-> SalaryH}[/tex]

[tex]R3:R2 \Join_{NumberH=Head}(R1)[/tex]

[tex]R4: \sigma_{Salary \geq40}(R3)[/tex]

[tex]R5: \pi_{NumberH, NameH}(R4)[/tex]

Ti sembra corretto?

Se invece ho queste relazioni:

Prodotto(costruttore, id_modello, tipo)
PC(id_modello, velocità, ram, hd_size, risoluzione, prezzo)
Laptop(id_modello, velocità, ram, hd_size, risoluzione, prezzo)
Stampante(id_modello, colore, tipo, prezzo)


Q1: Quale modello di PC ha una velocità
almeno pari a 1000

[tex]R1: \pi_{idmodello, velocità}(PC)[/tex]
[tex]R2: \sigma_{velocità \geq 1000(R2)}[/tex]
[tex]R3: \pi_{idmodello}(R2)[/tex]

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.