1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-25 22:44:19 +00:00
pds-2021-g2-nest/docs/build/html/code/database/index.html

575 lines
No EOL
20 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Struttura del database &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../../genindex.html" />
<link rel="search" title="Cerca" href="../../search.html" />
<link rel="next" title="nest_backend - Web API in Python" href="../backend/index.html" />
<link rel="prev" title="Meta-documentazione" href="../meta/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #3B7097" >
<a href="../../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale utente</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../guide/about.html">Il progetto in breve</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guide/installation.html">Installazione</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guide/updating.html">Aggiornamento</a></li>
</ul>
<p class="caption"><span class="caption-text">Relazione sul progetto</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../development/goals.html">Introduzione</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/tools.html">Strumenti utilizzati</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/process.html">Processo di sviluppo</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/artifacts.html">Artefatti</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/conclusions.html">Conclusioni</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/suggestions.html">Suggerimenti relativi al corso</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione tecnica</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../meta/index.html">Meta-documentazione</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Struttura del database</a></li>
<li class="toctree-l1"><a class="reference internal" href="../backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li>Struttura del database</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/code/database/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="struttura-del-database">
<h1>Struttura del database<a class="headerlink" href="#struttura-del-database" title="Link a questa intestazione"></a></h1>
<dl class="py class">
<dt id="Alert">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Alert</span></code><a class="headerlink" href="#Alert" title="Link a questa definizione"></a></dt>
<dd><p>Un alert è un allarme impostato da un utente che si &quot;attiva&quot; quando un numero di tweet che rispetta certe condizioni
(poste in and oppure or) supera una certa soglia, indicata dall'utente.</p>
<p>Ogni volta che l'alert si attiva, viene creata una &quot;notifica&quot;, ovvero una entry nella tabella Notifications.
Questo permette di tenere conto del numero di volte in cui l'alert viene triggerato.</p>
<p>Gli alert sono legati al repository di appartenenza, e quando uno di essi viene allertato viene inviata una mail
all'admin e pubblicato un tweet sull'account Twitter usato per le analisi.</p>
<p>La tabella alert contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>id (INTEGER, PK)</p></th>
<td><p>l'identificativo dell'alert</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>name (VARCHAR, NOT NULL)</p></th>
<td><p>il nome dell'alert</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>limit (INTEGER, NOT NULL)</p></th>
<td><p>il numero di tweet che innescano l'alert</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>window_size (INTEGER, NOT NULL)</p></th>
<td><p>numero di ore in cui il limit può venire superato</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>evaluation_mode (ENUM/SMALLINT, NOT NULL)</p></th>
<td><p>può essere posto a all_or oppure all_not</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>repository_id (INTEGER, FK, NOT NULL)</p></th>
<td></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Authorization">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Authorization</span></code><a class="headerlink" href="#Authorization" title="Link a questa definizione"></a></dt>
<dd><p>Una autorizzazione è un'entità che rappresenta il permesso, concesso dal creatore del repository ad un altro utente,
di ispezionare il contenuto di un repo e di eseguire analisi su di esso.</p>
<p>La tabella authorization contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>rid (INTEGER, PK, FK)</p></th>
<td><p>id del repository</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>email (VARCHAR, PK, FK)</p></th>
<td><p>email dell'utente</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Composed">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Composed</span></code><a class="headerlink" href="#Composed" title="Link a questa definizione"></a></dt>
<dd><p>Composed è una tabella le cui righe indicano l'appartenenza di un Tweet ad un certo repository.</p>
<p>La tabella Composed contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>rid (INTEGER, PK, FK)</p></th>
<td><p>id del repository</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>snowflake (VARCHAR, PK, FK)</p></th>
<td><p>id del tweet</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Condition">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Condition</span></code><a class="headerlink" href="#Condition" title="Link a questa definizione"></a></dt>
<dd><p>Una condizione è un elemento che viene usato da repository e alert per cercare e classificare i tweet.</p>
<p>Le condizioni possono essere di diversi tipi:</p>
<ul class="simple">
<li><p><strong>hashtag</strong>: valore <code class="docutils literal notranslate"><span class="pre">0</span></code>, richiede che il tweet contenga un dato hashtag</p></li>
<li><p><strong>time</strong>: valore <code class="docutils literal notranslate"><span class="pre">2</span></code>, richiede che il tweet sia stato pubblicato prima o dopo una certa data</p></li>
<li><p><strong>coordinates</strong>: valore <code class="docutils literal notranslate"><span class="pre">3</span></code>, richiede che il tweet sia stato pubblicato entro un certo raggio da delle
coordinate</p></li>
<li><p><strong>user</strong>: valore <code class="docutils literal notranslate"><span class="pre">5</span></code>, richiede che il tweet sia stato pubblicato da un dato utente</p></li>
</ul>
<p>La tabella condition contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>id (INTEGER, PK)</p></th>
<td><p>id della condition</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>type (ENUM/SMALLINT, NOT NULL)</p></th>
<td><p>tipo del contenuto</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>content (VARCHAR, NOT NULL)</p></th>
<td><p>contenuto della condition</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>repository_id (INTEGER, FK, NOT NULL)</p></th>
<td></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Contains">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Contains</span></code><a class="headerlink" href="#Contains" title="Link a questa definizione"></a></dt>
<dd><p>Contains è una tabella le cui righe indicano la presenza di una certa condition rispetto ad un certo tweet.</p>
<p>La tabella contains contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>cid (INTEGER, PK, FK)</p></th>
<td><p>id della condition</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>snowflake (VARCHAR, PK, FK)</p></th>
<td><p>id del tweet</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="MadeOf">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">MadeOf</span></code><a class="headerlink" href="#MadeOf" title="Link a questa definizione"></a></dt>
<dd><p>MadeOf è una tabella le cui righe indicano il legame tra un alert e una certa condition.</p>
<p>La tabella madeof contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>aid (INTEGER, PK, FK)</p></th>
<td><p>id dell'alert</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>cid (INTEGER, PK, FK)</p></th>
<td><p>id della condition</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Notification">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Notification</span></code><a class="headerlink" href="#Notification" title="Link a questa definizione"></a></dt>
<dd><p>Una notification è un'entità che consente di tenere traccia del momento in cui un certo alert si è attivato
per l'ultima volta.</p>
<p>La tabella notification contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>id (INTEGER, PK)</p></th>
<td><p>id della notifica</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>ora (TIMESTAMP, NOT NULL)</p></th>
<td><p>timestamp di attivazione</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>alert_id (INTEGER, FK, NOT NULL)</p></th>
<td></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Repository">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Repository</span></code><a class="headerlink" href="#Repository" title="Link a questa definizione"></a></dt>
<dd><p>Un repository è un &quot;contenitore&quot; di tweet, a cui sono legati alert, autorizzazioni di lettura e condizioni.</p>
<p>Le condizioni possono essere messe in and oppure or, inoltre un repository può venire archiviato prima divenire
eliminato. Quando un repository non è archiviato, questo viene riempito di tweet su base oraria, cosa che non
accade se viene archiviato.</p>
<p>La tabella repository contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>id (INTEGER, PK)</p></th>
<td><p>id del repository</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>name (VARCHAR, NOT NULL)</p></th>
<td><p>nome del repository</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>start (TIMESTAMP)</p></th>
<td><p>timestamp di partenza del repository</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>end (TIMESTAMP)</p></th>
<td><p>timestamp di chiusura del repository</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>is_active (BOOLEAN, NOT NULL)</p></th>
<td><p>flag per segnalare se il repo è aperto o meno</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>evaluation_mode (ENUM/SMALLINT, NOT NULL)</p></th>
<td><p>può essere posto a all_or oppure all_not</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>owner_id (VARCHAR, FK, NOT NULL)</p></th>
<td><p>email del proprietario</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>is_deleted (BOOLEAN, NOT NULL)</p></th>
<td><p>flag per segnalare se l'oggetto è eliminato o meno</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="Tweet">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Tweet</span></code><a class="headerlink" href="#Tweet" title="Link a questa definizione"></a></dt>
<dd><p>Un tweet è un'entità che viene raccolta dal componente crawler, e quando viene inserita nella base di dati viene
legata ad un repository e alle condition che contiene. Un tweet contiene informazioni relativamente a chi l'ha
creato, eventuali immagini, il tempo di creazione, il tempo di inserimento nel db e l'opzionale posizione legata
al tweet.</p>
<p>La tabella tweet contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>snowflake (VARCHAR, PK)</p></th>
<td><p>id univoco del tweet</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>content (VARCHAR)</p></th>
<td><p>contenuto del tweet</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>location (VARCHAR)</p></th>
<td><p>stringa contenente informazioni sulla posizione</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>place (VARCHAR)</p></th>
<td><p>riservato per sviluppi futuri</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>poster (VARCHAR)</p></th>
<td><p>informazioni sull'utente che ha creato il tweet</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>insert_time (TIMESTAMP, NOT NULL)</p></th>
<td><p>timestamp dell'inserimento del tweet</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>image_url (VARCHAR)</p></th>
<td><p>link alle immagini, se presenti</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>post_time (TIMESTAMP)</p></th>
<td><p>timestamp relativo all'invio del tweet</p></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="py class">
<dt id="User">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">User</span></code><a class="headerlink" href="#User" title="Link a questa definizione"></a></dt>
<dd><p>Uno user è l'utilizzatore della piattaforma.</p>
<p>E' presente di default un utente admin, il quale può creare nuovi utenti.</p>
<p>La tabella user contiene le seguenti colonne:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head stub"></th>
<th class="head"><p>Definizioni</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><th class="stub"><p>email (VARCHAR, PK)</p></th>
<td><p>email dell'utente</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>username (VARCHAR, NOT NULL)</p></th>
<td><p>username dell'utente</p></td>
</tr>
<tr class="row-even"><th class="stub"><p>password (BYTEARRAY, NOT NULL)</p></th>
<td><p>sale della password, codificata usando l'algoritmo bcrypt</p></td>
</tr>
<tr class="row-odd"><th class="stub"><p>isAdmin (BOOLEAN, NOT NULL)</p></th>
<td><p>true se l'utente è admin</p></td>
</tr>
</tbody>
</table>
</dd></dl>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../backend/index.html" class="btn btn-neutral float-right" title="nest_backend - Web API in Python" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../meta/index.html" class="btn btn-neutral float-left" title="Meta-documentazione" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>