Esercizi sulla modellazione concettuale e su SQL Alessandra Raffaetà Dipartimento di Informatica Università Ca Foscari Venezia
Modellazione concettuale Una rivista periodica di fumetti vuole memorizzare informazioni relative a tutte le storie che ha pubblicato nel passato, ed ai relativi personaggi. Di una storia interessa il titolo, che la identifica, ed interessano le informazioni relative alle puntate in cui è stata divisa: per ogni puntata interessa il numero di pagine, il numero d ordine all interno della storia (prima, seconda,... ) ed il numero della rivista su cui è stata pubblicata. I personaggi si dividono in principali e secondari. Per tutti i personaggi interessa il nome, che li identifica. Per i personaggi secondari interessa ricordare le storie in cui sono apparsi, mentre per quelli principali si vogliono memorizzare precisamente le puntate di apparizione. Se due personaggi sono parenti, se ne memorizza la relazione di parentela (ovvero, il fatto che sono parenti ed anche il grado di parentela). Si definisca uno schema concettuale grafico ad oggetti. Si traduca lo schema a oggetti in uno schema relazionale. Per ogni relazione si specifichi il nome degli attibuti, la chiave primaria e le chiavi esterne.
Modellazione concettuale Si vogliono rappresentare le seguenti informazioni relative alle tesi di un corso di laurea. Di una tesi interessa il titolo, gli studenti che la svolgono (anche più di uno), il controrelatore, il tipo (ricerca, rassegna, progetto) e l'area (basi di dati, programmazione logica, architettura, ecc.). Di uno studente interessa la matricola, il cognome, la data prevista per la laurea. I relatori possono essere docenti universitari dipendenti di altri enti di ricerca, mentre i controrelatori sono sempre docenti. Di un relatore interessa il cognome e l'ente di appartenenza, di un docente interessa anche il dipartimento di afferenza. Si definisca uno schema concettuale grafico ad oggetti. Si traduca lo schema a oggetti in uno schema relazionale. Per ogni relazione si specifichi il nome degli attibuti, la chiave primaria e le chiavi esterne.
Modellazione concettuale Si vogliono trattare le informazioni relative ai file contenuti in un file system. I file possono essere file ordinari, directory o file speciali. Ogni file ha un identificatore unico, che è un intero, ha un padre, che è una directory, ed ha un nome, che lo identifica fra tutti i file con lo stesso padre; la directory radice ha se stessa come padre, ed è identificata dal numero 0. Ogni file ha un utente che ne è proprietario, ed un gruppo di appartenenza. Un utente ha un nome, che lo identifica, e può appartenere a più gruppi ed è proprietario di più file. Ad ogni gruppo, identificato da un nome, appartengono più utenti e più file. Dei file di testo interessa anche conoscere il numero di parole che vi appaiono. Si definisca uno schema concettuale grafico ad oggetti. Si traduca lo schema a oggetti in uno schema relazionale. Per ogni relazione si specifichi il nome degli attibuti, la chiave primaria e le chiavi esterne.
SQL Si consideri lo schema dell esercizio del cinema. 1. Per ogni film in cui appaiono solo attori nati prima del 1970 restituire il titolo del film. 2. Per ogni film in cui appaiono solo attori nati prima del 1970 restituire il regista del film e il numero di attori 3. Restituire il nome e il codice di tutte le sale di Venezia in cui ogni proiezione del film con codice 100 che è avvenuta il 10/12/2007 ha incassato almeno 150 euro. 4. Restituire il nome e il codice di tutte le sale di Venezia in cui ogni proiezione del film con codice 100 è avvenuta il 10/12/2007 ed ha incassato almeno 150 euro.
SQL Persone(Id, Nome, Reddito, Eta, Sesso) PK(Id) Genitori(Figlio*, Genitore*) PK(Figlio, Genitore) Figlio FK(Persone), Genitore FK(Persone)
Query 1. Trovare id, nome e reddito delle donne con meno di 35 anni. 2. Trovare id, nome e reddito dei genitori di Antonino (Id='A3'). 3. Restituire per ogni persona, il nome della persona e quello dei nonni. 4. Trovare il reddito medio dei padri per età 5. Fornire le coppie di fratelli (due persone sono fratelli se hanno un genitore in comune), indicandone i nomi. 6. Nomi delle persone che sono genitori di almeno 2 figli. 7. Mostrare per ciascun figlio i rispettivi genitori (Madre, Padre, Figlio), indicando, per ciascuno, il nome. 8. Trovare l'elenco dei genitori i cui figli guadagnano tutti più di 20000 euro. Mostrare identificatore e nome, ordinando la lista per nome. 9. Cancellare le Persone con reddito maggiore di 50000 euro. 10. Aumentare del 20% tutti i redditi inferiori a 30000 euro.
SQL Pizze(CodPizza, Nome, tempoprep, Prezzo) PK(CodPizza) Ingredienti(CodIngrediente,Nome, QuantitaMagazzino, costobase) PK(CodIngrediente) Ricette(CodPizza*,CodIngrediente*,Quantita) PK(CodPizza, CodIngrediente) CodPizza FK(Pizze), CodIngrediente FK(Ingredienti) Ordini(CodOrdine, NomeCliente, IndirizzoCliente, oraconsegna, codpizza*) PK(CodOrdine) CodPizza FK(Pizze)
Query 1. Trovare quanta mozzarella è contenuta nella pizza margherita. 2. Calcolare la somma dei costi base degli ingredienti della pizza capricciosa (si ignorino le diverse quantità). 3. Trovare le pizze preferite dal cliente Mario Rossi, cioè quelle che ha ordinato il maggior numero di volte. 4. Trovare quante pizze non contengono la mozzarella. 5. Trovare il nome delle pizze che hanno meno di 3 ingredienti. 6. Eliminare le pizze che contengono la cipolla.