Basi di dati - Progetto didattico 2008/2009 Gigliola Vaglini, Luca Martini 1 marzo 2010 Sommario Il progetto didattico prevede il progetto e l’implementazione di una base di dati che mantiene le informazioni relative ad un sito di social network orientato alla catalogazione di libri. Il progetto prevede la costruzione di un modello ER, la sua trasformazione in un modello logico e la sua ottimizzazione rispetto ad un insieme di operazioni. 1 Specifiche di progetto Lo studente progetti una basi dati che mantenga le informazioni ad un sito di social network orientato alla catalogazione di libri. Esempi di siti di questo tipo sono LibraryThing1 , aNobii2 , Shelfari3 . Di seguito riportiamo una descrizione testuale delle informazioni che devono essere contenute nella base di dati. 1.1 Informazioni richieste 1.1.1 Utenti del sito Al social network si iscrivono degli utenti. Ogni utente deve fornire alcune informazioni obbligatorie (indirizzo di posta elettronica, nome di login, password), e alcune informazioni opzionali (dati anagrafici, autori preferiti, sito web, immagine, etc.). Si supponga che la registrazione al sito sia gratuita, ma sia possibile anche sottoscrivere un account a pagamento che offre servizi aggiuntivi. Per gli account a pagamento sarà necessario memorizzare alcuni dati aggiuntivi (scadenza dell’account, modalità di pagamento preferita). 1.1.2 Libri Gli utenti memorizzano informazioni su i libri posseduti (e non). Per ogni libro si memorizzino le seguenti informazioni: • Titolo • Autore primario • Eventuali autori aggiuntivi • Una valutazione del libro, espressa con un punteggio numerico • Anno e luogo di pubblicazione • Lingua in cui è scritto • Lingua in cui è stato scritto il libro • Codice ISBN • La data di acquisto 1 http://www.librarything.com/ 2 http://www.aNobii.com 3 http://www.shelfari.com/ 1 • Un’immagine della copertina L’utente può anche memorizzare data di inizio e fine lettura. Si suppone che un libro possa essere letto più di una volta. 1.1.3 Opere Ogni libro in realtà non è altro che un’istanza di un concetto più astratto, il concetto di opera. Infatti, diversi libri posseduti da diversi utenti possono essere niente altro che edizioni diverse della stessa opera. Si strutturi il database in maniera che siano memorizzate anche le opere. Per l’opera si intendono memorizzare le seguenti informazioni: • Titolo originale • Anno di prima pubblicazione • Nomi dei personaggi • Luoghi importanti menzionati nel’opera • Premi vinti. Per ogni premio memorizzare anche l’anno (ad esempio Pulitzer, 1998) • Serie di cui il libro fa parte (ad esempio “La città di vetro” è il primo omanzo della cosiddetta “Trilogia di New York”) 1.1.4 Autori Ogni opera è scritta da uno o più autori. Di ogni autore si intendono memorizzare le seguenti informazioni: • Nome canonico (ovvero il nome con cui l’autore è più conosciuto, ad esempio Italo Calvino) • Nome proprio (se differisce dal nome canonico, ad esempio Vamba è lo pseudonimo di Luigi Bertelli) • Eventuali pseudonimi • Data di nascita e morte • Genere (maschile, femminile) • Nazionalità • Premi ottenuti (ad esempio Nobel per la letteratura nel 2004) • Lavori svolti (scrittore, politico, etc.). Si supponga che un autora possa svolgere diversi lavori • Zero o più foto dell’autore 1.1.5 Recensioni e raccomandazioni Ogni utente può recensire uno dei libri che ha aggiunto. La recensione sarà in formato testuale e sarà composta in una certa lingua. Inoltre, ogni utente può effettuare delle raccomandazioni. Una raccomandazione suggerisce un libro ai lettori di un altro libro, ed è corredata da una motivazione (opzionale). Ad esempio si potrebbe raccomandare ai lettori di “Se questo è un uomo” di leggere anche “La tregua”. 1.1.6 Tag e collezioni Ogni utente può contrassegnare un libro da uno o più tag. I libri di ogni utente possono essere organizzati in collezioni. Ogni collezione ha un nome (ad esempio “Libri da leggere”). Un libro può far parte di più collezioni. 2 2 Indicazioni generali Le specifiche fornite sono da considerarsi specifiche minime. Laddove lo studente lo reputi necessario, è possibile ampliare tali specifiche, in modo che la base di dati mantenga anche informazioni attualmente non previste. Il progetto dovrà prevedere le seguenti fasi. 1. Progettare uno schema ER della base di dati, comprensivo di: (a) Nomi di entità e relazioni (b) Elenco di attributi di entità e relazioni (c) Identificatori primari delle entità (d) Cardinalità delle relazioni (e) Eventuali generalizzazioni 2. Produrre lo schema ER derivante dalla traduzione delle eventuali generalizzazioni. 3. Individuare le eventuali ridondanze presenti all’interno dello schema ER. Poiché sono richieste almeno due ridondanze, nel caso in cui queste non siano presenti devono essere introdotte dallo studente. 4. Individuare almeno 8 operazioni da compiere sulla base di dati. È necessario che, per ciascuna ridondanza, venga individuata almeno un’operazione di lettura e almeno un’operazione di scrittura che impatti con essa. Per ciascuna operazione indicare la frequenza giornaliera con cui tale operazione viene effettuata 5. Compilare la tavola dei volumi che contenga il numero di istanze per ciascuna entità e relazione presente nello schema ER. 6. Compilare la tavola degli accessi per tutte le operazioni individuate al punto 4. Per le operazioni la cui tavola degli accessi cambia in base alla presenza o meno di una ridondanza, lo studente deve compilare: (a) la tavola degli accessi in presenza della ridondanza (b) la tavola degli accessi in assenza della ridondanza. 7. Decidere se lasciare o meno ciascuna ridondanza, analizzando le tavole degli accessi delle operazioni che hanno a che fare con essa. 8. Tradurre lo schema ER ottenuto al punto precedente in tabelle, specificando per ciascuna tabella (a) Nome (b) Attributi (con relativo tipo) (c) Identificatori primari. 9. Specificare dettagliatamente dei vincoli di integrità referenziale che devono essere inseriti all’interno della base di dati al fine di garantirne la consistenza. 10. Controllare se le tabelle ottenute sono in Terza Forma Normale o Forma Normale di Boyce-Codd. Nel caso in cui alcune tabelle non siano in Forma Normale di Boyce-Codd decomporle (laddove è possibile) in modo da portare tutta la base di dati in Forma Normale di Boyce-Codd 11. Creare uno script MySQL che: (a) Crea il database (b) Crea tutte le tabelle, così come sono state individuate ai punti precedenti (c) Popoli le tabelle, inserendo almeno 5 tuple per ciascuna tabella. Tutte le singole fasi dovranno essere corredate da un’apposita documentazione che metta in evidenza le scelte effettuate dagli studenti durante la progettazione. 3