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
 
[Help] Vecchi temi d'esame
Clicca QUI per vedere il messaggio nel forum
PablitoEscobar
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

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

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

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

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

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

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

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

shiffola
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 ;)

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

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

PablitoEscobar
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


)

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

-MICKY-


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 ;)

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

-MICKY-
Originally posted by PablitoEscobar
Da quello che ho capito solo in Access perche' MySQL lo accetta.


ah sì?? ank'io avevo questo sospetto..

cmq buono a sapersi così è più semplice.. ;)

grazie

symrad
Io ho scoperto da poco le view e secondo me era meglio farla in questo modo:

CREATE VIEW StudenteSfigato (cognome,matricola,NumVolteNonSuperatoEsameLabInfA
pplicata) AS
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;

SELECT cognome,matricola,MAX(NumVolteNonSuperatoEsameLabI
nfApplicata)
FROM StudenteSfigato
GROUP BY cognome,matricola

Non l'ho verificata su questo tipo di database ho provato a fare una view tipo questa sul progetto aeroporto e sembra funzionare

PablitoEscobar
Originally posted by symrad
Io ho scoperto da poco le view e secondo me era meglio farla in questo modo:

CREATE VIEW StudenteSfigato (cognome,matricola,NumVolteNonSuperatoEsameLabInfA
pplicata) AS
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;

SELECT cognome,matricola,MAX(NumVolteNonSuperatoEsameLabI
nfApplicata)
FROM StudenteSfigato
GROUP BY cognome,matricola

Non l'ho verificata su questo tipo di database ho provato a fare una view tipo questa sul progetto aeroporto e sembra funzionare



Si le view funzionano ma anche quelle non su access.
In poche parole MS e' da evitare..

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