Homepage  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


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ comunicazione digitale
Pages: [1] 2 
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?

ARIEL
si giusto

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

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate