Newsgroup: it.comp.software.database
Titolo: Algebra relazionale, aiuto!

Sto facendo alcuni esercizi per l'esame di Basi di Dati che riguardano la 
risoluzione di interrogazioni in algebra relazionale: gli operatori 
relazionali mi sono ben chiari ma quando devo creare una proposizione logica 
fatta di questi operatori (derivante da una domanda scritta in italiano 
dell'esercizio) non so mai da dove partire: avete qualche dritta da propormi 
che aiuti a risolvere questi esercizi??
Cioe' data una domanda (in italiano) quali sono gli elementi da tenere in 
considerazione per individuare le giuste scelte degli operatori?
Altra domanda importante: si possono risolvere in piu' modi una stessa 
interrogazione fatta a parole? Cioe' ci sono proposizioni espresse in 
algebra relazionale che sono equivalenti fra di loro (magari piu' o meno 
lunghe) ??
Grazie in anticipo!!
Ciao!





 considerazione per individuare le giuste scelte degli operatori?
   Non mi sembra ci sia questa gran scelta: una selezione e` una 
selezione, una proiezione una proiezione, e cosi` via...
   Non so se esista una procedura migliore di altre per produrre 
espressioni di algebra relazionale a partire da una descrizione 
testuale: di solito, io prendo in considerazione prima gli eventuali 
join, poi ridenominazione, proiezione e selezione. Ma non e` l'unica 
possibilita`, tant'e` che, a volte, inverto una o piu` delle operazioni. 
Immagino sia solo una questione di sensibilita` e di pratica: dopo un 
po' di tempo ti renderai conto che perdi piu` tempo a cercare di 
ottimizzare l'interrogazione piuttosto che a tradurre la specifica.
-- 
Alla prossima,
Marco

, 
mna...@rumbanet.NOSPAM.it
 says...
Ok, grazie mille. Per caso tu eri anche su fidonet??
Ciao!

 dell'esercizio) non so mai da dove partire: avete qualche dritta da propormi
La regola e': spj = selezione, proiezione e poi join.
In questo modo, a ogni passo ti porti dietro il minor numero di dati,
cosa che quando tramuti l'interrogazione in sql non e' male, e anche
il minor numeri di attributi per il join (li "tagli" con la proiezione)
-- 
Ghost

 il minor numeri di attributi per il join (li "tagli" con la proiezione)
Non credo che sia sempre valida, sopprattutto se fai esercizi di 
preparazione ad un esame universitario, le cose son diverse e non cosi' 
"lineari" come le intendi tu :)
Comunque terro' presente questa regolina, sicuramente qualche volta 
funzionera'.
Ciao e grazie

 "lineari" come le intendi tu :)
Eh eh, veramente ti ho detto quello che mi ha insegnato il mio
professore all'universita' - se non ricordo male, visto che e' un
po' che ho fatto l'esame.
Io ho detto "ecco la regola", ma e' semplicemente fare le cose nel
modo piu' semplice, per come la vedo io.
Inoltre a partire ad es. da espressioni in cui ci sia prima un join
e poi una selezione si puo' arrivare a una espressione in cui gli
operatori siano invertiti, basta anche fare un esempio pratico.
Nell'algebra relazionale bisogna poi anche tener conto della qualita'
delle interrogazioni, e se tu mi fai prima un join io ti boccio :-)
(se poi devi farne una selezione), perche' se ho due tabelle da 10milioni
di record e mi fai un equijoin che mi da' 1milione di record da cui ne
seleziono poi 20, ovviamente sto sprecando risorse per nulla.
La difficolta' a cui forse ti riferisci tu e' nel costruire interrogazioni
complesse, perche' quello che ti ho detto io ti risolve i dubbi solo per
i "pezzi base" di cui sara' poi fatta la tua interrogazione, ma li'
ci vuole un po' occhio ed esperienza. Comunque si puo' partire da
una espressione non "ottimizzata" (che ne so', prima i join di 4
relazioni, poi tutti le selezioni) e ottimizzarla portando dentro le
selezioni, ma insomma il principio base e' che devi scartare prima tutto
quello che non ti servira' per le operazioni piu' esterne.
-- 
Ghost

 delle interrogazioni, e se tu mi fai prima un join io ti boccio :-)
   Mi domando quanto senso abbia questa affermazione. Un'espressione 
algebrica, in quanto ente matematico astratto, non ha quella qualita` 
intrinseca che, invece, si riconosce alle interrogazioni SQL. Sarebbe 
come dire che l'espressione aritmetica "3 x 3 + 4" e` migliore di "4 + 3 
x 3" solo perche` il mio processore ottimizza meglio se le addizioni si 
presentano prima delle moltiplicazioni (il che puo` essere anche dato 
per vero).
   Inoltre, per rimanere all'esempio da te citato, eseguire un join 
prima o dopo una selezione in un'espressione algebrica non ha molto 
senso, visto che nella corrispondente interrogazione SQL possono 
apparire nella stessa istruzione e demandare, quindi, all'ottimizzatore 
del DBMS il compito di decidere quale debba essere effettuata prima.
   Just my two cents: se ho detto qualcosa di errato, non farti scrupolo 
di correggermi.
-- 
Alla prossima,
Marco

 intrinseca che, invece, si riconosce alle interrogazioni SQL. Sarebbe
[..]
Ok, diciamo che ho sbagliato, certamente una espressione algebrica
come qualita' puo' avere al piu' il risultato.
Diciamo che potremmo pero' vedere una qualita' dal punto di vista
umano, cioe' una espressione scritta in modo complicato puo' essere
riscritta in modo piu' semplice, anche se entrambe sono appunto
equivalenti. Questa idea di qualita' mi e' arrivata anche da corsi
di matematica, visto che mi risulta che si richieda spesso di dare
risultati finali "puliti", cioe' semplificati e a volte riorganizzati,
per una sorta di eleganza.
Riguardo in particolare l'algebra relazionale, l'idea di qualita'
e in un certo senso di efficienza, mi e' venuta dal fatto da aver
saputo che i DBMS, data una espressione SQL, la trasformano in algebra
relazionale, la semplificano secondo le regole della suddetta, cercando
di minimizzare la cardinalita' dei risultati intermedi, per ovvi motivi
di efficienza.
E in questo senso, la qualita' (=efficienza delle operazioni relative)
di cui parlavo esiste.
-- 
Ghost

 di cui parlavo esiste.
   Indubbiamente. Ma data la complessita` dei sistemi odierni, una 
pratica ormai consolidata e` proprio quella di lasciare le 
ottimizzazioni ai compilatori, i quali, si presume, sono in grado di 
svolgere il compito meglio di qualsiasi programmatore. Tra l'altro, 
un'interrogazione SQL gia` ha insito quel concetto di qualita` del quale 
tu parli, sicche` pure l'espressione algebrica risultante sara` 
sufficientemente "elegante". In effetti, credo che sia questo il motivo 
per il quale non esistono interfacce "algebriche" alle basi di dati (per 
lo meno, io non ne conosco).
-- 
Alla prossima,
Marco