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