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 ~ informatica triennale
 
Preparazione esame
Clicca QUI per vedere il messaggio nel forum
mattiie
Pubblico qua la mia preparazione all'esame di BD; consiste nella correzione dell'esame del 2009. Fatemi sapere se ci sono errori..

Shaper
Originally posted by mattiie
Pubblico qua la mia preparazione all'esame di BD; consiste nella correzione dell'esame del 2009. Fatemi sapere se ci sono errori..


Ciao, intanto grazie per il post, poi per quanto riguarda l'SQL io ho fatto in maniera diversa:

PHP:

-- 22/sett/09 esercizio 1
-- matricola dei maestri che hanno solo assegnazioni di materie del loro stesso ambito

SELECT maestro.matricola 
FROM maestro, materia, assegnazione
WHERE materia.id = assegnazione.id
AND maestro.ambito = materia.ambito
AND maestro.matricola NOT IN 
(SELECT maestro.matricola
FROM maestro, materia, assegnazione
WHERE materia.id = assegnazione.id
AND maestro.matricola = assegnazione.matricola
AND maestro.ambito != materia.ambito)

-- 22/sett/09 esercizio 1
-- determinare, per ogni maestro di ambito matematico, il numero totale di assegnazioni
SELECT maestro.matricola, COUNT(*) AS numero_assegnazioni
FROM maestro, assegnazione
WHERE maestro.matricola = assegnazione.matricola
AND maestro.ambito = 'matematico'
GROUP BY maestro.matricola



A occhio direi che la prima fa la stessa cosa, solo in modo diverso.
Invece la seconda non l'ho proprio capita:
intanto la domanda dice che l'ambito matematico deve essere quello del MAESTRO, non della materia, quindi 'mt.ambito = om.ambito' penso sia sbagliato.
E poi da dove tiri fuori 'om.matricola'? Nel FROM hai elencato solo assegnazione a, materia mt)

Ho provato le query su un db di prova e i risultati erano coerenti, qualcuno ha altre soluzioni? :?

mattiie
Per quanto riguarda la prima, come dici te, sono assolutamente equivalenti. Solo ricorda che != va bene in C ma in SQL si scrive <>.
Per quanto riguarda la seconda, ho fatto un pasticcio col copia/incolla.
La versione corretta è:

SELECT m.nome, m.cognome, COUNT(*) as numero_assegnazioni
FROM assegnazione a, materia mt, maestro m
WHERE a.matricola = m.matricola AND mt.ambito = m.ambito AND mt.nome= 'Matematica'
GROUP BY m.matricola;

Shaper
Originally posted by mattiie
Per quanto riguarda la prima, come dici te, sono assolutamente equivalenti. Solo ricorda che != va bene in C ma in SQL si scrive <>.


Hai ragione, a furia di andare avanti e indietro fra php e SQL mi sta andando insieme tutto! :P

Per la query, adesso è molto più chiara, però continuo a sostenere che invece di scrivere
mt.ambito = m.ambito AND mt.nome= 'Matematica'

bisogna scrivere
m.ambito = '_ambito_matematico_'

Infatti l'esercizio chiede "...per ogni maestro di AMBITO matematico..." e tu stai considerando la materia col NOME 'Matematica'
Mentre l'ambito si riferisce al maestro

Esempio:
Un maestro di ambito matematico insegnerà materie di ambito matematico, come algebra, geometria, trigonometria, ma nulla vieta che insegni materie anche di altri ambiti, come per esempio geografia. A riprova di ciò il primo punto chiede di selezionare maestri che hanno assegnazioni SOLO del loro stesso ambito (il che implica che ce ne siano con assegnazioni ad ambiti diversi)

number15
Ex. 1 tu dici risposta C, ma essendo parziale/sovrapposta se tieni tutte 3 le tabelle devi riportare la chiave primaria della superclasse nelle sottoclassi. Per me l'unica possibile è la B.

Edit: tra l'altro i due attributi delle sottoclassi son normali attributi, non possono diventare chiavi.

mattiie
Hai ragione: ero concentrato sui vari modi per tradurla che non ho guardato i dettagli base XD

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