\chapter{La base di dati} \label{Relazionale}

Una \textbf{base di dati} è una collezione di dati che descrivono le
attività di una o più organizzazioni. Un sistema di gestione di basi
di dati o \textbf{DBMS} è un software progettato per gestire grandi
collezioni di dati. \par L'utilizzo di un DBMS presenta molti
vantaggi:
\begin{description}
  \item[Indipendenza dei dati] I programmi applicativi sono
  all'oscuro su come i dati siano fisicamente organizzati.
  \item[Accesso efficiente ai dati] I DBMS usano tecniche avanzate
  per recuperare i dati in maniera efficiente.
  \item[Integrità e sicurezza dei dati] Il DBMS può garantire
  vincoli di integrità e sicurezza.
  \item[Amministrazine dei dati] I dati possono essere amministrati
  da sezioni apposite, in modo da diminuire la ridondanza e
  facilitare il reperimento.
  \item[Accesso concorrente e recupero da crash] Il DBMS fa in modo
  che ogni utente pensi di accedere ai dati in maniera atomica.
  Fornisce anche delle funzionalità per il recovery
  \item[Riduzione del tempo di sviluppo delle applicazioni] Un DBMS
  fornisce primitive comuni a molte applicazioni.
\end{description}
Tuttavia vi sono situazioni in cui non è consigliabile usare un
DBMS, come esempio nel caso in cui vi siano vincoli di tempo ben
definiti oppure quando una qualsiasi applicazione debba interagire
con i dati in modo diretto.
\\\\Un \textbf{modello di dati} è una collezione di costrutti che
rappresentano dati ad alto livello. Esso, inoltre, nasconde molti
dei dettagli di memorizzazione a basso livello. La maggior parte dei
sistemi di gestione di basi di dati sono basati sul \textbf{modello
di dati relazionale}. Una base di dati diventa allora una collezione
di di una o più relazioni, dove per relazione si intende una tabella
con righe e colonne. Una relazione è composta da due elementi: uno
\textbf{schema relazionale} e l' \textbf{istanza della relazione}.
L'istanza della relazione è una tabella, mentre lo schema
relazionale descrive le intestazioni delle colonne di essa. \par Lo
schema specifica il nome della relazione, il nome e il dominio di
ciascun campo. L'istanza, invece, è un'insieme di tuple (o record).
Ciascuna tupla ha, a sua volta, lo stesso numero di campi dello
schema relazionale. \par Il modello Entità-Relazione ci permette di
descrivere i dati coinvolti in termini di oggetti e delle loro
relazioni. Esso ci consente di passare da una descrizione informale
ad una più precisa e maggiormente dettagliata che può essere
implementata in un DBMS.

\section{Analisi dei requisiti} Il primo step si è concentrato
sulla raccolta dei requisiti. Ciò significava comprendere come i
dati di cui si dispone siano strutturati e quali di essi
memorizzare. \par Purtroppo la documentazione sulla struttura della
bibliogradia DBLP risulta pressochè assente. Si è quindi deciso di
analizzare il documento DTD\footnote{\emph{Document Type
Definition}: defisce le componenti ammesse nella costruzione di un
documento XML.} al fine di individuare record e relazioni tra essi.
\subsubsection{Document Type Definition}
In questa sezione verrà illustrato come l'analisi del \emph{Document
Type Definition} sia stata rilevante per la raccolta dei requisiti.

\begin{verbatim}
<!ELEMENT dblp (article|inproceedings|proceedings|book|incollection|
                phdthesis|mastersthesis|www)*>
\end{verbatim}

Il codice precedente indica che gli elementi principali della
bibliografia sono: Article, Inproceedings, Proceedings, Book,
Incollection, Phdthesis, Mastersthesis, Www.

\begin{verbatim}
<!ENTITY % field "author|editor|title|booktitle|pages|year|address
|journal|volume|number|month|url|ee|cdrom|cite|publisher|note|crossref
|isbn|series|school|chapter">
\end{verbatim}

Indica che ci sono una serie di Entity\footnote{Un token ENTITY
serve a dichiarare un'entità, cioè una rappresentazione simbolica di
un'informazione.}. Tali entità memorizzano i dati relativi ad uno
specifico elemento. La fase successiva è stata quella di individuare
gli elementi e in che modo essi siano associati alle varie entità.

\begin{verbatim}
<!ELEMENT article       (%field;)*>
<!ATTLIST article
                        key CDATA #REQUIRED
                        reviewid CDATA #IMPLIED
                        rating CDATA #IMPLIED
                        mdate CDATA #IMPLIED
>
\end{verbatim}

Il codice precedente mostra la struttura di un record Article. Esso
può contenere un numero arbitrario delle entità precedentemente
descritte. In più, ci sono quattro attributi: key, reviewid, rating
ed mdate, tutti di tipo CDATA (lettere o numeri). Segue la
dichiarazione delle entità:

\begin{verbatim}
<!ELEMENT title     (%titlecontents;)*>
<!ELEMENT booktitle (#PCDATA)>
<!ELEMENT pages     (#PCDATA)>
<!ELEMENT year      (#PCDATA)>
<!ELEMENT journal   (#PCDATA)>
<!ELEMENT volume    (#PCDATA)>
<!ELEMENT number    (#PCDATA)>
<!ELEMENT month     (#PCDATA)>
<!ELEMENT url       (#PCDATA)>
<!ELEMENT ee        (#PCDATA)>
<!ELEMENT cdrom     (#PCDATA)>
<!ELEMENT cite      (#PCDATA)>
<!ELEMENT school    (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ATTLIST publisher
                    href CDATA #IMPLIED
>
<!ELEMENT note      (#PCDATA)>
<!ATTLIST cite
                    label CDATA #IMPLIED
>
<!ELEMENT crossref  (#PCDATA)>
<!ELEMENT isbn      (#PCDATA)>
<!ELEMENT chapter   (#PCDATA)>
<!ELEMENT series    (#PCDATA)>
<!ATTLIST series
                    href CDATA #IMPLIED
>
\end{verbatim}
Tale dichiarazione asserisce che i valori contenuti nelle entità
 sono di tipo PCDATA. \par Inoltre viene
descritta la struttura di due entità particolari: \emph{cite} e
\emph{publisher}. Entrambe contengono un ulteriore attributo di tipo
CDATA. \par Il significato è il seguente:
\begin{itemize}
  \item \emph{cite}: contiene l'attributo \emph{label}, un'etichetta per
  ragioni interne alla bibliografia DBLP.
  \item \emph{publisher}: contiene l'attributo \emph{href}, link ad
  una entry che contiene dati sulla casa editrice.
\end{itemize}

Esempio di record che contiene elementi di tipo Cite:

\begin{verbatim}
</book> - <book mdate="2002-01-03" key="books/aw/AbiteboulHV95">
  <author>Serge Abiteboul</author>
  <author>Richard Hull</author>
  <author>Victor Vianu</author>
  <title>Foundations of Databases.</title>
  <publisher>Addison-Wesley</publisher>
  <year>1995</year>
  <isbn>0-201-53771-0</isbn>
  <cdrom>AHV/Toc.pdf</cdrom>
  <cite label="Abi88">conf/icdt/Abiteboul88</cite>
  <cite label="Abi89">journals/ipl/Abiteboul89</cite>
  <cite label="Abr74">conf/ds/Abrial74</cite>
  <cite label="ABU79">journals/tods/AhoBU79</cite>
  <cite label="ABW88">books/mk/minker88/AptBW88</cite>
  <cite label="AC78">conf/vldb/AroraC78</cite>
  <cite label="AC89">conf/stoc/AfratiC89</cite>
  <cite label="ACO85">journals/tods/AlbanoCO85</cite>
  <cite label="ACY91">conf/pods/AfratiCY91</cite>
</book>
\end{verbatim}
Esempio di record che contiene un'elemento di tipo Publisher:
\begin{verbatim}
</book> - <book mdate="2002-01-03" key="books/aw/ArnoldG96">
  <author>Ken Arnold</author>
  <author>James Gosling</author>
  <title>The Java Programming Language</title>
  <publisher href="db/publishers/aw.html">Addison-Wesley</publisher>
  <year>1996</year>
  <isbn>0-201-63455-4</isbn>
</book>
\end{verbatim}

\section{Progettazione concettuale della base di dati} Le
informazioni raccolte nella fase di analisi dei requisiti vengono
utilizzate per elaborare una descrizione ad alto livello dei dati da
memorizzare. \par Per sviluppare tale fase è stato usato il modello
Entità-Relazione. Lo schema concettuale è riportato in
\figurename~\ref{fig:conc}.

\subsection{Le entità} Il primo passo è stato quello di determinare
le entità coinvolte. \par Un'entità è un oggetto del mondo reale che
si distingue da altri oggetti; essa viene descritta servendosi di un
insieme di attributi. \par Sulla base delle informazioni raccolte
nella fase di analisi, sono state, successivamente individuate le
entità con i relativi attributi. \par Gli attributi sottolineati
rappresentano le chiavi delle relazioni che li contengono.
\begin{description}
  \item[Authors] Memorizza i nomi degli attori coinvolti nelle
  pubblicazioni. Si è deciso di considerare un'entità (rispetto al documento XML in cui è considerata
  un attributo) proprio perchè un'autore può partecipare a più pubblicazioni.
  \begin{itemize}
    \item \underline{\emph{name}} : Elemento \emph{author} del record XML.
  \end{itemize}


  \item[Editors] Nomi degli editori.
  \begin{itemize}
    \item \underline{\emph{name}} : Elemento \emph{editor} del record XML.
  \end{itemize}

  \item[Publishers] Case editrici e relativo
  indirizzo.
  \begin{itemize}
    \item \underline{\emph{name}} : Elemento \emph{publisher} del record XML.
    \item \emph{href} : Attributo \emph{href} del record XML.
    \item \emph{address} : Elemento \emph{address} del record XML.
  \end{itemize}

  \item[Articles] Memorizza gli elementi di tipo Article.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record
    XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{reviewid} : Attributo \emph{reviewid} del record XML.
    \item \emph{rating} : Attributo \emph{rating} del record XML.
    \item \emph{title} : Elemento \emph{title} del record XML.
    \item \emph{url} : Elemento \emph{url} del record XML.
    \item \emph{month} : Elemento \emph{month} del record XML.
    \item \emph{year} : Elemento \emph{year} del record XML.
    \item \emph{crossref} : Elemento \emph{crossref} del record XML.
    \item \emph{ee} : Elemento \emph{ee} del record XML.
    \item \emph{note} : Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Journal] Memorizza i dati di una rivista  nella quale un
  determinato articolo è stato pubblicato.
  \begin{itemize}
    \item \underline{\emph{name}} :  Elemento \emph{journal} del record XML.
    \item \underline{\emph{volume}} :  Elemento \emph{volume} del record XML.
    \item \underline{\emph{number}} :  Elemento \emph{number} del record XML.
  \end{itemize}

  \item[Proceedings] Memorizza gli elementi di tipo Proceeding.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{url} :  Elemento \emph{url} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{isbn} :  Elemento \emph{isbn} del record XML.
    \item \emph{ee} :  Elemento \emph{ee} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Inproceedings] Memorizza gli elementi di tipo Inproceeding.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{url} :  Elemento \emph{url} del record XML.
    \item \emph{crossref} :  Elemento \emph{crossref} del record XML.
    \item \emph{booktitle} :  Elemento \emph{booktitle} del record XML.
    \item \emph{pages} :  Elemento \emph{pages} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{cdrom} :  Elemento \emph{cdrom} del record XML.
    \item \emph{ee} :  Elemento \emph{ee} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Books] Memorizza gli elementi di tipo Book.
    \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{isbn} :  Elemento \emph{isbn} del record XML.
    \item \emph{cdrom} :  Elemento \emph{cdrom} del record XML.
    \item \emph{url} :  Elemento \emph{url} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Incollections] Memorizza gli elementi di tipo Incollection.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{crossref} :  Elemento \emph{crossref} del record XML.
    \item \emph{booktitle} :  Elemento \emph{booktitle} del record XML.
    \item \emph{chapter} :  Elemento \emph{chapter} del record XML.
    \item \emph{pages} :  Elemento \emph{pages} del record XML.
    \item \emph{url} :  Elemento \emph{url} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{ee} :  Elemento \emph{ee} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Thesis] Essendo le tesi di laurea e di dottorato sottoclassi dell' entità
  Thesis, si è preferito effettuare una generalizzazione.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{school} :  Elemento \emph{school} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Master\_Thesis] Memorizza gli elementi di tipo Master\_thesis, generalizzato in Thesis.

  \item[Phd\_Thesis] Memorizza gli elementi di tipo Phd\_thesis, generalizzato in Thesis.

  \item[WWW] Memorizza gli elementi di tipo www.
  \begin{itemize}
    \item \underline{\emph{id}} : Attributo \emph{key} del record XML.
    \item \emph{mdate} : Attributo \emph{mdate} del record XML.
    \item \emph{title} :  Elemento \emph{title} del record XML.
    \item \emph{url} :  Elemento \emph{url} del record XML.
    \item \emph{month} :  Elemento \emph{month} del record XML.
    \item \emph{year} :  Elemento \emph{year} del record XML.
    \item \emph{note} :  Elemento \emph{note} del record XML.
  \end{itemize}

  \item[Series] Memorizza il nome di una Serie in cui
  gli atti di una conferenza Proceeding possono essere pubblicati.
  \begin{itemize}
    \item \underline{\emph{name}} :  Elemento \emph{series} del record XML.
  \end{itemize}

  \item[Cites] Un elemento può citare anche altre pubblicazioni. Di conseguenza
  è stata creata un'entità Cites che contiene le chiavi degli
  elementi citati e il testo corrispondente.
  \begin{itemize}
    \item \underline{\emph{label}} : Attributo \emph{label} del record XML.
    \item \emph{text} : Elemento \emph{text} del record XML.
  \end{itemize}

\end{description}

\subsection{Le relazioni} Una relazione è un' associazione tra due
o più entità. Nello schema E-R ad esempio, constatiamo che
un'articolo è contenuto in una rivista mediante la relazione
\emph{In}. \par Una relazione,inoltre, può anche avere attributi
descrittivi. Essi vengono utilizzati per registrare informazioni
sulla relazione piuttosto che sulle entità partecipanti.Ad esempio,
la relazione \emph{In} ha l'attributo \emph{Pages}, quest'ultimo
indica le pagine della rivista in cui è contenuto quel determinato
articolo. \par Sulla base delle informazioni raccolte nella fase di
analisi sono state individuate le seguenti relazioni:
\begin{description}
  \item[In] - \textcolor[rgb]{0.00,0.00,1.00}{Journal (0,n) \ensuremath{\leftrightarrow} (1,1) Articles} : asserisce che ogni articolo è contenuto in una specifica
  rivista in determinate pagine. Ogni rivista, in determinate pagine di una specifica rivista contiene quindi uno solo articolo.
  \begin{itemize}
    \item \emph{pages} :  Elemento \emph{pages} del record XML.
  \end{itemize}

  \item[In\_a] - \textcolor[rgb]{0.00,0.00,1.00}{Proceedings (0,1) \ensuremath{\leftrightarrow} (0,1) Series} : asserisce che
  una conferenza può essere contenuta in uno specifico volume di una determinata serie. Ciascun volume di una serie contiene una sola conferenza.
  \begin{itemize}
    \item \emph{volume} :  Elemento \emph{volume} del record XML.
  \end{itemize}

  \item[Cited\_1] - \textcolor[rgb]{0.00,0.00,1.00}{Cites (1,1) \ensuremath{\leftrightarrow} (0,n) Books} : asserisce che un libro può avere un numero indeterminato di
  citazioni, mentre ogni citazione è riferita ad uno specifico libro.

  \item[Cited\_2] - \textcolor[rgb]{0.00,0.00,1.00}{Cites (1,1) \ensuremath{\leftrightarrow} (0,n) Proceedings} : asserisce che una conferenza può avere un numero indeterminato di
  citazioni, mentre ogni citazione è riferita ad una specifica conferenza.

  \item[Published\_1] - \textcolor[rgb]{0.00,0.00,1.00}{Proceedings (0,1) \ensuremath{\leftrightarrow} (0,n) Publishers} : asserisce che gli atti di una conferenza
  possono essere pubblicati da una sola casa editrice. D'altro canto, una casa editrice può pubblicare un numero indeterminato di atti di conferenze.

  \item[Published\_2] - \textcolor[rgb]{0.00,0.00,1.00}{Books (0,1) \ensuremath{\leftrightarrow} (0,n) Publishers} : asserisce che un libro può essere pubblicato da una sola casa
  editrice,
  ma, una casa editrice può pubblicare un numero indeterminato di libri.

  \item[Edited\_1] - \textcolor[rgb]{0.00,0.00,1.00}{Proceedings (0,n) \ensuremath{\leftrightarrow} (0,n) Editors} : Asserisce che una conferenza può
  essere editata da un numero indeterminato di editori, e che un'editore può editare un numero indeterminato di conferenze.

  \item[Edited\_2] - \textcolor[rgb]{0.00,0.00,1.00}{Incollections (0,n) \ensuremath{\leftrightarrow} (0,n) Editors} : Asserisce che la parte di un libro può
  essere editato da un numero indeterminato di editori, e che un'editore può editare un numero indeterminato di parti di libri.

  \item[Edited\_3] - \textcolor[rgb]{0.00,0.00,1.00}{Books (0,n) \ensuremath{\leftrightarrow} (0,n) Editors} : Asserisce che un libro può
  essere editato da un numero indeterminato di editori, e che un'editore può editare un numero indeterminato di libri.

  \item[By\_1] - \textcolor[rgb]{0.00,0.00,1.00}{Articles (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che ogni articolo deve avere almeno
  un'autore. Ogni autore può partecipare ad un numero indeterminato di articoli.

  \item[By\_2] - \textcolor[rgb]{0.00,0.00,1.00}{WWW (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che ogni sito web appartiene
  almeno ad un'autore. Ogni autore può possedere un numero indeterminato di siti web.

  \item[By\_3] - \textcolor[rgb]{0.00,0.00,1.00}{Books (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che ogni libro deve avere almeno
  un'autore. Ogni autore può partecipare ad un numero indeterminato di libri.

  \item[By\_4] - \textcolor[rgb]{0.00,0.00,1.00}{Incollections (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che un'entità Incollection deve avere almeno
  un'autore. Ogni autore può partecipare ad un numero indeterminato di entità Incollection.

  \item[By\_5] - \textcolor[rgb]{0.00,0.00,1.00}{Thesis (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che ogni tesi deve avere almeno
  un'autore. Ogni autore può partecipare ad un numero indeterminato di tesi.

  \item[By\_6] - \textcolor[rgb]{0.00,0.00,1.00}{Inproceedings (1,n) \ensuremath{\leftrightarrow} (0,n) Authors} : Asserisce che ogni articolo discusso in una conferenza deve avere almeno
  un'autore. Ogni autore può partecipare ad un numero indeterminato di articoli discussi in una conferenza.
\end{description}

\begin{figure}[htpd]
  \centering
  \includegraphics[width = 1.0 \textwidth]{figures/Schema_conc.eps}
  \caption{Schema concettuale}\label{fig:conc}
\end{figure}

\subsection{Osservazioni} Durante la progettazione concettuale sono
state valutate possibili scelte alternative. Alcune si esse
prevedevano accorgimenti che avrebbero dato maggiore qualità alla
base di dati. \par Una proposta era quella di mettere in relazione
l'entità \emph{Incollections} con l'entità \emph{Book} mediante la
relazione \emph{In\_book}. \par In questo modo ogni tupla di
Incollection era legata, mediante la relazione \emph{In\_Book}, al
libro che effettivamente la contiene. Ciò avrebbe reso molto più
naturale la definizione di Incollection. Inoltre, alcuni attributi
di Incollections come \textbf{Bookname}, sarebbero stati superflui,
e avrebbero diminuito di conseguenza la ridondanza dei dati.\par Si
è pensato, quindi, di ricorrere all'uso dell'elemento
\emph{crossref}. Mediante un'analisi approfondita dei dati, è emerso
che l'elemento crossref non è sempre presente. Di conseguenza non è
sempre possibile la referenziazione. \par Un'altra alternativa era
quella di cercare il libro relativo ad un'elemento Incollection, ciò
è possibile sfruttando la caratteristica: l'attributo
\emph{Booktitle} dell'entità Incollection corrisponde all'attributo
\emph{Title} dell'entità Book. \par Ciò è molto dispendioso dal
punto di vista computazionale, ed è impossibile effettuare query in
un documento sql\footnote{Nel caso in cui si scelga che l'output sia
il documento di istruzioni sql}.

\section{Progettazione logica della base di dati} In questa fase
viene scelto il DBMS per implementare il progetto, e convertire la
progettazione concettuale in uno schema del modello del DBMS scelto.
Il risultato è uno \textbf{schema logico} nel modello di dati
relazionale.
\par Ogni insieme di entità viene tradotta in una relazione (o tabella) nel
seguente modo: ogni attributo di un insieme di entità diventa un
attributo della tabella. Un insieme di relazioni, così come le
entità, viene tradotto in una relazione del modello relazionale. Gli
attributi della relazione includono:
\begin{itemize}
  \item Gli attributi della chiave primaria di ciascun insieme di
  entità partecipante, come campi di chiave esterne.
  \item Gli attributi descrittivi dell'insieme di relazioni.
\end{itemize}

\subsection{Le relazioni} Di seguito verranno elencate le relazioni
della base di dati con relative istruzioni SQL per la loro
creazione.
\begin{description}
  \item[Authors(\underline{id}, \underline{name})] Poichè l'entità \emph{Authors} è
  composta da un solo attributo, è stato scelto di integrare le relazioni
  \emph{By\_1, By\_2, By\_3, By\_4, By\_5, By\_6} direttamente nella
  relazione \emph{Authors}. Il vincolo di integrità imposto dalle
  cardinalità è rispettato per il fatto che sia \textbf{id} che \textbf{name} sono
  chiave per la relazione. In questo modo possono esistere 2 tuple
  con lo stesso autore, ma che differiscono per il campo id
  (un autore è responsabile di più pubblicazioni). Inoltre, una
  pubblicazione può avere più autori (stesso valore \textbf{id} ma diverso valore \textbf{name}). Non è invece possibile avere
  tuple il cui campo \textbf{id} è diverso da \emph{null} ma il campo \textbf{name} è
  \emph{null} (significherebbe che una pubblicazione non ha autori,
  violando quindi la cardinalità). Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE authors(id VARCHAR(150),
                       name VARCHAR(100),
                       PRIMARY KEY (id, name))
                       ENGINE=InnoDB
  \end{verbatim}

  \item[Editors(\underline{id}, \underline{name})] Anche per la
  relazione Editors è stato scelto di integrare le relazioni
  \emph{Edited\_1}, \emph{Edited\_2} ed \emph{Edited\_3} direttamente nella relazione
  stessa. Le considerazioni sul rispetto dei vincoli di integrità
  sono identici al caso della relazione Authors, e non verranno
  discussi. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE editors(id VARCHAR(150),
                        name VARCHAR(100),
                        PRIMARY KEY (id, name))
                        ENGINE=InnoDB
  \end{verbatim}

  \item[Articles(\underline{id}, mdate, reviewid, rating, title, url, month, year, crossref, ] \textbf{ee, note)}
  Tabella per la memorizzazione di articoli. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE articles(id VARCHAR(150),
                        mdate VARCHAR(20),
                        reviewid VARCHAR(20),
                        rating VARCHAR(10),
                        title VARCHAR(400),
                        url VARCHAR(100),
                        month VARCHAR(10),
                        year VARCHAR(10),
                        crossref VARCHAR(100),
                        ee VARCHAR(100),
                        note VARCHAR(20),
                        PRIMARY KEY(id))
                        ENGINE=InnoDB
  \end{verbatim}

  \item[Proceedings(\underline{id}, mdate, title, url, month, year, isbn, ee, note)]
  Tabella per la memorizzazione di elementi Proceeding. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE proceedings(id VARCHAR(150),
                           mdate VARCHAR(20),
                           title VARCHAR(500),
                           url VARCHAR(200),
                           month VARCHAR(10),
                           year VARCHAR(10),
                           isbn VARCHAR(100),
                           ee VARCHAR(100),
                           note VARCHAR(20),
                           PRIMARY KEY(id))
                           ENGINE=InnoDB
  \end{verbatim}

  \item[Inproceedings(\underline{id}, mdate, title, url, crossref, booktitle, pages, month, ] \textbf{year, cdrom, ee, note)}
  Tabella per la memorizzazione di elementi Inproceeding. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE inproceedings(id VARCHAR(150),
                             mdate VARCHAR(20),
                             title VARCHAR(400),
                             url VARCHAR(200),
                             crossref VARCHAR(30),
                             booktitle VARCHAR(250),
                             pages VARCHAR(10),
                             month VARCHAR(10),
                             year VARCHAR(10),
                             cdrom VARCHAR(20),
                             ee VARCHAR(100),
                             note VARCHAR(20),
                             PRIMARY KEY(id))
                             ENGINE=InnoDB
  \end{verbatim}

  \item[Incollections(\underline{id}, mdate, title, crossref, booktitle, chapter, pages, url, ] \textbf{month, year, ee, note)}
  Tabella per la memorizzazione di elementi Incollection. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE incollections(id VARCHAR(150),
                             mdate VARCHAR(20),
                             title VARCHAR(400),
                             crossref VARCHAR(100),
                             booktitle VARCHAR(250),
                             chapter VARCHAR(10),
                             pages VARCHAR(10),
                             url VARCHAR(200),
                             month VARCHAR(10),
                             year VARCHAR(10),
                             ee VARCHAR(100),
                             note VARCHAR(300),
                             PRIMARY KEY(id))
                             ENGINE=InnoDB
  \end{verbatim}

  \item[Master\_Thesis(\underline{id}, mdate, title, school, month, year, note)]
  Tabella per la memorizzazione di tesi di laurea. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE master_thesis(id VARCHAR(150),
                             mdate VARCHAR(20),
                             title VARCHAR(400),
                             school VARCHAR(150),
                             month VARCHAR(10),
                             year VARCHAR(10),
                             note VARCHAR(300),
                             PRIMARY KEY(id))
                             ENGINE=InnoDB
  \end{verbatim}

  \item[Phd\_Thesis(\underline{id}, mdate, title, school, month, year, note)]
  Tabella per la memorizzazione di tesi di dottorato. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE phd_thesis(id VARCHAR(150),
                          mdate VARCHAR(20),
                          title VARCHAR(400),
                          school VARCHAR(150),
                          month VARCHAR(10),
                          year VARCHAR(10),
                          note VARCHAR(300),
                          PRIMARY KEY(id))
                          ENGINE=InnoDB
  \end{verbatim}

  \item[Books(\underline{id}, mdate, title, isbn, cdrom, url, month, year, note)]
  Tabella per la memorizzazione di libri. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE books(id VARCHAR(150),
                     mdate VARCHAR(20),
                     title VARCHAR(400),
                     isbn VARCHAR(20),
                     cdrom VARCHAR(20),
                     url VARCHAR(200),
                     month VARCHAR(10),
                     year VARCHAR(10),
                     note VARCHAR(300),
                     PRIMARY KEY(id))
                     ENGINE=InnoDB
  \end{verbatim}

  \item[Publishers(\underline{name}, address, href)]
  Tabella per la memorizzazione delle case editrici. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE publishers(name VARCHAR(100),
                          address VARCHAR(50),
                          href VARCHAR(50),
                          PRIMARY KEY(name))
                          ENGINE=InnoDB
  \end{verbatim}

  \item[WWW(\underline{id}, mdate, title, url, month, year, note)]
  Tabella per la memorizzazione di elementi www. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE www(id VARCHAR(150),
                   mdate VARCHAR(20),
                   title VARCHAR(400),
                   url VARCHAR(200),
                   month VARCHAR(10),
                   year VARCHAR(10),
                   note VARCHAR(300),
                   PRIMARY KEY(id))
                   ENGINE=InnoDB
  \end{verbatim}

  \item[Cites(\underline{id}, \underline{label}, text)]
  E' stato scelto di integrare le relazioni \emph{Cited\_1} e \emph{Cited\_2} dello schema E-R direttamente nella tabella Cites. L
  E stato aggiunto un'ulteriore campo, che corrisponde all'attributo
  \textbf{id} delle relazioni \emph{Books} e \emph{Proceedings}. Le
  cardinalità sono rispettate dalla condizione che sia \textbf{id} che \textbf{label}
  sono chiave per la relazione. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE cites(id VARCHAR(150),
                     label VARCHAR(100),
                     text VARCHAR(300),
                     PRIMARY KEY(id, label))
                     ENGINE=InnoDB
  \end{verbatim}

  \item[Published\_1(\underline{id}, \underline{name})]
  Tabella per la memorizzazione della relazione \emph{Published\_1}. Sia \textbf{id} che \textbf{name} sono chiave per la relazione.
  Il campi \textbf{id} referenzia Proceedings mentre il campo \textbf{name} referenzia publisher. In questo modo viene garantito il vincolo di integrità
  imposto dalle cardinalità: gli elementi di una conferenza possono essere pubblicati da una
  sola casa editrice. Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE published_1(id VARCHAR(150),
                           name VARCHAR(100),
                           PRIMARY KEY (id, name),
                           FOREIGN KEY (name)
                           REFERENCES Publishers(name),
                           FOREIGN KEY (id)
                           REFERENCES Proceedings(id))
                           ENGINE=InnoDB
  \end{verbatim}

  \item[Published\_2(\underline{id}, \underline{name})]
  Tabella per la memorizzazione della relazione \emph{Published\_2}.
  Stesse considerazioni della tabella Published\_1.
  Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE published_2(id VARCHAR(150),
                           name VARCHAR(100),
                           PRIMARY KEY (id, name),
                           FOREIGN KEY (name)
                           REFERENCES Publishers(name),
                           FOREIGN KEY (id)
                           REFERENCES Books(id))
                           ENGINE=InnoDB
  \end{verbatim}

  \item[In\_a(\underline{id}, \underline{name}, volume)]
  Poichè l'entità \emph{Series} ha un solo attributo, è stato optato di integrare l'entità
  in questione con la relazione \emph{In\_a}. Le chiavi della relazione sono \emph{id} (contiene la chiave
  di un'entry \emph{Proceedings}) e \emph{name} (nome della serie).
  Le cardinalità sono rispettate poichè gli atti di una conferenza sono contenuti in un volume di una
  sola serie (non possono esistere due entry con stessi valori di id e name).
  Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE in_a(id VARCHAR(150),
                    name VARCHAR(100),
                    volume VARCHAR(20),
                    PRIMARY KEY (id, name),
                    FOREIGN KEY (id)
                    REFERENCES Proceedings(id),
                    FOREIGN KEY (name)
                    REFERENCES Series(name))
                    ENGINE=InnoDB
  \end{verbatim}

  \item[In\_1(\underline{id}, \underline{name}, \underline{volume}, \underline{number}, pages)]
  Anche in questo caso è stato scelto di integrare l'entità
  \emph{Journal} con la relazione \emph{In\_1}. Tale scelta è
  motivata dal fatto che la relazione tra Journals e Articlesè 1 ad 1, ciò significa che
  nella relazione In\_1 non esisteranno 2 tuple con stessi valori. Di conseguenza, il vantaggio
  di modellare una relazione dello schema E-R come tabella veniva a
  cadere. Modellare \textbf{id}, \textbf{name}, \textbf{volume} e \textbf{number} come chiavi, implica che,
  in determinate pagine di un volume di una rivista è contenuto un solo
  articolo (rispettando quindi le cardinalità). Comandi SQL per la creazione della tabella:
  \begin{verbatim}
  CREATE TABLE in_1(id VARCHAR(150),
                    name VARCHAR(150),
                    volume VARCHAR(20),
                    number VARCHAR(30),
                    pages VARCHAR(30),
                    PRIMARY KEY (id, name, volume, number))
                    ENGINE=InnoDB
  \end{verbatim}

\end{description}
