Originariamente pubblicato in data 19/03/2006
A
C
C
O
M
A
Z
Z
I
MySQL contro FileMaker
MySQL contro FileMaker
MySQL versione 5 e FileMaker Pro versione 8: vantaggi e svantaggi di ciascuno per archiviare dati
I calcolatori sono nati negli anni Quaranta per macinare complessi calcoli matematici, ma si sono diffusi negli anni Cinquanta grazia alla capacità di funzionare come efficienti archivi. Anagrafi e censimenti, fatturazioni e cataloghi: insomma, basi di dati. Questa applicazione è sfruttatissima ancora oggi, ma poco popolare. Nessuno pensa ad iTunes e iPhoto come a due database: ma è esattamente quello che sono. Milioni di persone archiviano le loro informazioni in fogli elettronici come Excel, anche se le prestazioni nella ricerca e nell'ordinamento precipitano già dopo soltanto cinquecento righe di dati. Inoltre, un foglio elettronico può venire lavorato da una sola persona alla volta, mentre un moderno motore di database è sempre una soluzione multiutente.
Anche tra i motori di database esistono, naturalmente, grandi differenze. In questo articolo ci concentriamo su MySQL versione 5 e FileMaker Pro (di qui in poi, semplicemente FMP) versione 8. Potete pensare al primo come a una Ferrari formula 1 gratuita e al secondo come a una Fiat Panda dal prezzo abbordabile. Detto così, sembra che i vantaggi siano tutti dalla parte del primo veicolo, ma ricordate che in realtà sono pochissimi i guidatori che sanno pilotare una Formula 1.Fuor di metafora: FileMaker si porta bene lavorando con migliaia o decine di migliaia di dati e qualche utente; MySQL mostra il meglio di sé con molte centinaia di migliaia di righe e decine o centinaia di utenti paralleli. Nel mondo Windows esistono anche altre soluzioni alternative alle due che ci interessano, ma in pratica se ne incontrano solo altre due, entrambe targate Microsoft. Access è simile a FileMaker, ma più veloce e meno facile ad usarsi. SQL Server è simile a MySQL, ma costosissimo e francamente molto meno stabile.
Prima di proseguire con la nostra analisi, ricordiamo alcuni termini tecnici. Un database è formato di tabelle: per esempio noi potremmo organizzarci la vita con una tabella di contatti, una di appuntamenti e una di cose da fare. Ogni tabella è composta di record (le righe: per esempio tra i contatti ogni record definisce una persona) e ogni record è fatto di campi (per esempio, di ogni contatto memorizziamo nome, telefono, data di nascita...) Un database nudo e crudo serve a poco. Certo, un grande elenco dei prezzi dei prodotti venduti in un supermercato è utile, ma quel che il direttore del punto vendita vuole davvero è un sistema che permetta alle cassiere di battere scontrini, al responsabile approvvigionamento di controllare le scorte, al contabile per verificare la redditività: insomma, una applicazione costruita sopra al motore, con le sue schermate e i suoi pulsanti, i controlli e i messaggi di errore.
Creare una interfaccia utente al di sopra di un database — per consentire di visualizzare, collegare, riassumere i dati — è banale in FileMaker: basta cliccare e trascinare i nomi dei campi sullo schermo. Si ottengono così schermate dove gli operatori (noi stessi o altre persone) potranno inserire dati o fare ricerche. FMP (a differenza di Access) non ha un suo linguaggio di programmazione interno, ma permette di concatenare azioni elementari e collegare queste macro-azioni (chiamate "script") a pulsanti che posizioniamo a video: nello stile di Automator, per chi è familiare con OS X Tiger . In FileMaker non è possibile collegare azioni alla modifica dei campi; per esempio, se abbiamo una tabella DolciumiInVendita e un operatore abbassa il prezzo della Torta Sacher sarebbe interessante scatenare l'inserimento di un record nella tabella MessaggiAlSupervisore. FileMaker tuttavia permette di inserire controlli in fase di inserimento dati (per esempio, "non accettare un numero inferiore a zero nel campo prezzo") e campi calcolati (per esempio: "inserisci automaticamente il venti per cento dell'imponibile nel campo Iva").
MySQL nasce senza una interfaccia utente: di base, tutte le operazioni vanno eseguite digitando comandi al Terminale usando un linguaggio potente ma inflessibile chiamato SQL. Un esempio: per cercare i dolci più economici potremmo scrivere SELECT * FROM DolciumiInVendita WHERE prezzo < 10. Certo, è molto più difficile che in FileMaker, ma ci sono vantaggi. Immaginate di avere in memoria un catalogo di quadri e di voler trovare quelli in cui l'altezza è maggiore della larghezza. In FileMaker, premerete Mela-F e poi resterete lì a grattarvi la testa per parecchio (vedere "Il quesito della Susi"). In MySQL scriverete SELECT * FROM quadri WHERE altezza>larghezza.
L'interfaccia utente per un database MySQL, così, tipicamente viene disegnata in HTML. Un programmatore poi provvede a collegare le istruzioni SQL agli oggetti visibili a schermo, usando un altro linguaggio (come per esempio Java, PHP o Perl).
MySQL dalla versione 5 introduce i trigger , azioni preprogrammate associabili ai cambiamenti nel valore di un campo: quindi è possibile creare soluzioni come quella che immaginavamo poco fa relativa al supervisore che viene avvertito. Entrambi i programmi possono funzionare per mesi senza battere ciglio. FMP 8 da questo punto di vista è meglio dell'immediato predecessore. MySQL è un mulo infaticabile che si vede lavorare per anni senza richiedere un solo riavvio: ne esiste anche una versione in clustering , che distribuisce il carico di lavoro su più macchine e che resiste dunque ai guasti dell'hardware su uno dei sistemi impiegati. Entrambi i programmi sono forniti con un software che permette di recuperare database corrotti da problemi esterni, come dischi guasti o prese dell'alimentazione staccate nel momento sbagliato. Una base dati non viene mai registrata in forma crittografica, per motivi di prestazioni, quindi se un malintenzionato riesce a prendere il controllo che calcolatore su cui girano le informazioni può sempre trovare il modo di leggere i dati. Se la base dati va usata attraverso Internet ma contiene informazioni preziose (come i numeri di carta di credito dei clienti di un e-commerce, oppure le anagrafiche dei pazienti di uno studio medico) è consigliabile usare due calcolatori: il motore database sarà sconnesso dalla Rete e connesso privatamente a un server web. Questa disposizione è relativamente banale in ogni versione di MySQL e possibile in FMP Server 8 (le versioni precedenti e le versioni non-Server di FMP non si raccapezzano sui calcolatori con più di una scheda di rete).
Una soluzione meno sicura ma accettabile per molti usi è di identificarsi e poi accedere al motore di database da lontano su una connessione crittografica (i dati vengono cifrati dal motore di database e decifrati dal vostro calcolatore una volta ricevuti). Le precedenti versioni di MySQL e FMP non lo consentivano, ma le versioni attuali sì. Dietro password, possiamo concedere agli utenti registrati accesso solo ad alcune informazioni tra tutte quelle disponibili. Per esempio, gli agenti commerciali di una azienda potrebbero accedere alle disponibilità e ai prezzi di listino di un catalogo prodotti, ma non ai costi di produzione. In FileMaker è possibile rendere accessibili alcuni record solo ad alcune persone, anche se la funzionalità è ben nascosta (vedere "A ciascuno il suo"). Per esempio, ogni agente commerciale potrebbe vedere nella tabella "contatti" solo quelli che ha stipulato lui stesso.
In MySQL tutte le regole di accesso sono stipate in un database dedicato. Una istruzione da digitare a linea di comando permette di aggiungere o revocare i privilegi. È possibile consentire l'accesso solo da alcune postazioni; per esempio
GRANT select ON accomazzinet.prodotti TO 'akko'@'uffici.accomazzi.net' IDENTIFIED BY 'password' consente all'utente akko di leggere i dati (ma non di modificarli) della tabella prodotti dentro al database accomazzinet quando si collega dall'ufficio. FMP è un tipico programma commerciale: il pacchetto base viene venduto a un prezzo abbordabile ma funzionalità volutamente limitate, i blocchi scompaiono passando alla versioni proposte a costi via via crescenti. La versione Advanced offre la possibilità di creare soluzioni che non richiedono di possedere una copia di FileMaker — dalla versione 8 è persino possibile ridefinire la barra dei menu — ma l'applicativo così generato sarà necessariamente monoutente. La versione Server consente di amministrare remotamente il motore di database e rimuove il vincolo su numero massimo di database aperti e di utenti parallelamente al lavoro. La versione Advanced Server rimuove il limite sulle connessioni via web — FMP infatti crea automaticamente pagine web che rispecchiano le schermate del programma, in modo che sia possibile realizzare una soluzione multiutente in cui i nostri collaboratori si connettono usando Explorer, Safari o Firefox, anche senza possedere FMP.
MySQL è un tipico programma Open Source. Potete liberamente scaricare da Internet una versione senza alcun limite, potentissima e dannatamente difficile da configurare ed usare. Il software è gratuito per uso personale, ma uno sviluppatore che ne faccia uso per realizzare una soluzione proprietaria per un cliente è tenuto a pagare una tariffa di 500 dollari — tuttavia, non ci sono controlli.
Se la vostra base dati viene fruita attraverso il web, forse il server che la ospita si trova a cinquecento chilometri da voi, a tre metri d'altezza, senza monitor né tastiera. In questi casi sono indispensabili utility di amministrazione da remoto. FileMaker Server 8 (la versione che non consente di creare o progettare il database, ma solo di pubblicarlo) introduce finalmente un programma del genere. Lo troviamo modesto e francamente migliorabile: ci è anche capitato che un database aperto con questo programma poi non risulti effettivamente disponibile in Rete. MySQL è corredato da un software del genere, scaricabile separatamente dal sito www.mysql.org. Ha qualche difetto di visualizzazione ma funziona bene e permette anche di programmare backup periodici da remoto. Il problema in FileMaker si risolve così. Andate in "Definisci i campi". Definite un campo chiamato "PiuLargoCheAlto" di tipo calcolato. Inserite al suo interno la formula "altezza > larghezza". Fate una ricerca su questo campo: se vale 1, il quadro è verticale, altrimenti è orizzontale. Non c'è altro modo.