.dsy:it. Pages (2): [1] 2 »
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)
-- [Help] Vecchi temi d'esame (http://www.dsy.it/forum/showthread.php?threadid=29060)


Posted by PablitoEscobar on 20-01-2007 17:57:

[Help] Vecchi temi d'esame

Ciao a tutti,
Ho un problema su uno schema ER dell'esame di luglio 2005 Mazzoleni/Perlasca.(1° esercizio).
Io come Entita ho individuato che:

Studenti ---> ESAMI(data, voto)---> Corsi (molti a molti)
Corsi---> TIENE ---> Docente (molti a moli)

Il mio problema e' riguardo i turni che nn capisco se fare un'altra entita turni oppure legarla come attributo all'entita o docente o corsi. ma non so come.

Qualcuno che m puo' aiutare?

Allego il link del file alla quale m sto riferendo:
http://www.dsy.it/forum/attachment.php?s=&postid=355515


Posted by -MICKY- on 24-01-2007 11:43:

Io il turno lo legherei semplicemente all'entità corso e metterei quindi come chiave primaria "Nome_Corso" e "Turno" oppure un id..

le iscrizioni degli studenti ai corsi invece come le gestisci??


Posted by PablitoEscobar on 24-01-2007 16:40:

Ti posto quello che potrebbe essere uno schema ER sensato + le relazioni secondo me.
Dimmi che ne pensi e se potrebbe avere senso


Posted by -MICKY- on 24-01-2007 22:55:

secondo me ci sono un po' di cose che non vanno..
domani se ho tempo provo a postare come lo farei io..
ciao


Posted by -MICKY- on 25-01-2007 17:07:

ok, io l'ho fatto così, ti passo direttamente il db da dove puoi vedere tutto (query comprese)... ;)


Posted by -MICKY- on 25-01-2007 20:50:

Posto un altro vecchio tema, aprile 2006, la cui soluzione nell'area filez secondo me è sbagliata (lo schema relazionale)..
fatemi sapere che ne pensate..


Posted by ked on 29-01-2007 11:53:

Originally posted by -MICKY-
Posto un altro vecchio tema, aprile 2006,


anche secondo me ha sbagliato: basta mettere cod_responsabile (che può essere nullo se lui è un responsabile) nella tabella Commesso.

invece nella query2:
SELECT DISTINCT Nome
FROM Prodotto, Compra
WHERE Cod_Prodotto = cod_p#
AND YEAR(data_acq) = 2000
GROUP BY Nome
ORDER BY Nome;

fa un raggruppamento sul nome e poi un distinct ancora sul nome...
Ti da lo stesso risultato se usi singolarmente Distinct o Group ma utilizarli tutte e due è inutile...no? che dite??

__________________
:arrow:


Posted by -MICKY- on 29-01-2007 12:24:

Originally posted by ked
anche secondo me ha sbagliato: basta mettere cod_responsabile (che può essere nullo se lui è un responsabile) nella tabella Commesso.


esatto

Originally posted by ked

invece nella query2:
SELECT DISTINCT Nome
FROM Prodotto, Compra
WHERE Cod_Prodotto = cod_p#
AND YEAR(data_acq) = 2000
GROUP BY Nome
ORDER BY Nome;

fa un raggruppamento sul nome e poi un distinct ancora sul nome...
Ti da lo stesso risultato se usi singolarmente Distinct o Group ma utilizarli tutte e due è inutile...no? che dite??


concordo, è sufficiente uno dei 2..


Posted by shiffola on 29-01-2007 13:48:

a distanza di mesi non posso dirti come l'avevo pensata, comunque senza distinct, dopo aver raggruppato, potrebbe scriverti più righe aventi lo stesso nome, aggiungendo quella clausola invece dovrebbe scrivere il nome anche se appare più volte nella tabella. In ogni caso potrebbe anche essere che sia sbagliata, nel caso non mi ha segnato l'errore ;)


Posted by ked on 29-01-2007 15:43:

ecco la mia versione, logicamente diversa dalla vostra ;-))
premetto che il testo per me non è chiarissimo infatti:
1) io considero le tabelle Corsi ed Esami uguali...così non ripeto dei dati che ho di già in una tabella.

2) non specifica espressamente la suddivisione per turni degli studenti e quindi questo non lo considero..semmai è uguale alla soluzione per i docenti.

.... cosa ne pensate??

L'ultima query, quella che richiede il nome dello studente con il maggior numero di tentativi, come l'avete fatta??

__________________
:arrow:


Posted by -MICKY- on 29-01-2007 16:27:

Originally posted by ked

L'ultima query, quella che richiede il nome dello studente con il maggior numero di tentativi, come l'avete fatta??



bisognerebbe contare i tentavi e prendere il maggiore ma secondo me non si può fare con una query sola..
io ho contato i tentativi e li ho ordinati dal più alto al più basso (è praticamente l'equivalente)
dovrebbe andar bene cmq credo..


Posted by PablitoEscobar on 30-01-2007 16:10:

Originally posted by -MICKY-
bisognerebbe contare i tentavi e prendere il maggiore ma secondo me non si può fare con una query sola..
io ho contato i tentativi e li ho ordinati dal più alto al più basso (è praticamente l'equivalente)
dovrebbe andar bene cmq credo..



forse una roba del genere :

Select Studenti.nome, MAX(COUNT(*))
from Studenti, Corsi, Sostenuto
where Studenti.ID_Studenti = Sostenuto.ID_Studenti,
and Corsi.ID_Studenti = Sostenuto.ID_Studenti,
and Corsi.nome = "Informatica applicata",
and Sostenuto.voto <18,
Group by Studenti.nome.

Oppure sicuramente nel db di Micky

SELECT studente.Cognome, esame.matricola, count(Esame.matricola) AS NumVolteNonSuperatoEsameLabInfApplicata
FROM Esame, studente
WHERE esame.matricola=studente.matricola and voto<18 and nome_corso="LabInfApplicata"
GROUP BY cognome, esame.matricola
HAVING COUNT(esame.matricola) >=ALL (
SELECT count(Esame.matricola) AS NumVolteNonSuperatoEsameLabInfApplicata
FROM Esame, studente
WHERE esame.matricola=studente.matricola and voto<18 and nome_corso="LabInfApplicata"
GROUP BY cognome, esame.matricola


)


Posted by -MICKY- on 30-01-2007 17:18:

Originally posted by PablitoEscobar
forse una roba del genere :

Select Studenti.nome, MAX(COUNT(*))
from Studenti, Corsi, Sostenuto
where Studenti.ID_Studenti = Sostenuto.ID_Studenti,
and Corsi.ID_Studenti = Sostenuto.ID_Studenti,
and Corsi.nome = "Informatica applicata",
and Sostenuto.voto <18,
Group by Studenti.nome.


max(count(*)) l'avevo provato anch'io ma non si può fare..


Posted by -MICKY- on 30-01-2007 17:31:



Oppure sicuramente nel db di Micky

SELECT studente.Cognome, esame.matricola, count(Esame.matricola) AS NumVolteNonSuperatoEsameLabInfApplicata
FROM Esame, studente
WHERE esame.matricola=studente.matricola and voto<18 and nome_corso="LabInfApplicata"
GROUP BY cognome, esame.matricola
HAVING COUNT(esame.matricola) >=ALL (
SELECT count(Esame.matricola) AS NumVolteNonSuperatoEsameLabInfApplicata
FROM Esame, studente
WHERE esame.matricola=studente.matricola and voto<18 and nome_corso="LabInfApplicata"
GROUP BY cognome, esame.matricola


) [/B]


sì questa va ;)


Posted by PablitoEscobar on 30-01-2007 17:35:

Originally posted by -MICKY-
max(count(*)) l'avevo provato anch'io ma non si può fare..



Da quello che ho capito solo in Access perche' MySQL lo accetta.


All times are GMT. The time now is 00:37. Pages (2): [1] 2 »
Show all 18 posts from this thread on one page

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