.dsy:it. Pages (8): « 1 2 3 4 [5] 6 7 8 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ comunicazione digitale (http://www.dsy.it/forum/forumdisplay.php?forumid=108)
-- esami perlasca 06/07 (http://www.dsy.it/forum/showthread.php?threadid=33477)


Posted by ARIEL on 20-02-2008 12:12:

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.


Posted by roberto85 on 20-02-2008 13:33:

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!!


Posted by roberto85 on 20-02-2008 14:31:

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??????


Posted by tolarian on 20-02-2008 14:57:

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


Posted by Kardo on 20-02-2008 17:32:

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


Posted by Melodiaz on 20-02-2008 18:08:

scusate qualcuno potrebbe postare lo schema er corretto dell'appello di gennaio? ho ancora qualche dubbio a proposito...

THX


Posted by tolarian on 20-02-2008 20:21:

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


Posted by roberto85 on 20-02-2008 20:40:

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....


Posted by Kardo on 20-02-2008 21:42:

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.


Posted by roberto85 on 20-02-2008 22:31:

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


Posted by roberto85 on 20-02-2008 22:33:

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?


Posted by Kardo on 20-02-2008 23:14:

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


Posted by ARIEL on 21-02-2008 08:31:

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.


Posted by ARIEL on 21-02-2008 09:19:

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


Posted by roberto85 on 21-02-2008 09:24:

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


All times are GMT. The time now is 06:57. Pages (8): « 1 2 3 4 [5] 6 7 8 »
Show all 119 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.