Guida

Che cos’è un Database: scopri come funziona una base dati e come scegliere il DB giusto per la gestione aziendale

I database sono il motore dell’economia data-driven. Da un mondo di informazioni compartimentato all’analisi semantica multidimensionale dei dati, l’evoluzione dei processi di raccolta e di analisi dei dati fa riferimento a una programmazione sempre più sofisticata, che attinge ad altre branche dell’informatica. Ad esempio, quelle derivate dall’Intelligenza Artificiale

Pubblicato il 06 Set 2022

database

Database o data base, detti anche base dati o banche dati, sono i grandi protagonisti della storia informatica. Servono per collezionare i dati e correlarli tra loro in modo strutturato, formalizzandone inserimento, aggiornamento, ricerca e cancellazione. Rappresentano l’abbrivio dell’economia data-driven. Ma cos’è un database e a cosa serve? Dove si trova e dove si installa? Qual è il suo costo?

Il DB è una banca dati che serve a raccogliere, archiviare e confrontare dati. Ogni database risiede su un hardware, che può essere interrogato (ossia raggiunto per richieste di specifiche informazioni) tramite l’utilizzo di un terminale. I DB possono risiedere su un hardware fisico o su una struttura in cloud. I database possono essere acquistati tramite i servizi di Hosting, ad un costo che varia in base alle caratteristiche e alla dimensione massima disponibile.

Vediamo qui di seguito ognuno di questi punti nel dettaglio.

Definizione di database e a cosa serve

Il database è un insieme di dati provenienti da differenti fonti: sito web, Crm, ecc.

La definizione di DB in informatica fa riferimento a un archivio dati strutturato (ossia omogeneo per contenuti e formato) memorizzati in un computer. Il suo scopo è razionalizzare, aggiornare e gestire delle informazioni e permettere l’esecuzione di ricerche complesse.

Tali ricerche, se compiute su tradizionali archivi analogici, comporterebbero ampio dispendio di tempo e risorse. Sviluppati in pratica per conservare, recuperare ed elaborare le informazioni, i DB sono archivi dati organizzato.

Attraverso un linguaggio di programmazione adeguato e un software di gestione, questi dati possono essere organizzati e resi disponibili per gli utenti.

È il caso dei contenuti di un sito web che sono salvati su un database per poter poi essere estratti e visualizzati nel sito stesso.

In questo modo le informazioni in un sistema informatico vengono rese più organizzate e funzionali. In un database è possibile restituire i dati in tabelle, colonne o righe e trovare o visualizzare in modo semplice e rapido tutte le informazioni. Proprio come faresti con un foglio di calcolo (Excel ad esempio)!

Differenze tra database e fogli di calcolo

La differenza principale tra un database e un foglio di calcolo come Excel è che i due strumenti, pur essendo entrambi metodi per archiviare le informazioni, hanno funzionalità diverse. Ad esempio, nei fogli di calcolo i dati sono pensati per essere manipolati in maniera semplice da (prevalentemente) un unico utente per volta. Non sempre è possibile, inoltre, archiviare enormi quantità di dati. Nei DB l’organizzazione dei dati permette un maggior grado di complessità, maggiore spazio di archiviazione e moltissimi più utenti contemporaneamente.

Di fatto in particolare i DB rispetto ai fogli di calcolo permettono di correlare i dati tra loro, facendo sì che siano più facili da manipolare e visualizzare.

SQL il linguaggio dei database e come usarlo per gestire un DB

Quasi tutti i database, per essere letti e manipolati, utilizzano il linguaggio di programmazione SQL, Structured Query Language per gestire i dati.

SQL, o Structured Query Language, è il linguaggio di programmazione utilizzato dalla maggior parte dei database relazionali. Ha la funzione di dare accesso ai dati, manipolarli e definirli.

In origine il nome del linguaggio era SEQUEL, che significava Structured English Query Language.

SQL è uno standard ufficiale riconosciuto dall’ANSI (American National Standards Institute) e dall’ISO (International Organization for Standardization).

Nonostante sia stato definito dal professor E.F. Codd tra gli anni ‘60 e gli anni ‘70, è diventato così popolare da essere tuttora utilizzato, grazie alla sua semplicità ed efficacia.

Il suo impatto nel mondo è tale che i database non relazionali come MongoDB vengono anche chiamati NoSQL, indicando proprio la non presenza di questo linguaggio di programmazione.

Come funziona un database

Un database in informatica raccoglie i dati (collect) e li collega in un’unità logica. I singoli dati sono forniti sotto forma di metadescrizioni e corredati di tutte le informazioni per la loro elaborazione.

Se un DB è progettato in modo razionale ed efficiente è possibile dare un significato a tutti dati registrati. Più un archivio dati è ottimizzato, più è possibile integrare ulteriori strumenti di estrazione e di analisi, di reporting, di intelligence, di ETL (Extract Transform Load). Si tratta di organizzare il processo di estrazione, trasformazione e caricamento dei dati. Il che include la loro organizzazione e centralizzazione in un unico repository.

Il processo ETL rende questi dati disponibili estraendoli da un numero illimitato di sorgenti. Effettua anche una loro pulizia per trasformarli e finalizzarli al business, integrando dati attraverso sistemi eterogenei.

Idealmente, il funzionamento è analogo a quello di uno schedario digitale evoluto. Un database crea una struttura che permette di inserire e modificare rapidamente le informazioni desiderate. Una volta memorizzato in un elaboratore elettronico, questo insieme di dati può essere interrogato da un qualsiasi terminale, utilizzando chiavi di accesso preposte.

È così che, grazie ai DB, le informazioni non vengono perse. Una volta immagazzinate possono essere gestite e trattate per essere utilizzate nei più disparati ambiti applicativi.

Dal punto di vista architetturale, una banca dati è incorporata in un hardware (fisico o in cloud) e viene alimentata e interrogata con software.

Gestione del database: come gestirlo con un DBMS (Database management system)

A livello fisico (hardware), l’archiviazione dei dati si basa su un sistema costituito da quanto segue:

  • Supporti di memorizzazione (ieri a nastro, oggi hard disk), che garantiscono la persistenza dei dati;
  • un processore per l’elaborazione degli stessi, chiamato database server.

Un client di database lato client interagisce con il DBMS server e quindi anche con la base di dati in senso fisico.

A livello logico (software), i dati strutturati sono gestiti da un database management system (DBMS).

Un software per database (DBMS) ha la delicata funzione di archiviare in modo strutturato i dati e quindi di agevolare, poi, l’accesso ai dati stessi mediante interrogazioni efficienti.

Si tratta di sistemi che consentono di implementare politiche di sicurezza per contrastare accessi non autorizzati e che, ovviamente, sono progettati per garantire l’integrità delle informazioni in essi contenute.

Sempre più sofisticati, i software per database favoriscono inoltre approfondite attività di analisi e correlazione.

Il Database Management System (DBMS) include tutta la gamma di applicazioni che consentono la creazione, la manipolazione (gestione) e l’interrogazione efficiente dei dati. Oltre a definire utenti e amministratori di un database, il DBMS fornisce meccanismi di sicurezza per il database e controllo dei dati. Consente, inoltre, agli utenti finali o ai programmatori di applicazioni di condividere i dati e preservarli.

Una qualunque operazione sulla base di dati da parte dell’utente/amministratore avviene utilizzando un determinato linguaggio di programmazione. Questo avviene mediante un DBMS manager ad interfaccia grafica o a riga di comando. Il server è la parte del DBMS che si occupa di fornire i servizi di utilizzo del database ad altri programmi e computer in modalità client/server.

Il server memorizza i dati, riceve le richieste dei client ed elabora le risposte appropriate.

Esempi di programmi DBMS o software per gestire database

Segue qualche esempio di database management system personali e professionali è possibile ricordare i seguenti. Le differenze tra loro sono dal tipo di sintassi utilizzato dal programmatore per compilare il codice.

  • Teradata: è un RDBMS (un sistema di gestione del database relazionale) che funziona con i sistemi operativi Windows, Linux e Unix. Questo sistema supporta le applicazioni di data warehouse e vari utenti da più piattaforme.
  • Postgresql: è un sistema di database relazione avanzato open-source. Supporta query SQL (relazionale) e JSON (non relazionale). Viene utilizzato come database per molte applicazioni web e di analisi.
  • Oracle Mysql: è un database management system relazionale e open source. È un database molto veloce, scalabile e facile da usare che funziona con sistemi client/server o embedded.
  • Microsoft SQL server: è un database relazionale RDBMS creato da Microsoft. Si basa su SQL, il linguaggio di programmazione standard dei database. Dall’ottobre 2016 è diventato disponibile per Windows e Linux.

Il data warehouse, differenze con il database

È opportuno segnalare la differenza tra un database e un data warehouse : un database contiene una raccolta di dati archiviati secondo diverse logiche (transazionali, oggetti e via dicendo). Il data warehouse memorizza i dati consolidati da più database ed è la componente principali della business intelligence, fornendo alte prestazioni per query analitiche.

In effetti, il data warehouse è un sistema di gestione dati a supporto delle attività di business intelligence e analytics che permettono di eseguire query e analisi su grosse quantità di dati. Il data warehouse può essere anche in cloud, e uno degli esempi più noti è Google Big Query Cloud Data Warehouse.

Come progettare un database

Le basi dati servono a modellare concetti del mondo reale. La metodologia di progettazione e sviluppo di un database separa le decisioni su cosa rappresentare e come farlo. Per inserire, aggiornare, cancellare, o cercare dei dati in un database, il progettista organizza le informazioni e le collega. Si svolge questa operazione secondo un particolare modello logico ecco, in sintesi, quali passi seguire.

  • Individuare lo scopo del database
  • Raccogliere tutte le informazioni necessarie
  • Organizzare le informazioni in tabelle e colonne
  • Impostare le relazioni
  • Specificare le chiavi da utilizzare e le regole di normalizzazione (per evitare ridondanze)

Tipi ed esempi di database

I modelli o tipi di database utilizzati nel corso degli anni sono diversi, eccone alcuni.

Database cloud

Con cloud database si intende un software erogato come servizio da un provider. Scegliendo tale opzione sarà possibile fruire di un’elevata disponibilità di spazi e di scalabilità, tipiche del cloud computing.

Database distribuiti

Un database può essere locale, cioè utilizzabile su un computer da uno o più utenti, oppure distribuito. In questo caso le informazioni in esso immagazzinate sono accessibili attraverso una rete informatica.

Database Json (documentale)

Si tratta di un database non relazionale pensato per la gestione (dalla memorizzazione alla ricerca) di documenti JSON (JavaScript Object Notation). Tale database permette un’indicizzazione flessibile ed è in grado di evolversi in base alle esigenze delle applicazioni. Il suo utilizzo ideale è quello finalizzato ad archiviare contenuti per blog, cataloghi eccetera.

Database NoSQL

Si contraddistinguono per non utilizzare il modello relazionale, usato solitamente per basi dati RDBMS. Ciò significa che questi tipi di archivi di dati non richiedono schemi fissi. Il loro successo è riconducibile alla facilità di sviluppo e alla scalabilità delle prestazioni.

Database Open source

I database open source, ossia a licenza aperta, hanno due interessanti vantaggi. Da un lato, essi richiedono il solo investimento di tipo operativo (di gestione). Non presuppongono, infatti, un investimento di tipo capitale. D’altra parte, vantano vaste comunità di sviluppatori attivi e concentrati sull’evoluzione dei programmi.

Database Gerarchico

Ossia visualizzabile come un sistema di alberature, caratterizzato da strutture simili a sistemi di file organizzati in modo gerarchico. Vantaggi: accesso per la lettura estremamente veloce, struttura chiara, semplice a livello tecnico. Svantaggi: struttura ad albero rigida che non consente collegamenti tra gli alberi.

Database Reticolare

Visualizzabile tramite un grafo. Vantaggi: dispone di un maggiore di percorsi per accedere al record e non c’è una rigida gerarchia. Svantaggi: consente una panoramica scarsa per database di grandi dimensioni.

Database Relazionale

Visualizzabile come una serie di tabelle e relazioni tra esse ed attualmente il più diffuso.

Database ad oggetti

Con estensione alle basi di dati del paradigma Object Oriented, tipico della programmazione a oggetti. Vantaggi (del relazionale puro): creazione ed elaborazione facile e flessibile, facile espansione, facile da implementare. Svantaggi (del relazionale puro): risulta di difficile gestione per grandi quantità di dati.

Esso permette una scarsa segmentazione con costruzione artificiale delle chiavi. L’interfaccia di programmazione è esterna e presenta una raffigurazione carente delle proprietà e comportamento degli oggetti. Vantaggi (con l’integrazione di funzionalità object oriented): memorizzazione di contenuti multimediali. Svantaggi (con l’integrazione di funzionalità object oriented): le prestazioni peggiorano all’aumentare dei dati e sono poche le interfacce compatibili.

DB Document-oriented (NoSQL)

Non memorizza i dati in tabelle con campi uniformi per ogni record come nei database relazionali. Ogni record è memorizzato come un documento che possiede determinate caratteristiche. Vantaggi: archiviazione centrale dei dati correlati in documenti singoli, struttura libera, orientamento multimediale. Svantaggi: richiedono sforzi organizzativi elevati e, spesso, competenze di programmazione.

Database Key-Value Store (NoSQL)

È un database che immagazzina i dati come un insieme di coppie di chiave-valore dove una chiave rappresenta un identificatore univoco. Chiavi e valori possono essere qualsiasi cosa, da un oggetto semplice a oggetti compositi.

Database Graph-based (NoSQL)

Nei database a grafo le entità sono rappresentate da nodi di un grafo, collegati tra loro tramite relazioni. Sono ideali laddove il dato importante è rappresentato dalla relazione tra entità. Un tipico esempio applicativo è l’analisi semantica.

Database Colonnare (NoSQL)

A differenza dei classici database relazionali, in questo tipo di database l’informazione è salvata per colonna. Dato che il numero di colonne può variare senza problemi nel tempo. Questi database consentono una modellazione banale di nuove specifiche non previste nel progetto iniziale. Trovano infatti un largo utilizzo in sistemi OLAP, dove si fa un ampio utilizzo di sottoinsiemi di colonne.

Evoluzione e storia del DB dal 1960 ai giorni nostri

L’arrivo dei computer nelle aziende è stata una benedizione ma l’informatizzazione 1.0 ha creato tanti sistemi isolati (silos). Il risultato è che i dati rimanevano compartimentati e bloccati tra le varie aree aziendali.

L’arrivo dei database in informatica ha cambiato il clima aziendale, inaugurando un data management capace di illuminare di informazioni le organizzazioni. Le banche dati, infatti, sono estremamente utili sia per gestire i dati che semplificare la ricerca di informazioni specifiche.

database cronistoria

1. Flat File database (1960)

Prima dell’avvento del modello relazionale, negli anni 60 il mondo mainframe utilizzava il modello gerarchico o di dati di rete. Nel database relazionale, i dati vengono suddivisi in apposite tabelle per argomenti e poi questi argomenti vengono suddivisi per categorie (campi). Questa suddivisione rende i DB notevolmente più efficienti rispetto a un archivio di dati creato per esempio tramite un flat file system di un sistema operativo.

2. DB navigazionale (1970)

Alcuni affermano che il modello di dati di rete modulare degli anni ’70 sia simile all’attuale modello grafico, ma non è così. Questo perché negli anni 70 non esisteva un linguaggio di query dichiarativo per il modello di rete. All’epoca, infatti, gli sviluppatori dovevano sapere in che modo erano archiviati fisicamente i dati e creare programmi per l’accesso alle informazioni.

3. Database relazionale (1980)

È solo nel 1980 che si afferma quel modello relazionale che ha consentito di raggiungere un livello di indipendenza dei dati. Esso ha permesso agli utenti di accedere alle informazioni senza conoscere la struttura fisica di un database. Diversi anni dopo Edgar F. Codd (ricercatore di IBM) inizia a proporre un nuovo approccio alla costruzione delle basi di dati. Si arriva così al modello relazionale per Basi di dati condivise (A Relational Model of Data for Large Shared Data Banks). Dai laboratori IBM esce poi SQL (Structured Query Language), che si afferma come il linguaggio di interrogazione standard dei database relazionale. I DBMS relazionali sono incentrati su un modello tipicamente transazionale (On Line Transaction Process – OLTP).

4. Database distribuito (1990)

Con l’esplosione della web economy W3C, organizzazione non governativa internazionale per lo sviluppo delle potenzialità del Web, promuove proposte per lo standard dati web. In questo decennio, per sopperire alle scarse performance offerte dai database relazionali nei processi di analisi (OLAP), si affermano i database multidimensionali. Quest’ultimi permettono di effettuare analisi più efficaci su enormi quantità di dati. Di fatto, alla fine degli anni 90 ogni database relazionale commerciale contiene al suo interno un motore multidimensionale. È questo capitolo dello sviluppo che ha inaugurato una programmazione delle basi di dati a oggetti. La fine degli anni 90 è anche l’era di NoSQL (acronimo di Not Only SQL).

Il termine, coniato da Carlo Strozzi nel 1998, dà il via a un movimento che promuove lo sviluppo di una base di dati relazionale open source che non usa un’interfaccia SQL. L’autore spiegava “NoSQL diparte in modo radicale dal modello relazionale, e quindi andrebbe chiamato in modo più appropriato NoREL, o qualcosa di simile”. Il senso di NoSQL era un’apertura a diversi casi d’uso per i quali il modello relazionale rappresenta una forzatura. I database NoSQL sono appositamente realizzati per modelli di dati specifici. Questi hanno schemi flessibili per creare applicazioni moderne, utilizzando molteplici modelli di dati, tra cui documento, grafo, chiave-valore eccetera.

5. DBMS post relazionale (2000)

L’inizio del secondo millennio si contraddistingue per una programmazione dei DBMS a oggetti. Gli ODBMS (Object DBMS) permette agli utenti di memorizzare direttamente una serie di oggetti all’interno dei database, ognuno dei quali ne può contenere altri. Oggi, in realtà, molti DBMS ibridano il modello relazionale e il modello a oggetti. Si parla quindi di ORDBMS (Object Relational DBMS). Il 2000 è anche l’anno di fondazione di Neo Technologies, società che inizia a sviluppare il proprio database di grafi, Neo4j.

I programmatori creano anche il linguaggio di query dichiarativo per il modello di grafico, Cypher. Questo prende in prestito alcuni concetti di sviluppo da SPARQL (SPARQL Protocol and RDF Query Language) come, ad esempio, la corrispondenza del modello di grafico. Per l’universo dei database si apre l’era del web semantico.

La possibilità di estrarre informazioni dalle basi di conoscenza distribuite sul web, infatti, apre un orizzonte applicativo pressoché infinito. Il framework di descrizione RDF (Resource Description Framework) è reso standard dal Data Access Working Group (gruppo di lavoro del consorzio W3C). Lo stesso gruppo di lavoro lo ha reso raccomandazione ufficiale il 15 gennaio 2008. Tale framework descrive i concetti e le relazioni su di essi attraverso l’introduzione di triple (soggetto-predicato-oggetto). Permette la costruzione di query basate su triple pattern, congiunzioni logiche, disgiunzioni logiche e pattern opzionali.

6. In-memory database (2010)

Per supportare l’analisi dei dati in tempo reale, negli ultimi anni sono stati sviluppati i cosiddetti in-memory database. Questi consentono di superare alcuni limiti dei database tradizionali nell’analisi in real time di grandi moli di dati. Un IMDB (in-memory data base) archivia le raccolte di dati direttamente nella memoria centrale dei computer fornendo risultati di analisi.

Il principale vantaggio degli in-memory database è la velocità di accesso significativamente più elevata (proprio grazie all’utilizzo della memoria centrale). Il secondo è l’agevole elaborazione sia di dati strutturati sia di dati non strutturati provenienti da qualsiasi fonte.

Lo svantaggio principale è rappresentato dal fatto che questo tipo di DB consente solo un’archiviazione a breve termine dei dati. In caso di crash tutti i dati volatili si perdono. Sono stati elaborati vari sistemi per superare questo problema. Tra questi vi sono snapshot del database, backup nei log delle transazioni, replicazione, memoria RAM non volatile. Il secondo svantaggio è legato all’elevato impegno della RAM che ne riduce la disponibilità. Per questo vengono spesso utilizzati su diversi computer collegati tra loro con un approccio di grid computing.

Sistemisti e Database Administrator: le skill dei professionisti del DB

Mentre gli utenti finali del DB utilizzano le applicazioni che permettono di interrogare il DB, esistono una serie di figure chiave che abilitano il funzionamento del data base.

Il DBA (Data Base Administrator) è la figura di riferimento che:

  • gestisce gli accessi
  • Predispone tabelle, indici, viste
  • Ottimizza lo spazio disco
  • Effettua i backup e i restore

Dietro alle quinte di una banca dati lavora una squadra di analisti programmatori, incaricati di scrivere le applicazioni che utilizzano i dati del DB.

Il gruppo è affiancato da un team di sistemisti. Questi ultimi son preposti a verificare il corretto funzionamento dei sistemi hardware e software su cui gira il database management system.

Servizi di hosting e costi medi del database

I servizi di hosting, in pratica, consistono in abbonamenti che consentono l’allocazione di dati (rappresentati da pagine di un sito così come da applicazioni) in un server Web. Questo permette di rendere disponibili le risorse a più utenti. Nello specifico, nelle offerte di hosting sono inclusi i servizi DB.

È abbastanza complicato riferire i costi di tali servizi. Esistono infatti servizi di hosting gratuiti. Essi sono per lo più elementari, finalizzati al passaggio a quelli a pagamento. Sono spesso promozionali, per incoraggiare al passaggio a soluzioni più avanzate. Tra l’altro, hanno degli svantaggi. Fra questi mancanza di garanzia di servizio, larghezza di banda contesa tra più utenti e prestazioni tecniche non elevate.

Esiste poi un ampissimo ventaglio di offerte a pagamento. I costi di quest’ultime sono calcolate a una nutrita serie di variabili. Esse vanno dall’ampiezza dello spazio di archiviazione agli SLA – Service level agreement relativi alle performance. Riguardano la semplicità di utilizzo così come le capacità di integrazione. E, ancora, tutte le funzionalità messe a disposizioni a corredo.

Database in cloud: soluzioni disponibili oggi

Gli ultimi trend della programmazione dei database sposano il cloud per abilitare un processo di astrazione del database che da prodotto diventa servizio.

Il Database as a Service, non avendo alcun vincolo a livello di risorse garantisce scalabilità e un’elevata disponibilità delle base dati.

Il Database as a Service passa dalle API. La componente di gestione, infatti, controlla gli strati sottostanti alle varie istanze usando un service API, esposta all’utente. Ed è tale da permettergli di eseguire operazioni di manutenzione e scalabilità sulle proprie istanze del database.

DB con Virtual machine Image

Le aziende possono acquistare delle macchine virtuali (anche per un tempo limitato) e così gestire uno o più DB. Gli utenti possono anche caricare le proprie machine image con all’interno il database già installato. Oppure utilizzare una macchina già pronta che contiene una versione ottimizzata di un database.

Database-as-a-service (DBaaS): soluzioni disponibili

Un Database as a service consente a chi ne fa uso di non dover installare a manutenere il sistema. Il DBaaS viene erogato come puro servizio, con un livello di alta disponibilità (tra il 99.9% o il 99.99%). Installazione e manutenzione sono a carico del provider, secondo un canone al consumo. Ecco alcune soluzioni disponibili di DBaaS.

The Forrester Wave - DBaaS - Database-As-A-Service, Q2 2019
The Forrester Wave_ Database-As-A-Service, Q2 2019 – Fonte: Forrester 2019
  • Amazon Web Services (AWS) fornisce vari database come servizi offrendoli come parte del suo portfolio cloud. Sono i database relazionali Amazon Aurora (supporto MySql e PostgreSQL) e Amazon RDS (supporto MySql, PostgreSQL, MariaDB, Oracle, SQL Server). Inoltre, il database chiave-valore (data base ottimizzati per la memorizzazione e il recupero di coppie chiave-valore in grandi volumi) Amazon Dynamo DB; il database a grafo Amazon Neptune e via dicendo.
  • Oracle: con Oracle Database Cloud Service, l’azienda offre come servizio le stesse funzionalità dell’Oracle Autonomous DB on premise. Nell’offerta cloud, Oracle automatizza le attività amministrative generali, come provisioning, backup, disponibilità e patching. Non solo: automatizza l’ottimizzazione delle query, l’indicizzazione delle tabelle e gli aggiornamenti.
  • MongoDB, uno dei più popolari DB NoSQL è fruibile in cloud con il servizio MongoDB Atlas.
  • Microsoft offre il servizio Azure SQL Database nella propria piattaforma cloud Azure.
  • Google offre diverse tipologie di DBaaS come Google Cloud SQL o Google Cloud Bigtable (DB chiave-valore NoSQL) e così via.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 2