# Flat file

Vengono chiamati Flat file tutti quei file di dati contenenti tracciati record privi di relazioni strutturali.
Per interpretare questo tipo di file si richiede la conoscenza di ulteriori elementi quali, ad esempio, le proprietà di formattazione del file. Solo i moderni sistemi di gestione dati utilizzano un approccio più strutturato alla gestione dei file (come quello definito dal Structured Query Language), presentando dei mezzi di archiviazione dati significativamente più complessi.
Esportare dati su file delimitati dalla virgola costituisce un'opzione conveniente, resa disponibile dalla maggior parte dei sistemi di gestione dati oggi in uso; il file delimitato, però, non contiene in sé alcuna informazione riguardo ai dati. Ne segue che l'interpretazione di essi richiede delle ulteriori informazioni. Dunque, tale tipo di file è comunemente noto come Flat File.

## Classificazione

I Flat File si possono classificare nel modo seguente:
* Flat file delimitati
* Flat file ad ampiezza fissa
Un Flat file delimitato contiene tracciati record con un'ampiezza variabile, separato da un segno che li delimita. Di solito tale segno consiste in una virgola, punto e virgola, due punti o una barra verticale. I Flat File ad ampiezza fissa, invece, sono formati da tracciati record con una larghezza invariata, fissa. Record molto lunghi vengono troncati, e quelli corti vengono riempiti con altri elementi (generalmente spazi vuoti).
Un ulteriore dettaglio da aggiungere consiste nel dire che i Flat file delimitati possono essere soggetti a piccoli problemi nel caso in cui uno dei campi relativo ai dati contenuti presenta il segno di delimitazione al suo interno. Uno svantaggio invece dei file ad ampiezza fissa consiste nell'uso inefficiente dello spazio che può portare ad un aumento della dimensione del file.

## Funzionalità ed usi

Principalmente, i Flat File vengono usati per popolare i database (per questo sono conosciuti come Flat file database), ma questo non costituisce il loro unico impiego. I flat file vengono adoperati in molte applicazioni web al fine di raccogliere informazioni dagli utenti, salvarle e, in seguito, trasferire quelle informazioni su un programma di gestione dati per sottoporle, poi, ad analisi. Salvare le informazioni su flat file comporta un minor dispendio di tempo rispetto alle operazioni di archiviazione in una banca dati. È prassi comune aspettare che vi sia un numero rilevante di dati nel flat file prima che questi vengano trasferiti nel database. Idealmente, viene adoperato un programma fornito da terzi, come ad esempio un'applicazione CGI, per la creazione dei flat file originali i cui dati sono stati precedentemente raccolti attraverso l'input di centinaia di utenti. Anche i file di log prodotti dal server possono essere usati per popolare in tal modo i tabulati della banca dati.
I Flat File sono utilizzati, inoltre, non solo per storicizzare i dati in DB e CMS, ma anche come strumento per il trasferimento dati tra server remoti (in questo caso chiamati anche flussi informativi). Negli ultimi anni, questo secondo utilizzo è stato sostituito dai file XML che hanno la caratteristica non solo di contenere il dato, ma anche di descriverlo. Chi utilizza ancora i Flat File per il trasferimento dell'informazione sono spesso mainframe con procedure che nessuno osa modificare. Una critica fatta al formato XML per il trasferimento massivo di dati è che le dimensioni dei file diventano spropositate, mentre quelle dei Flat File sono generalmente ridotte all'essenziale. La soluzione a questo problema è quello di comprimere i file XML (soluzione ovviamente ugualmente valida per i Flat File), ma la compressione degli XML vanta ormai lo standard EXI (Efficient XML Interchange, usato spesso per i dispositivi mobili). È opportuno trasferire dati mediante EXI invece di Flat File: perché non è necessario definire il metodo di compressione adottato, perché esistono librerie per leggere il contenuto dei file, perché non c'è bisogno che i due sistemi comunicanti stabiliscano a priori il protocollo che descrive le caratteristiche del dato (posizione, allineamento, tipologia, formato, etc). Quando però la massa di dati e/o l'arretratezza dei sistemi sono un vincolo, l'unica soluzione resta ancora l'uso dei Flat File. Per ovviare ai problemi di comunicazione, di formato, di validazione, di controllo e tanto altro (sia che il flusso dati sia Flat File che XML), è opportuno utilizzare dei Data Quality Firewall.
Il miglior esempio di uso eccellente del flat file è costituito dalle Ferrovie Indiane (Indian Railways). La compagnia non fa uso di alcun sistema commerciale di gestione dati relazionale (RDBMS – Relational Data Base Management System), dal momento che non vi è alcun sistema di gestione dati che sia in grado di far fronte ad un tale carico di dati, ma utilizza, invece, flat file applicando tutti i concetti relativi al sistema relazionale di gestione dati al proprio sistema.

## Implementazioni pratiche

Database basati sui Flat File:
* MySQL CSV - Motore di archiviazione per MySQL 5.x.
* HXTT JDBC CSV/Text - HXTT JDBC strumenti per Flat File database.
* CsvJdbc - JDBC driver per file CSV.
* J-Stels CSV - JDBC driver per file CSV.
CMS basati sui Flat File:
* CMSimple
* phpCMS
* CloudCMS
* Pluck
* Flatnuke
Strumenti che manipolano/adottano i Flat File:
* jValidator – Data Quality Firewall Open Source, che opera mediante Flat File e XML.
* GNU Recutils - Una serie di strumenti e librerie Open Source, basate su text database chiamati recfiles.
* Mimesis - Un FFDB scritto in PHP4 che utilizza più file e molti metodi di storicizzazione.
* Flat File Checker - Applicazione Open source per la validazione dei dati per i Flat File.