La priorità assoluta, per chi non vuole perdere tempo, è assicurarsi di immagazzinare i propri dati in formati standard, in quanto solo questi assicurano una permanenza di disponibilità nel futuro.
Più ancora che nel caso della videoscrittura, qui va distinta l'interfaccia grafica dal dato “puro”. Per ora occupiamoci di questo, che viene gestito da un programma di tipo server.
Lo standard degli standard nel campo dei database è MySql. Si potrebbe infatti immagazzinare dati in formato testo, in particolare in .csv, un formato decisamente povero, ma proprio perciò decisamente leggero, e con il vantaggio di una leggibilità davvero notevole, anche con qualsiasi editor di testo, in qualsiasi sistema operativo (Linux, Windows, Mac etc.).
Ma Mysql ha un decisivo vantaggio su .csv: di essere dinamicamente interfacciabile con html, generando così delle pagine ben formattate, in modo anche elegante e complesso (e indipendente dalla piattaforma). Inoltre Mysql permette l'esecuzione di operazioni di ben maggior complessità di quelle di un formato puramente testuale.
Esistono anche altri programmi, database-server, come Postgres, sqlite, o Firebird, più leggeri di Mysql. Confessiamo di non averli provati tutti. Ma, insomma, ci sarà ben una ragione se la schiacciante maggioranza dei siti internet ricorre a Mysql e non ad altri programmi.
Se uno dei maggiori vantaggi di Mysql è la sua capacità di interfacciarsi con le pagine html, è essenziale sapervelo collegare: mediante apache e php.
Diciamo altrove come installare le tre componenti (mysql/php/apache), in modo facile, in Linux (egualmente facile è l'installazione in Windows: basta eseguire il file .exe).
Una documentazione completa su come usare MySql si trova sul sito di tale database-server. Noi qui ci limitiamo a dare alcuni consigli che traiamo dalla nostra esperienza.
In un database i dati sono dei records, ognuno dei quali è fatto di più campi. Ad esempio regista, titolo del film, titolo originale, data, attori. È importante scegliere bene il tipo di campo: ci sono formati numerici (ad es. int, smallint, bigint), formati di testo (ad es. tinytext, text, o varchar, char), formati di tempo (year, time, date, ecc.). È bene scegliere il tipo di formato che riduca al minimo lo spazio occupato, così da rendere il più possibile veloce la risposta del server.
Esempio: se prevedo che in un certo campo metterò solo degli anni (dunque 4 cifre) inutile settare il campo come int (fatto per numeri con molte cifre), molto più logico settarlo su year. A meno che io voglia immetere delle date precedute da un meno (di storia romana o greca antica, per esempio): allora conviene usare smallint.
Ciò che è davvero dato è contenuto nella tabelle (tables), il resto è manipolazione grafica.
Fino alla versione 5 di MySql la manipolazione grafica era affidata interamente a dei clients, ora esiste già a livello di server una prima interessante forma di elaborazione, diciamo così permanente (non come le queries, che sono una interrogazione temporanea del server: si tratta delle views, o viste.
Una vista non contiene dati, ma istruzioni su come selezionare e organizzare i dati, che, ricordiamolo, risiedono nelle tabelle.
Esempio. Ho una tabella di database che contiene autori, titoli, genere, tonalità e altre informazioni di componimenti musicali. Posso creare una vista che mi selezioni solo i componimenti di un certo autore, o di un certo genere musicale, o di una certa tonalità. Tutte le composizioni di Mozart, o tutte le sinfonie dei vari musicisti, o tutte le opere in re maggiore.
Con PhpMyAdmin inoltre è possibile gerarchizzare le viste nel menu di sinistra, raccogliendole in strutture ad albero cliccabili (scegliendo a piacimento di quanti livelli debbano essere i subtrees, di default 1).
Per fare questo dovete usare il file config.inc.php, settando ad esempio $cfg['LeftFrameTableLevel'] = 2;, se volete due livelli di subtrees.
Con PhpMyAdmin potete non solo visualizzare i dati con le viste, ma anche modificarli (ciò che non potete invece con molti clients).
Un vantaggio di un sistema Unix/Linux è l'uso dei symlinks all'interno di un database: si possono infatti collegare con symlink tabelle di un database in un altro database. Con l'utile risultato di poter, tra l'altro, creare delle viste che relazionano più tabelle di più databases.
In questo caso è altamente consigliabile non manipolare la struttura della tabella linkata (da altro database) nel database ospitante, e possibilmente nemmeno i dati. Soprattutto la struttura comunque occorre modificarla solo nel database in cui risiede la tabella. Diversamente potrebbero derivare grossi problemi, per una possibile non sincronizzazione tra i due files con estensione .frm, quelli appunti in cui è scritta la struttura di una tabella.
In Linux l'uso di Mysql può dare qualche problema (tipico caso: la comparsa del fastidioso messaggio di errore “error 1036 - table [nomevostratabella] is read only”) dovuto ai permessi: se usate, come vi consigliamo di fare, Xampp, è importante che i files di dati abbiamo come owner “nobody”, e come group “nogroup” (immagino che se usate Linux abbiate una qualche pallida idea di che cosa vuole dire permesso).
Un possibile problema nella modifica dei records in una vista potrebbe però sorgere con l'errore 1054 (#1054 - Unknown column); nella nostra esperienza esso era dovuto a un errore di settaggio nel file di configurazione (il già citato config.inc.php): occorre che le $cfg['Servers'][$i]['extension'] siano settate su 'mysql' e non su 'mysqli'.
Nota bene: per modificare i records di una vista occorre che tra i suoi campi ci siano le chiavi (primary o index) che avete definito in quella tabella. Altrimenti non potrete effettuare alcuna modifica.
Una interfaccia grafica è assolutamente auspicabile: in Windows esiste Access, che come interfaccia è eccellente. Conosco gente che ha usato Mysql come formato “puro” per i dati, e Access come interfaccia grafica per manipolarlo. Si aveva così un file .mdb (magari di diverse centinaia di Kb) che conteneva non i dati, ma il formato, l'involucro grafico in cui essi venivano visualizzati e manipolati, mentre i puri dati erano in piccoli files di poche decine di bytes, con grande vantaggio nel backup e nella portabilità. Lo si può fare, ed è certamente già meglio che salvare i dati in formato proprietario Access.
Un programma sia Windows che Linux è OpenBase, della suite OpenOffice: sta migliorando, ma è ancora lento e dispone di poche funzionalità che lo possano rendere davvero interessante.
Robusto e utile è PhpMyAdmin, prodotto esso pure open source e gratuito, che permette di manipolare i dati Mysql valendosi delle pagine html (gestite dinamicamente tramite apache/php). Si tratta di una soluzione che va sempre più evolvendosi (interessante l'uso di query permanenti, dette viste), ma che non ha ancora la piena funzionalità di un programma per una manipolazione grafica dei dati.
In Linux si possono trovare soluzioni soddisfacenti, magari non così luccicanti come Access, ma egualmente funzionali e decentemente eleganti.
Un prodotto che promette di interfacciarsi con Mysql, ma non lo fa, è Kexi; se volete mettere alla prova il vostro sistema nervoso, vi consigliamo di provarlo. A parte l'ironia, Kexi sa anche funzionare più che dignitosamente, ma di fatto pretende di trascinarvi a usare il suo formato proprietario, mentre non siamo riusciti a usarlo come reale interfaccia grafica del formato MySql.
Un prodotto che si invece interfaccia davvero con Mysql è Knoda, tra l'altro leggero (poco più di 5 Mb), ma capace di creare dei forms, oltre che, ovviamente, delle query, graficamente accattivanti e soprattutto funzionali.
A nostro avviso Knoda è un prodotto eccellente, in grado di non far rimpiangere Access. Rapidissimo nel caricarsi, può lavorare non solo sulle tabelle (che sono il dato nel suo formato grezzo, in fondo l'unico vero dato in un database), non solo sulle query (come può fare, ben più faticosamente del resto Mysql QueryBrowser della Mysql), ma può creare dei form e dei report che non hanno molto da invidiare a quelli di Access.
Un form è una interfaccia grafica decisamente intuitiva e comoda per manipolare i dati di un database: potete scegliere voi quali campi usare, come etichettarli, di quale formato debbano essere i campi (colore, tipo e dimensioni del font), aggiungere menu a tendina, pulsanti di scelta scelta rapida e simili. Di più, con Knoda, come in Access, potere creare dei subform: mettiamo che abbiate un database con brani musicali di svariati autori, potere creare un form che vi permetta una selezione rapida dell'autore, che apre una maschera dentro cui compaiono solo i suoi brani, nell'ordine che voi scegliete.
Con Knoda potete copiare e incollare molte celle, ad esempio, da un foglio calcolo nella tabella di un database. Oppure copiare e incollare (anche sovrascrivendo campi di records già immagazzinati) singoli campi da un recortd ad altri.
Oltre, ovviamente, a poter importare un intero file .csv. Il che in genere avviere senza errori, in modo intuitivo e rapido. Ma in quel caso importate in blocco una serie di records, mentre parlavamo di importare singole celle.
Dicevamo che il bello di MySql è che si interfaccia con le pagine (x)html, tramite ad esempio php.
Mettiamo di avere una bibliografia, con records costituiti da opere di certi autori; avremo ad esempio il campo autore, nome dell'autore, titolo, edizione, luogo, data.
Nel database è bene che immagazziniamo non solo l'iniziale del nome, ma l'intero nome; ad esempio per non confonderlo con altri autori di identico cognome; ma in un elenco bibliografico si usa invece la sola iniziale seguita da un punto. Come fare a salvare entrambe le esigenze?
Una soluzione verrebbe da cercarla con l'uso dei fogli di stile (CSS), e in particolare della pseudo-class :first-letter, indicando il nome come non visibile (con “visibility: hidden”), e la prima lettera come visibile; questa soluzione è decisamente poco elegante, perché pur non vedendosi il resto del nome dopo la prima lettera, lo spazio resta vuoto, con un effetto davvero brutto.
La soluzione può allora essere usare una funzione presente in PHP: substr, con cui diciamo al server da dove e fino a dove deve riprodurre la stringa in questione. Nell'esempio da noi provato il codice era il seguente substr($row[autore_nome],0,1), dove 0 rappresenta l'inizio, ossia l'inizio della parola e 1 la fine, ossia nella fattispecie prima lettera della parola.