\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 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.

\subsection{Le relazioni} Il primo passo è stato quello di determinare
le relazioni coinvolte.
\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[dblp\_author\_ref\_new] Memorizza i nomi degli attori coinvolti nelle
  pubblicazioni. Essi possono essere autori od editori.
  \begin{itemize}
    \item \underline{\emph{id}} : Chiave interna al database, per la
    relazione dblp\_pub\_new.
    \item \underline{\emph{author}} : Nome dell'autore.
    \item \emph{editor} : Valore booleano. Se posto a
    TRUE indica che un'autore è editore per una pubblicazione.
    \item \emph{author\_num} : L'indice dell'autore in
    una pubblicazione (ad esempio, 2 se l'autore compare al secondo
    posto nel file xml).
  \end{itemize}

  \item[dblp\_pub\_new] Memorizza tutte le pubblicazioni della bibliografia DBLP.
  \begin{itemize}
    \item \underline{\emph{id}} : chiave incrementale interna al database.
    \item \emph{dblp\_key} : chiave interna al file xml della
    bibliografia DBLP.
    \item \emph{title} : titolo della pubblicazione.
    \item \emph{source} : Nome della sorgente della pubblicazione
    (ad esempio, Journal per un Articolo, Book per Incollection...).
    \item \emph{source\_id} : Riferimento alla pubblication source.
    \item \emph{series} : Serie in cui un libro od una conferenza è
    contenuta.
    \item \emph{year} : Anno di pubblicazione.
    \item \emph{type} : Tipo di pubblicazione: Article,
    Incollection, Inproceedings, Proceedings, Book, WWW, PhdThesis e
    MasterThesis.
    \item \emph{volume} : volume della sorgente in cui una
    pubblicazione è contenuta.
    \item \emph{number\_} : Numero della sorgente in cui una
    pubblicazione è contenuta.
    \item \emph{month} : Mese di pubblicazione.
    \item \emph{pages} : Pagine della sorgente in cui una
    pubblicazione è contenuta
    \item \emph{ee} : Collegamento all'edizione elettronica della
    pubblicazione.
    \item \emph{ee\_PDF} : Collegamento al file pdf della
    pubblicazione.
    \item \emph{url} : Collegamento interno alla bibliografia.
    \item \emph{publisher} : Casa editrice per una pubblicazione,
    istituzione universitaria per le tesi.
    \item \emph{isbn} : Numero isbn delle pubblicazioni di tipo
    Proceeding e Book.
    \item \emph{crossref} : Riferimento al campo dblp\_key di
    un'altra pubblicazione.
    \item \emph{titleSignature} : Titolo della pubblicazione senza
    spazi.
    \item \emph{doi} : DOI della pubblicazione.
    \item \emph{mdate} : La data dell'ultima modifica.
  \end{itemize}

  \item[dblp\_ref\_new] Nella bibliografia DBLP, una pubblicazione
  può citare un numero illimitato di pubblicazioni (Proceedings cita
  gli articoli discussi in tale conferenza). Questa relazione
  mantiene le corrispondenze.
  \begin{itemize}
    \item \underline{\emph{id}} : Chiave interna al database.
    \item \underline{\emph{ref\_id}} : Chiave DBLP delle pubblicazioni citate.
  \end{itemize}
\end{description}

\section{Istruzioni per la crezione delle tabelle} Verranno ora
riportare le istruzioni sql per la creazione delle tabelle della
base di dati. Tali istruzioni si riferiscono al database Mysql.

\begin{verbatim}
DROP TABLE IF EXISTS `dblp_author_ref_new`;
CREATE TABLE
`dblp_author_ref_new` (
  `id` int(8) NOT NULL COMMENT 'Our internal database key in
    dblp_pub_new',
  `author` varchar(70) NOT NULL default '' COMMENT 'The
    author name',
  `editor` int(1) NOT NULL default '0' COMMENT 'Bool being
    true when the author is editor of the book',
  `author_num` int(3) NOT NULL COMMENT 'The author number
    (from the implicit order in the dblp xml file)',
  PRIMARY KEY  (`id`,`author`),
  KEY `dblp_auth_id` (`id`),
  KEY `dblp_author_names` (`author`),
  FULLTEXT KEY `dblp_author_ind_full` (`author`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='References between
publication/collection and authors';



DROP TABLE IF EXISTS `dblp_pub_new`; CREATE TABLE `dblp_pub_new` (
  `id` int(8) NOT NULL auto_increment COMMENT 'The internal key
    in the database',
  `dblp_key` varchar(150) NOT NULL default '' COMMENT 'The key
    in the xml file',
  `title` longtext NOT NULL COMMENT 'Title of the publication',
  `source` varchar(150) default NULL COMMENT 'Name to the
    publication source, i.e. Conference, Journal, etc.; for
    collections, the booktitle is stored here',
  `source_id` varchar(50) default NULL COMMENT 'Reference to the
    publication source (first part of the dblp_key)',
  `series` varchar(100) default NULL COMMENT 'Reference to the
    publication series (books and proceedings only)',
  `year` int(4) unsigned NOT NULL default '0' COMMENT 'The year
    of the publication',
  `type` varchar(20) NOT NULL default '' COMMENT 'Type of
    publication, i.e. article, proceedings, etc.',
  `volume` varchar(50) default NULL COMMENT 'Volume of the source
    where the publication was published',
  `number` varchar(20) default NULL COMMENT 'Number of the source
    where the publication was published',
  `month` varchar(30) default NULL COMMENT 'Month(s) when the
    publication was published',
  `pages` varchar(100) default NULL COMMENT 'Pages in the source,
    i.e. for example the journal',
  `ee` varchar(200) default NULL COMMENT 'external URL to the
    electronic edition of the publication',
  `ee_PDF` varchar(200) default NULL COMMENT 'external URL to the
    PDF version of the electronic edition of the publication',
  `url` varchar(150) default NULL COMMENT 'DBLP-internal URL
    (starting with db/...) where a web-page for that publication
    can be found on DBLP',
  `publisher` varchar(250) default NULL COMMENT 'Name of the
    publisher of the publication; school for theses; affiliation
    for homepages',
  `isbn` varchar(25) default NULL COMMENT 'ISBN number of the
    collection',
  `crossref` varchar(50) default NULL COMMENT 'dblpkey
    crossreference to one
    other publication (book, proceeding, in the dblp_collections
    table), in which this publication was published',
  `titleSignature` varchar(255) default NULL COMMENT 'Title
    string without space and some common characters like !?,.
    for comparing the title with citeseer titles',
  `doi` varchar(255) default NULL COMMENT 'The DOI of the
    publication',
  `mdate` date NOT NULL COMMENT 'The last modification date
    of the entry',
  PRIMARY KEY  (`id`),
  KEY `dblp_index_title` (`titleSignature`),
  KEY `dblp_index_crossref` (`crossref`),
  KEY `dblp_index_source` (`source`),
  KEY `dblp_index_type_source` (`type`,`source_id`,`source`),
  KEY `dblp_index_type_source2` (`source_id`,`type`,`source`),
  KEY `dblp_index_type_dblp_key` (`type`,`dblp_key`),
  KEY `dblp_index_type_dblp_key2` (`dblp_key`,`type`),
  FULLTEXT KEY `dblp_pub_new2_fulltext` (`title`),
  FULLTEXT KEY `dblp_pub_new2_fulltext2` (`source`)
) ENGINE=MyISAM AUTO_INCREMENT=1116221 DEFAULT CHARSET=utf8
COMMENT='Stores dblp publications of all types';



CREATE TABLE `dblp_ref_new` (
  `id` int(8) NOT NULL COMMENT 'Our internal database key in
    dblp_pub_new',
  `ref_id` varchar(150) NOT NULL default '' COMMENT 'DBLP
    key of the publication being cited (not crossreferenced)
    by source',
  PRIMARY KEY  (`id`,`ref_id`),
  KEY `dblp_ref_id` (`id`),
  KEY `dblp_ref_ref_id` (`ref_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Holds all citations
(no cross-references) between dblp publi';
\end{verbatim}

\section{DBMS Utilizzato}
Inizialmente
