PROVA SCRITTA 12 Settembre 2007 COGNOME NOME MATRICOLA Esercizio di sbarramento Rispondere ai seguenti test. Per ogni test, solo una soluzione e’ corretta L’esercizio si ritiene superato se si risponde correttamente ad almeno 7 domande, di cui almeno una domanda per ogni gruppo di test. GRUPPO 1: domande generali Domanda 1 Sia V una vista in una base di dati DB. Quale tra le seguenti affermazioni e’ corretta: a) V contribuisce a definire lo schema di DB b) V contribuisce a definire l’istanza di DB c) V contribuisce a definire sia l’istanza che lo schema di DB Domanda 2 Una chiave esterna: a) Deve contenere lo stesso numero e tipo di attributi della chiave primaria della relazione riferita b) Deve contenere lo stesso numero e tipo di attributi di una tra le chiavi alternative della relazione riferita c) Deve contenere lo stesso numero e tipo di attributi di una tra le chiavi candidate della relazione riferita d) Nessuna delle precedenti Domanda 3 Durante la fase di progettazione, avete rilevato un vincolo di integrita` rappresentabile in SQL come asserzione ma il DBMS che intendete utilizzare non supporta questo concetto. Cosa fare per implementare comunque il vincolo, utilizzando soltanto i concetti visti nel corso di Basi di Dati: a) Utilizzate un CONSTRAINT b) Utilizzate una particolare funzione o procedura c) Verificate il vincolo in ogni funzione/procedura che modifica la base di dati e che potrebbe modificare il vincolo stesso d) Nessuna delle precedenti GRUPPO 2: linguaggi relazionali Si consideri il seguente schema relazionale: CD(Titolo, Anno, NumCanzoni) CANTANTE(CodA, Nome, Cognome, DataNascita) CANZONE(Titolo, CodACantante Durata, Testo) APPARE_IN(TitoloCanzone, CodACanzone , TitoloCDCD, AnnoCD) Domanda 1 Si supponga di volere determinare i titoli delle canzoni che non sono mai comparse in un CD e si consideri la seguente espressione incompleta: R- S Indicare quali tra le seguenti espressioni devono essere inserite nella precente espressione incompleta per ottenere il risultato: a) R = Titolo(CANZONE) S = Titolo (APPARE_IN) b) R = Titolo,CodA(CANZONE) S = Titolo,CodA (APPARE_IN) c) R = CANZONE S = Titolo,CodA (APPARE_IN) d) Nessuna delle precedenti Domanda 2 Si supponga di volere determinare il CD contenente il maggior numero di canzoni. . Questa espressione: a) Puo’ essere espressa in algebra relazionale b) Non puo’ essere espressa in algebra relazionale ma puo’ essere espressa in calcolo relazionale c) Non puo’ essere espressa ne’ in algebra ne’ in calcolo relazionale Domanda 3 Si consideri la seguente espressione del calcolo relazionale: {t: {CodA} | c1( s1( s2 ( c1 CANTANTE s1 CANZONE s2 CANZONE s1.CodA = c.CodA s2.CodA = c.CodA))) } La precedente espressione permette di determinare: a) I cantanti che cantano almeno due canzoni presenti nel database b) I cantanti che cantano almeno due canzoni presenti nel database c) Nulla, perche` sintatticamente errata d) Nulla, perche` restituisce sempre l’insieme vuoto GRUPPO 3: SQL Si consideri nuovamente lo schema relazionale proposto per il Gruppo 2 di test. CD(Titolo, Anno, NumCanzoni) CANTANTE(CodA, Nome, Cognome, DataNascita) CANZONE(Titolo, CodACantante Durata, Testo) APPARE_IN(TitoloCanzone, CodACanzone , TitoloCDCD, AnnoCD) Domanda 1 Si consideri il seguente comando SQL: DELETE FROM CD C WHERE NumCanzoni <> (SELECT COUNT(*) FROM APPARE_IN WHERE C. Titolo = TitoloCD AND C.Anno = Anno) Indicare quali CD vengono cancellati eseguendo il comando precedente: ___________________________________________________________________________________________ ___________________________________________________________________________________________ ___________________________________________________________________________________________ ___________________________________________________________________________________________ Domanda 2 Si consideri il seguente comando SQL: SELECT Titolo FROM CD C WHERE NumCanzoni <= (SELECT COUNT(*) FROM APPARE_IN WHERE C.Anno = Anno GROUP BY TitoloCD, Anno) Questa interrogazione e` sintatticamente errata. Perche`? a) La clausola WHERE della sottoquery e’ sintatticamente errata b) L’operatore di confronto utilizzato nella clausola WHERE della query principale e’ sintatticamente errato c) Il raggruppamento nella sottoquery e` sintatticamente errato d) Nessuna delle precedenti Domanda 3 Si consideri la seguente asserzione SQL: CREATE ASSERTION ControllaNumCanzoni CHECK NOT EXISTS ( SELECT * FROM CANZONE WHERE (Titolo,CodA) NOT IN ( SELECT Titolo, CodA FROM APPARE_IN ) ) Tale vincolo impedisce alla base di dati di contenere: a) Canzoni che non compaiono in alcun CD b) Canzoni che compaiono in almeno un CD c) CD che non contengono canzoni d) Nessuna delle precedenti GRUPPO 4: comprensione di schemi ER e progettazione Si risponda alle seguenti domande relative al seguente schema ER: Domanda 1 Indicare quale tra questi requisiti descrive nel modo piu’ preciso la relazione IN: a) Ogni Università` e’ associata ad un numero arbitrario di Dipartimenti. Ogni Dipartimento e` associato esattamente ad una Universita` b) Ogni Università` e’ associata ad almeno un Dipartimento. Ogni Dipartimento e` associato ad almeno una Università c) Ogni Università` e’ associata ad un numero arbitrario di Dipartimenti. Ogni Dipartimento e` associato ad almeno una Università d) Ogni Università` e’ associata ad almeno un Dipartimento. Ogni Dipartimento e` associato ad esattamente una Università Domanda 2 La risposta a questa domanda si considera corretta se si risponde correttamente ad almeno 3 affermazioni: vero Falso Dipartimenti diversi possono avere lo stesso nome X Dipartimenti con lo stesso nome possono appartenere alla stessa X Università` Ci possono essere Dipartimenti per cui l‘Universita` di appartenenza X non e` nota Dipartimenti con lo stesso nome devono avere lo stesso indirizzo X Ci possono essere Universita` per cui i Dipartimenti non sono noti X Domanda 3 Quale tra i seguenti schemi relazionali corrispondono allo schema presentato sopra? a) UNIVERSITA (Nome) DIPARTIMENTO(Nome, Indirizzo, NumDoc) IN(NomeUniversitaUniversita,NomeDipartimentoDipartimento) b) UNIVERSITA (Nome) DIPARTIMENTO(Nome, Indirizzo, NumDoc) IN(NomeUniversitaUniversita,NomeDipartimentoDipartimento) c) UNIVERSITA (Nome) DIPARTIMENTO(Nome,NomeUniversitaUniversita, Indirizzo, NumDoc) d) UNIVERSITA (Nome) DIPARTIMENTO(Nome,NomeUniversitaUniversita, Indirizzo, NumDoc)