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