| |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
esami perlasca 06/07 Clicca QUI per vedere il messaggio nel forum |
dvr |
ho trovato solo esami relativi all' edizione 05/06 (quelli fatti insieme a mazzoleni) :sad: di quella corrente non c'è nulla?
chi li ha già fatti in passato ricorda qualcosa? |
LiJay |
questo è l'esame di settembre..l'esercizio sul diagramma ER non ce l'ho sotto mano magari lo stendo piu' tardi quando avrò finito di esercitarmi ^_^
Esercizio 2
Sia dato il seguente schema relazionale:
MUSEI(nome, città, nazione, giornoChiusura)
ARTISTI(nome, nazionalità, dataNascita, DataMorte)
OPERE(codice, titolo, stato artista,museo)
PERSONAGGI(Personaggio, codice)
Rispondere ai seguenti quesiti utilizzando il linguaggio SQL:
• Restituire il nome dell’artista ed il titolo delle opere conservate alla “Galleria degli Uffizi” o alla “National Gallery”.
• Il codice ed il titolo delle opere di artisti italiani conservate nei musei di Londra, in cui è rappresentato Dante
• Restituire per ogni museo di Londra il numero delle opere di artisti italiani conservate nei musei di Londra, in cui è rappresentato Dante.
• Restituire per ogni museo di londra il numero delle opere di artisti italiani conservate in esso
• Il titolo dell’opera ed il nome dell’artista delle opere di artisti italiani che non hanno personaggi.
• Restituire il nome dei musei di Londra che conservano solo opere di Leonardo; effettuare tale interrogazione anche in algebra relazionale.
Esercizio 3
Si consideri R(A,B,C,D,E,F) con le seguenti dipendenze funzionali:
AB→E, AC→F, AD→B, B→C, C→D
Determinare
• Tutte le chiavi di R
• Se R è in 3NF
• Se R è in BCNF; nel caso in cui non lo fosse, discutere l’esistenza di una decomposizione che preservi le dipendenze funzionali |
WillyWonka |
domanda sull'es 3: le chiavi sono AB, AC e AD, R è in 3nf, ma è anche in BCNF? |
WillyWonka |
Il titolo dell’opera ed il nome dell’artista delle opere di artisti italiani che non hanno personaggi.
e per risolvere questa dobbiamo mettere come condizione:
WHERE personaggi.personaggi="nessuno" dato che personaggi.personaggio è parte della chiave primaria e non può essere nullo? corretto? |
j'sòd'bààr |
potete anche mettere le soluzioni degli altri esercizi?
grazie!!! |
ARIEL |
Ho provato a fare le query e questi sono i miei risultati...voi come avete fatto?
select a.nome, o.titolo
from artisti a, opere o, musei m
where a.nome=o.artista and o.museo=m.nome and o.museo=’Galleria degli Uffizi’ OR o.museo='National Gallery';
select o.codice, o.titolo
from artisti a, opere o, musei m, personaggi p
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and p.Personaggio='Dante' and m.città='londra';
select m.nome, count(*) as numeropere
from artisti a, opere o, musei m, personaggi p
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and p.Personaggio='Dante' and m.città='londra';
select m.nome, count(*) as numeropere
from artisti a, opere o, musei m,
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and a.nazionalità='italiana' and m.città='londra';
select o.titolo, a.nome
from artisti a, opere o, personaggi.p
where a.nome=o.artista and p.codice=o.codice and a.nazionalità='italiana' and p.Personaggio=null;
select m.nome
from musei m
where m.città=’londra’ and not exist (select * from opere o where o.nome<>’leonardo’ and
m.nome=o.museo);
R1:Pnome(Scittà=’londra’(Musei))
R2: Pnome(Scittà=’londra’ and artista<>’leonardo’(Musei|><|nome=museoOpere))
R1-R2 |
ARIEL |
Per quanto riguarda l'ultimo esercizio:
Le chiavi sono: AB, AC, AD
E' in 3NF, Non è in BCNF
Io non ho trovato ancora scomposizioni che preservino le dipendenze...voi?
Fatemi sapere
Ciao |
ARIEL |
Piccole correzioni
query 1:
select a.nome, o.titolo
from artisti a, opere o
where a.nome=o.artista and and o.museo=’Galleria degli Uffizi’ OR o.museo='National Gallery';
query 3:
select m.nome, count(*) as numeropere
from artisti a, opere o, musei m, personaggi p
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and p.Personaggio='Dante' and m.città='londra'
GROUP BY m.nome;
Per caso avete lo schema ER dell'esame di settembre?
Grazie |
ARIEL |
Altre correzioni che ho trovato(purtroppo le avevo fatte su carta e nel ricopiarle mi sono persa dei pezzi :P ):
query 2:
select o.codice, o.titolo
from artisti a, opere o, musei m, personaggi p
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and p.Personaggio='Dante' and m.città='londra' and a.nazionalità='italiana';
query4:
select m.nome, count(*) as numeropere
from artisti a, opere o, musei m,
where a.nome=o.artista and o.museo=m.nome and p.codice=o.codice and a.nazionalità='italiana' and m.città='londra';
GROUP BY m.nome;
query 5:
select o.titolo, a.nome
from artisti a, opere o, personaggi.p
where a.nome=o.artista and p.codice=o.codice and a.nazionalità='italiana' and p.Personaggio IS NULL; |
WillyWonka |
l'es 3 è in 3nf xkè a sn ci sono chiavi o cmq attributi primi, mentre non è i BCNF xkè nn tutti sono appunto chiavi. E' corretto?Perchè non ho capito bene questa cosa..pomeriggio po sto le mie query |
j'sòd'bààr |
ma una chiave primaria non può essere null
nella query 5 di arial è null:... p.Personaggio IS NULL
chi mi spiega?
grazie |
ARIEL |
Per essere in BCNF bisogna avere per ogni dipendenza funzionale a sinistra una chiave o superchiave (nel nostro caso B-->C e C--->D non vanno bene).
Per il fatto della chiave anche a me è venuto sto dubbio perchè in teoria non può essere null...boh o c'è un errore nello schema o penso che la query non si possa fare..qualcuno ha qualche idea? |
j'sòd'bààr |
secondo me è:
query 5:
select o.titolo, a.nome
from artisti a, opere o, personaggi.p
where a.nome=o.artista and p.codice=o.codice and a.nazionalità='italiana' and p.Personaggio='non definito'
in un quadro che rappresenta ad esempio la natura non c'è un personaggio specifico |
ARIEL |
giusto questo penso potrebbe andare! |
WillyWonka |
si basta mettere personaggio="nessuno" o qualcosa del genere, dato che non puo' essere NULL bisognaerà cmq scrivere qualcosa all'interno di personaggi.personaggio..l'avevo scritto poco sopra |
LiJay |
L'esercizio sull'er di settembre riguardava la gestione di un DB per i gruppi musicali.Purtroppo il testo preciso non ce l'ho piu',ma posso scrivervi i punti ricavandoli dall'esercizio da me svolto.
a)il gruppo è identificato da un codice,si vuole sapere nome e anno di fondazione
b)ogni gruppo puo' fare piu' album,esso viene identificato da un codice.Si vuole sapere titolo e anno di uscita.Ogni album puo' essere fatto da un solo gruppo.
c)si vuole tener traccia dei concerti svolti.essi sono identificati da un codice e si vuole tener traccia delle canzoni suonate,nome,luogo,data.Al concerto possono partecipare piu' gruppi.
d)dei componenti di un gruppo si vuole tener traccia del codice fiscale,nome,nazionalità,anno di nascita.Inoltre se il componente è un m usicista si vuole sapere quale è il suo strumento preferito,se è cantante tutte le canzoni che ha cantato nella sua carriera
fare l'ER,ristrutturarlo e fare il relativo schema relazionale.
That's all :-D |
LiJay |
in ogni caso la normalizzazione non mi entra in testa -.-' |
WillyWonka |
ho provato a risolvere le query e mi son venute simili a quelle di ariel, per cui credo proprio quelle siano corrette.
Solo un dubbio nel punto 6:
Restituire il nome dei musei di Londra che conservano solo opere di Leonardo.
nn basterebbe presentarla così?
select m.nome
from musei m, opere o
where m.città=’londra’ and o.artista=’leonardo’ and
m.nome=o.museo; |
WillyWonka |
l’algebra verrebbe:
πnome(πmuseo(σcittà=’Londra’(MUSEO)) >< σartista=’Leonardo’(OPERE)) |
ARIEL |
Penso che fatta così ti restituisca i musei che conservano un opera di leonardo (ma ci possono anche essere opere di altri artisti) e non quelli che hanno solo opere di leonardo |
WillyWonka |
Originally posted by ARIEL
Penso che fatta così ti restituisca i musei che conservano un opera di leonardo (ma ci possono anche essere opere di altri artisti) e non quelli che hanno solo opere di leonardo
hai perfettaemtne ragione!Non ci avevo proprio pensato.. |
LiJay |
scusate ma anche qui vi è il salto d'appello se si prende meno di 8?questa cosa mi mette una paura.. |
escanor |
Originally posted by LiJay
scusate ma anche qui vi è il salto d'appello se si prende meno di 8?questa cosa mi mette una paura..
Basta che ti ritiri prima di consegnare per evitare il salto di appello,se non sei sicuro di quanto hai fatto....;) |
LiJay |
eh lo so ma essendo il penultimo appello non saro' mai sicura di cio' che faròxD |
escanor |
Originally posted by LiJay
eh lo so ma essendo il penultimo appello non saro' mai sicura di cio' che faròxD
Bhè io mi rendero' conto se ho fatto schifo...e in quel caso pur di non saltare l'appello di febbraio mi ritiro eccome...:D |
LiJay |
se penso che il progetto che ho quasi finito potrebbe non valermi piu'....mammaaaa! |
ARIEL |
Se si prende meno di 9 c'è il salto d'appello.....che paura! Cmq secondo me se non si è sicuri delle risposte è meglio ritirarsi! Che ansiaaaaaaa.... |
Melodiaz |
scusate io tra tutti gli esercizi ho difficolta' con la normalizzazione, ad esempio mi potete mostrare un esempio della chiusura? nn riesco a capire i passaggi per vedere cosa e' chiave e cosa no...grazie in anticipo |
ARIEL |
Per esempio nell'esercizio di prima:
x(0)=AB controllo tra le dipendenze e noto che ho AB-->E quindi mi risulta ABE...guardo ancora tra le dipendenze e ho B--->C quindi ottengo ABCE...guardo ancora tra le dipendenze e ho C--->D quindi ottengo ABCDE, guardo ancora tra le dipendeze e vedo che ho AC--->F quindi ho ABCDEF a questo punto ho tutto lo schema inziale quindi AB è chiave. Faccio tutto questo percorso per le varie possibilità...non so io le risolvo così! |
Melodiaz |
Originally posted by ARIEL
Per esempio nell'esercizio di prima:
x(0)=AB controllo tra le dipendenze e noto che ho AB-->E quindi mi risulta ABE...guardo ancora tra le dipendenze e ho B--->C quindi ottengo ABCE...guardo ancora tra le dipendenze e ho C--->D quindi ottengo ABCDE, guardo ancora tra le dipendeze e vedo che ho AC--->F quindi ho ABCDEF a questo punto ho tutto lo schema inziale quindi AB è chiave. Faccio tutto questo percorso per le varie possibilità...non so io le risolvo così!
vediamo se ho capito ad esempio
x(0)= AC
C---->D quindi ho ACD
AD--->B quindi ho ABCD
AB--->E quindi ho ABCDE
AC---F quindi ho ABCDEF
siccome ho tutto lo schema iniziale AC e' chiave corretto? |
Melodiaz |
mi stai illuminando di immenso lo sai? DXDX |
ARIEL |
:-D Meno male...io invece ho una paura tremenda per le query (soprattutto algebra relazionale)e lo schema ER perchè non ho la minima idea della difficoltà che mette! |
WillyWonka |
idem per le query..l'er mi preoccupa meno.. |
ARIEL |
Voi come vi siete preparati per l'esame? |
WillyWonka |
ho fatto esercizi su er, sql, qualcosa di algebra e normalizzazione..piu che altro in sto periodo di esami ho avuto poco tempo per prepararmi..speriamo in bene!voi?avete usato libri o altro materiale? |
ARIEL |
Io ho usato le slide e il libro Navathe però per questo esame sapere la teoria serve a poco...secondo me è importante fare esercizi perchè l'unico modo per passarlo è avere molta logica purtroppo :-( |
Melodiaz |
io e la logica siamo come io e l'australia...anni luce di distanza |
escanor |
Originally posted by Melodiaz
io e la logica siamo come io e l'australia...anni luce di distanza
Allora sei pronto per domani....:D
Io se solo penso al fatto che avevo già passato la teoria con valle e mi tocca rifarla in questo "modo" è meglio che mi spari...:D |
Melodiaz |
Solo un'altro dubbio sulla chiusura...ma come siete arrivati alla conclusioni che le chiavi erano AB AC AD?
prima guardate cosa nn c'e' a destra, in sto caso solo a
poi vedo che a nn e' chiave
e quindi iniziate a fare le combinazioni di due attributi giusto?? |
ARIEL |
si esatto e continui finchè le finisci e poi passi a 3 attributi che si verificano facilmente (attenzione alle superchiavi)... |
LiJay |
Una domanda...voi una divisione come la esprimete in sql?
mi riferisco alla terza interrogazione a pagina 182 del libro. |
dvr |
ragazzi, qualcuno può postare domani l' esame? io non potrò esserci :( |
LiJay |
Ecco l'esame di oggi
PRIMO
Si vogliono memorizzare informazioni riguardanti i concerti che si svolgono in una determinata regione.
Un concerto identificato da un codice puo' essere tenuto da un artista o da un gruppo e puo' riguardare piu' date.
Di ogni concerto interessa il nome,il luogo(con relativa capienza)e le date in cui si tiene.per ogni serata di ogni concerto interessa sapere quali canzoni sono state cantate.
di ciascun artista(solista),identificato dal nome e dal cognome interessa la discografia(titolo ed anno di uscita di ciascun album) mentre di ciascun gruppo,identificato dal nome,interes al'anno di fondazione,il nome di ciascun componente ed il suo ruolo all'interno del gruppo.
Per ogni data di ciascun concerto vengono resi disponibili alcuni biglietti omaggio da distribuire per promozione.Si vuole tenere traccia dei dati delle persone a cui vengono destinati tali biglietti e del numero di biglietit offerti;in piarticolare si vuole evitare di destinare piu' di tre biglietti per persona per concerto.
fare ER,ristrutturarlo e fare lo schema concettuale.
SECONDO
impiegati(matr,nome,codDip)
dipartimenti(codDip,nome)
competenze(u][matr,competenza[/u])
progetti(codP,nome,sede,budget,matrResponsabile)
assegnamento(codP,matr,data,numore,descrizione)
1)determinare per ogni progetto presso cui ha lavorato l'impiegato 1234 il numero totale di giorni e di ore lavorativa effettuati
2)determinare le competenze per le quali esiste un unico impiegato che le possiede
3)trovare il nome e la matricola dei responsabili che possiedono almeno 5 competenze
4)determinare gli impiegati che sono stati aseegnati a tutti i progetti microsoft avente budget di almeno 500000 euro
ESERCIZIO3
Si consideri R(A,B,C,D,E,F) con le seguenti dipendenze funzionali
AB-->E,AE-->F,AD-->B,C-->D
determinare chiavi,se è in bcnf e in 3nf
ESERCIZIO 4
Si scriv un trigger dove si eviti di destinare piu' di 3 biglietti per persona per concerto(es1)
Io mi sono ritirata..l'sql l'ho trovato abbastanza difficile |
dvr |
grazie lijay, davvero utile :)
ma chi scriveva su questo forum che i trigger non ci sarebbero stati :? |
WillyWonka |
era bello difficile oggi!io nn ho fatto il trigger.. |
ARIEL |
L'esame era bello tosto...cmq qualcuno può postare la soluzione dello schema er? Grazie |
Kardo |
Ma per il trigger, basta una stesura standard in sql o vuole che venga fatta una funzione in pl/sql come ad esempio per il progetto? |
ARIEL |
upppppp! Qualcuno può postare le sue soluzioni dell'esame per favore?
Grazie |
LiJay |
per quanto riguarda l'er ti conviene andare da lui..l'sql no me lo sono scritto ma era piu' facile di quel che sembrava,mi sono mangiata le mani al colloquio =_=. |
Melodiaz |
Nell'ultima interrogazione sql va bene fare sta cosa?
SELECT I.matr, I.nome
FROM Impiegato AS I, Progetto AS P, assegnamento AS A
WHERE A.matr=I.matr
AND A.codP=P.codP
AND P.Sede= 'Microsoft'
AND P.budget >=50000
si accettano consigli e insulti :-) |
Kardo |
Qualcuno gentilmente può delucidarmi sulla questione del trigger? :? |
LiJay |
nell'ultima devi fare una divisione...io ho fatto così:
SELECT budget
FROM progetti p,assegnamento a
WHERE p.codP=a.codP AND Budget>=500000 AND p.nome='microsoft'
GROUP BY matr
HAVING COUNT(matr)=(SELECT COUNT(matr) FROM progetti WHERE nome='microsoft') |
el-mundo |
scusate ma perchè aggiungere le lettere? ad esempio a.matr oppure p.cod.
perchè ce ne sono diversi? cioè in più relazioni? |
roberto85 |
Nell'esercizio N° 3 dell'ultimo appello del 28-01-2008, quello sulla normalizzazione il cui testo è il seguente:
Si consideri R(A,B,C,D,E,F) con le seguenti dipendenze funzionali
AB-->E,AE-->F,AD-->B,C-->D
Io sono riuscito a trovare solo la chiave AC (cioè è l'unica che mi permette di avere la chiusura), vi posto il passaggio che ho fatto..
Prima di tutto noto che a destra non compaiono mai ne A ne C e quindi questi due attributi fanno parte della chiave.....poi ho fatto i seguenti passaggi:
X(0) = AC
C --> D quindi ottengo ACD
AD -->B quindi ottengo ABCD
AB -->E quindi ottengo ABCDE
AE --> F quindi ottengo ABCDEF
e quindi ottengo la chiusura e deduco che AC è chiave.
Poi ho provato a fare la stessa cosa per AB e AD ma non si riesce a fare la chiusura e quindi non possono essere chiavi
Non è in BCNF perchè a sinistra di ogni dipendenza funzionale bisogna avere una chiave o superchiave.
E' in 3NF.
E' giusto ciò che ho fatto o ci sono degli errori?
Per quanto riguarda la scomposizione qualcuno/a sa come si procede? |
roberto85 |
Originally posted by el-mundo
scusate ma perchè aggiungere le lettere? ad esempio a.matr oppure p.cod.
perchè ce ne sono diversi? cioè in più relazioni?
Le lettere si riferiscono precisamente a
progetti per quanto riguarda p
e
assegnamento per quanto riguarda a
vengono utilizzate semplicemente per dare la possibilità di non riscrivere tutte le volte progetti.codP oppure assegnamento.codP, etcc...
Le lettere vengono utilizzate anche per poter fare le query correlate!
:) |
roberto85 |
Altra domanda...
qualcuno è riuscito a fare in modo corretto le query 2 e 3 dell'ultimo appello?
2)determinare le competenze per le quali esiste un unico impiegato che le possiede
3)trovare il nome e la matricola dei responsabili che possiedono almeno 5 competenze |
ARIEL |
Scusa ma a me non sembra in 3NF...
Per la scomposizione in 3NF a me viene che lo schema è minimale in quanto non ci sono ridondanze così procedo e ottengo:
R1=(ABE) R2=(AEF) R3=(ADB) R4=(CD) essendo la chiave AC noto che nessun gruppo contiene la chiave....e a sto punto come si procede?
Grazie |
Kardo |
Allora, non è in 3nf sicuramente. Per la scomposizione, a quel che ho capito io:
R1=(ABE) chiave AB R2=(AEF) chiave AE R3=(ADB) chiave AD R4=(CD) chiave C
E diventa in 3nf a questo punto (e mantiene le dipendenze)
Ma non sono sicuro al 100% |
roberto85 |
Originally posted by Kardo
Allora, non è in 3nf sicuramente. Per la scomposizione, a quel che ho capito io:
R1=(ABE) chiave AB R2=(AEF) chiave AE R3=(ADB) chiave AD R4=(CD) chiave C
E diventa in 3nf a questo punto (e mantiene le dipendenze)
Ma non sono sicuro al 100%
Ah già, mi sono sbagliato non è in 3NF!
Per quanto riguarda la scomposizione come si fanno ad avere le 4 relazioni? che procedimenti avete fatto? |
ARIEL |
io personalmente prima ho controllato se lo schema è minimale (ovvero se non ci sono ridondanze...i passaggi da fare li trovi sulle slide nuove sul sito di perlasca) poi ho diviso in relazioni in base alle dipendenze che avevo tipo: ho AB-->E quindi R1(ABE) e così via e poi controlli se è in 3nf. |
roberto85 |
Originally posted by ARIEL
io personalmente prima ho controllato se lo schema è minimale (ovvero se non ci sono ridondanze...i passaggi da fare li trovi sulle slide nuove sul sito di perlasca) poi ho diviso in relazioni in base alle dipendenze che avevo tipo: ho AB-->E quindi R1(ABE) e così via e poi controlli se è in 3nf.
Ah ok perfetto! Andrò a vedere le slide! Grazie mille per le spiegazioni!
Per quanto riguardano le query 2 e 3 le sapete fare? io le ho fatte ma non sono sicuro che sono giuste!! |
roberto85 |
Io la query 3 l'ho provata a farla così:
3)trovare il nome e la matricola dei responsabili che possiedono almeno 5 competenze
select impiegati.matr, impiegati.nome
from impiegati, competenze
where impiegati.matr = competenze.matr
group by impiegati.matr, impiegati.nome
having count(competenze) >= 5
Non so cmq se è giusta!!!!
Secondo voi?????? |
tolarian |
Ho provato a risolvere le prime 3 query...
1)SELECT p.codp,COUNT(a.data),SUM(numore)
FROM impiegati i, assegnamento a,progetti p
WHERE i.matr=a.matr AND p.codp=a.codp AND i.matr=1234
GROUP BY p.codp
2)SELECT i.matr,c.competenza
FROM competenze c, impiegato i,
WHERE i.matr=c.matr AND
(SELECT COUNT(c.matr)
FROM competenze c, impiegati i
WHERE i.matr=c.matr)=1
3)SELECT i.nome,i.matr
FROM impiegati i,competenze c, progetti p
WHERE i.matr=p.matrResponsabile AND c.matr=p.matrResponsabile AND
(SELECT COUNT(c.matr)
FROM competenze c, impiegati i
WHERE i.matr=c.matr)>4
secondo voi sono giuste?
grazie |
Kardo |
Nella 1 penso bastasse usare un natural join, no?
Posto come sono venute a me le prime due:
1) SELECT a.CodP, sum (a.numore) as TOTore, count (a.data) as
TOTgiorni
FROM impiegati i NATURAL JOIN assegnamento a
WHERE i.matr = '1234'
GROUP BY a.CodP
2) SELECT competenza, matr
FROM competenze
GROUP BY competenza, matr
HAVING COUNT(*) = 1
|
Melodiaz |
scusate qualcuno potrebbe postare lo schema er corretto dell'appello di gennaio? ho ancora qualche dubbio a proposito...
THX |
tolarian |
Originally posted by Kardo
Nella 1 penso bastasse usare un natural join, no?
Posto come sono venute a me le prime due:
1) SELECT a.CodP, sum (a.numore) as TOTore, count (a.data) as
TOTgiorni
FROM impiegati i NATURAL JOIN assegnamento a
WHERE i.matr = '1234'
GROUP BY a.CodP
2) SELECT competenza, matr
FROM competenze
GROUP BY competenza, matr
HAVING COUNT(*) = 1
Sì hai ragione sul natural join ... e anche sull'uso dell'having...dato che mi confondo sempre, dato che dopo il where non si possono usare i COUNT o i SUM, mentre dopo l'having sì...
tnx |
roberto85 |
Scusate ma count (a.data) as Totgiorni non è sbagliato?
l'attributo data semmai per rivacare i giorni bisogna utilizzare DAY xò bisogna capire se quella data è la data di fine o è la data di inizio....boh secondo me fare il count di una data è un errore, ma non vorrei sbagliare.... |
Kardo |
Non so io l'ho inteso, vista la richiesta, come se lui mi contasse tutte le date in cui un impiegato lavora, però non escludo che sia da usare day magari con l'interval; se qualcuno ha idee in proposito ben venga. |
roberto85 |
Dal testo purtroppo non si capisce se quella è la data di inizio e qual è la data di fine e se i progetti non sono ancora finiti, se on sono ancora finiti per sapere il numero di giorni totali per quel determinato progetto bisognerebbe fare (current date () - data) DAY così ritrovi soltanto i giorni che sono stati impiegati, oppure io visto che non sapevo a che cosa si riferiva l'attributo data se inizio oppure fine e se sono già finiti nel compito avevo scritto sum(ore) / 24 per trovare il numero di giorni, xò non credo che sia giusto, bohhh |
roberto85 |
Per quanto riguarda il trigger pochi minuti fa ho provato a scriverlo così:
create trigger NumMaxBiglietti
after insert on Persona
for each row
when ( select New.NumBiglietti
from persona ) > 3
ROLLBACK;
Secondo voi può essere giusto? |
Kardo |
Il trigger mi sembra giusto.
Per la query :
bisognerebbe fare (current date () - data) DAY
Intendevo proprio quello, penso sia giusto così.
La query 3 a me viene:
Select i.nome, p.matrResponsabile, c.competenza
From impiegati i,competenze c,progetti p
where i.matr = p.matrResponsabile and i.matr = c.matr
group by c.competenza, i.nome, p.matrResponsabile
(non mi ricordo se devono andare tutti e tre nel group by)
having count (competenza) >= 5 |
ARIEL |
Allora a ricevimento dal prof. mi ha spiegato che in Assegnamento Data indica i giorni in cui si è lavorato al progetto. Siccome la chiave primaria è codP, Matr, Data ci saranno tuple fatte così:
0001, 1234, 12/03/2007
0001, 1234, 17/03/2007
0001, 1234, 24/03/2007
etc.
quindi facendo un count di Data si riescono a trovare i giorni totali di lavoro effettuati sul progetto. |
ARIEL |
Ho dei dubbi su alcune cose:
Select i.nome, p.matrResponsabile, c.competenza
From impiegati i,competenze c,progetti p
where i.matr = p.matrResponsabile and i.matr = c.matr
group by c.competenza, i.nome, p.matrResponsabile
(non mi ricordo se devono andare tutti e tre nel group by)
having count (competenza) >= 5
non basta mettere nel group by solo c. competenza, i.nome?
Seconda cosa quando nell'having count si mette l'attributo (come nel caso prima competenze) e quando no (come nella query degli impiegati con una sola competenza)?
Nell'esame c'era anche la query:
Determinare gli impiegati assegnati a tutti i progetti Microsoft avente budget di almeno 50000 euro.
SELECT i.Matr, i.Nome
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND budget>='50000' AND p.Nome='Microsoft' AND NOT EXIST (SELECT i.Nome, p.CodP
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND p.Nome<>'Microsoft');
Qualche idea? penso che la mia sia sbagliata in qualche pezzo!
Grazie |
roberto85 |
Originally posted by ARIEL
Allora a ricevimento dal prof. mi ha spiegato che in Assegnamento Data indica i giorni in cui si è lavorato al progetto. Siccome la chiave primaria è codP, Matr, Data ci saranno tuple fatte così:
0001, 1234, 12/03/2007
0001, 1234, 17/03/2007
0001, 1234, 24/03/2007
etc.
quindi facendo un count di Data si riescono a trovare i giorni totali di lavoro effettuati sul progetto.
ah ora ho capito, allora si se per ogni giorno viene fatta una tupla di assegnamento allora basta il count per tenere traccia dei giorni per ogni progetto |
roberto85 |
Select i.nome, p.matrResponsabile, c.competenza
From impiegati i,competenze c,progetti p
where i.matr = p.matrResponsabile and i.matr = c.matr
group by c.competenza, i.nome, p.matrResponsabile
(non mi ricordo se devono andare tutti e tre nel group by)
having count (competenza) >= 5
non basta mettere nel group by solo c. competenza, i.nome?
Il group by funziona solamente se si mettono tutti i campi che ci sono nella select, sulle slide del prof nella categoria funzioni di raggruppamento c'è proprio un esempio a rigardo! |
ARIEL |
C'era anche la query:
Determinare gli impiegati che non sono stati assegnati ad alcun progetto |
Melodiaz |
Originally posted by Melodiaz
scusate qualcuno potrebbe postare lo schema er corretto dell'appello di gennaio? ho ancora qualche dubbio a proposito...
THX
mi autoquoto sperando che qualche anima pia mi risponda...grassie |
ARIEL |
purtroppo penso che lo schema corretto non ce l'abbia nessuno! |
Melodiaz |
nooooooo...va beh iniziero' a strapparmi i capelli per domani...ormai a causa di sto esame sto diventando pelato |
ARIEL |
perchè invece non provi a postare i tuoi dubbi? magari qualcuno può risponderti ugualmente... |
ARIEL |
Originally posted by LiJay
nell'ultima devi fare una divisione...io ho fatto così:
SELECT budget
FROM progetti p,assegnamento a
WHERE p.codP=a.codP AND Budget>=500000 AND p.nome='microsoft'
GROUP BY matr
HAVING COUNT(matr)=(SELECT COUNT(matr) FROM progetti WHERE nome='microsoft')
Io invece la farei così:
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft'); |
tolarian |
Originally posted by ARIEL
Io invece la farei così:
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');
Non la capisco molto l'ultima riga...
4)determinare gli impiegati che sono stati aseegnati a tutti i progetti microsoft avente budget di almeno 500000 euro -->vuol dire di trovare gli impiegati che lavorano in tutti i progetti microsoft con un budget >= 500000 oppure trovare tutti gli impiegati che lavorano in progetti microsoft con un budget >= 500000 ???
cmq con l'having che hai scritto non risolveresti: impiegati.nome è sicuramente il nome dell'impiegato, mentre come controllo tu conteggi le matricole che lavorano in progetti microsoft >=500000 però la query tiene anche conto di quelli che lavorano in almeno uno di questi progetti...
quindi io ho scritto la query per la 2° mia ipotesi :)
Ecco quello che ho fatto io...
Es.2
impiegati(matr,nome,codDip)
dipartimenti(codDip,nome)
competenze(u][matr,competenza[/u])
progetti(codP,nome,sede,budget,matrResponsabile)
assegnamento(codP,matr,data,numore,descrizione)
1)determinare per ogni progetto presso cui ha lavorato l'impiegato 1234 il numero totale di giorni e di ore lavorativa effettuati
2)determinare le competenze per le quali esiste un unico impiegato che le possiede
3)trovare il nome e la matricola dei responsabili che possiedono almeno 5 competenze
4)determinare gli impiegati che sono stati aseegnati a tutti i progetti microsoft avente budget di almeno 500000 euro
1)SELECT p.codP, SUM(a.numore), COUNT(a.data)
FROM progetti p, assegnamento a, impiegati i
WHERE a.matr=i.matr AND p.codP=a.codP AND i.matr=’1234’
GROUP BY p.codP
2)SELECT matr, competenza
FROM competenze
GROUP BY competenza, matr
HAVING COUNT(c.competenza)=1
3)SELECT i.nome, p.matrResponsabile
FROM impiegati i, competenze c, progetti p, assegnamento a
WHERE i.matr=c.matr AND c.matr=p.matrResponsabile AND a.codP=p.codP AND a.matr=i.matr
GROUP BY i.nome, p.matrResponsabile
HAVING COUNT(c.competenze) > 4
4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr
Es.3
AB-->E
AE-->F
AD-->B
C-->D
A destra non compare mai A e C ... quindi fanno parte della chiave;
AC-->ACD-->ABCD-->ABCDE-->ABCDEF è chiave
non è in 3NF e neanche in BCNF
ora faccio anche il resto...
PS se ho sbagliato qualcosa ditemelo ;) |
tolarian |
Originally posted by ARIEL
io personalmente prima ho controllato se lo schema è minimale (ovvero se non ci sono ridondanze...i passaggi da fare li trovi sulle slide nuove sul sito di perlasca) poi ho diviso in relazioni in base alle dipendenze che avevo tipo: ho AB-->E quindi R1(ABE) e così via e poi controlli se è in 3nf.
mi potresti inviare via pm sia il link che lo usr e psw delle slide???
grazie |
Kardo |
Doppio post. Sorry. |
Kardo |
Originally posted by ARIEL
Io invece la farei così:
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');
SELECT i.Matr, i.Nome
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND budget>='50000' AND p.Nome='Microsoft' AND NOT EXIST (SELECT i.Nome, p.CodP
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND p.Nome<>'Microsoft')
Io l'ho fatta con il group by, ma sono giuste entrambe, credo, perchè sulle slide la divisione viene espressa, o usando la doppia negazione (not exist) o con le funzioni di gruppo. |
tolarian |
Originally posted by Kardo
Io l'ho fatta con il group by, ma sono giuste entrambe, credo, perchè sulle slide la divisione viene espressa, o usando la doppia negazione (not exist) o con le funzioni di gruppo.
mi potete dare il link delle slide per piacere?
grazie |
ARIEL |
4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr
Con questa query penso che nel risultato siano compresi anche quegli impiegati che sono stati assegnati a un solo progetto microsoft con budget >=50000 mentre penso che la query vuole sapere gli impiegati che partecipano a tutti i progetti microsoft...
io l'ho intesa così! |
tolarian |
Originally posted by ARIEL
4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr
Con questa query penso che nel risultato siano compresi anche quegli impiegati che sono stati assegnati a un solo progetto microsoft con budget >=50000 mentre penso che la query vuole sapere gli impiegati che partecipano a tutti i progetti microsoft...
io l'ho intesa così!
lo so, però nn penso possa funzionare
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');
dato che conteggia le matricole sopra citate e fa un eguaglianza al conteggio di tutti gli impiegati che si chiamano Microsoft (perchè fai From impiegati Where nome='Microsoft') ... avrebbe più senso fare FROM progetti Where nome='Microsoft' ma calcoleresti tutte le persone che lavorano ad almeno un progetto microsoft ... se sto dicendo vaccate ditemelo :) |
ARIEL |
Ah cavolo mi sa che avevo sbagliato a scrivere la sottoquery....così forse potrebbe andare...
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft'); |
carlinus |
Originally posted by ARIEL
Ah cavolo mi sa che avevo sbagliato a scrivere la sottoquery....così forse potrebbe andare...
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft');
pure io l'ho fatta così e penso che sia giusta perchè conta il codP di un impiegato che ha partecipato a progetti microsoft con 500000 di budget se qst è uguale al numero tot di codp dei progetti progetti microsoft con 500000 di budget allora restituisce l'impiegato |
LiJay |
SELECT DISTINCT impiegati.nome, impiegati.matr, progetti.budget
FROM impiegati, assegnamento, progetti
WHERE impiegati.matr = assegnamento.matr AND progetti.nome = 'microsoft' AND progetti.budget >= 500000
GROUP BY progetti.budget, impiegati.nome, impiegati.matr
HAVING count(impiegati.matr) = ( SELECT count(assegnamento.matr) AS count
FROM assegnamento, progetti
WHERE assegnamento.cod_progetto = progetti.cod_progetti AND progetti.nome = 'microsoft' AND progetti.budget >= 500000)
cosi' sono certa che va,mi sono creata apposta il db per provare le varie query^^ |
ARIEL |
:shock::shock::shock: è talmente contorta che non riesco nemmeno a capirla! Sarà anche che sono fusa, è da stamattina che sto facendo query! :cry: |
ARIEL |
cmq come avete fatto la query:
Determinare gli impiegati che non sono stati assegnati ad alcun progetto?
@Lijay: se per caso hai tempo puoi provare anche la query:
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft');
Tanto per avere la certezza che funziona! Grazie |
zyx |
ma a che ora è domani l'esame e dove si trova??? |
ARIEL |
L'esame di Gestione dell'Informazione si terrà il 22 Febbraio alle ore 14.00 in aula Beta, via Comelico |
tolarian |
Originally posted by ARIEL
cmq come avete fatto la query:
Determinare gli impiegati che non sono stati assegnati ad alcun progetto?
@Lijay: se per caso hai tempo puoi provare anche la query:
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft');
Tanto per avere la certezza che funziona! Grazie
direi che manca l'ultimo pezzo
SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft' AND budget>='50000'); |
carlinus |
cmq come avete fatto la query:
Determinare gli impiegati che non sono stati assegnati ad alcun progetto?
io l'ho fatta così
SELECT i.nome
FROM Impiegati i
WHERE i.Matr NOT IN (SELECT i.Matr FROM Impiegati i, Progetti p, Assegnamento a WHERE i.matr=a.matr and p.codP=a.codP)
il concetto che ho cercato di scrivere è cerco gli impiegati che sono stati assegnati a qualche progetto se la matr nn è in qst elenco allora vuol dire che quell'impiegato nn è stato assegnato a nessun progetto
|
tolarian |
Originally posted by carlinus
cmq come avete fatto la query:
Determinare gli impiegati che non sono stati assegnati ad alcun progetto?
io l'ho fatta così
SELECT i.nome
FROM Impiegati i
WHERE i.Matr NOT IN (SELECT i.Matr FROM Impiegati i, Progetti p, Assegnamento a WHERE i.matr=a.matr and p.codP=a.codP)
il concetto che ho cercato di scrivere è cerco gli impiegati che sono stati assegnati a qualche progetto se la matr nn è in qst elenco allora vuol dire che quell'impiegato nn è stato assegnato a nessun progetto
Cosa ne dite di questa?
SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND not exists (SELECT a.matr FROM impiegati i, progetti p, assegnamento a WHERE i.matr=a.matr AND a.codP=p.codP)
GROUP BY i.matr |
carlinus |
nn saprei alla fine l'interragazione è uguale alla sottointerrogazione |
|
|
|
|