Dopo aver affrontato gli aspetti favoreli di mySQL è giusto parlare anche dei limiti che mySQL ha in questo momento, parlo di “questo” momento perchè nei piani di sviluppo della mySQL AB è in previsione l'uscita delle versioni 4.1.x e 5.0.x che copriranno completamente o almeno in grande quantità il gap di features che attualmente ha mySQL nei confronti dei database server considerati di livello Enterprise (Es. Oracle, Informix ecc...).
Alcune delle limitazioni principali sono elencate di seguito:
Integrità referenziale:
Questa era senza dubbio la mancanza principale di mySQL rispetto ad altri database (tra cui anche Access) che però è stata sopperita mediante l'implementazione delle tabelle INNODB (seguiranno approfondimenti) che supportano le chiavi esterne.
Ve ne parlo perchè ritengo personalmente che il supporto ad INNODB (tipo di tabella che studieremo tra poco) sia ancora abbastanza instabile sia dal punto di vista delle performance che si ottengono utilizzando questi tipi di tabelle, sia per l'impossibilità ad utilizzare gli indici FULLTEXT (tipo di indice, seguiranno approfondimenti).
In sostanza prima dell'introduzione di questi tipi di tabelle l'utilizzo e il mantenimento delle chiavi esterne era affidato esclusivamente allo sviluppatore e di conseguenza il relazionamento tra le tabelle era garantito a livello logico e di implementazione dell'applicazione.
ESEMPIO PRATICO:
TABELLA PERSONA
IDpersona Nome Cognome
1 Massimo Caselli
2 Paolo Pippo
TABELLA TELEFONO
IDtelefono IDpersona Telefono
1 1 039/393030
2 2 039/393930
Supponiamo di eliminare il record numero 1 della tabella PERSONA, con mySQL senza utilizzo di INNODB bisogna provvedere, lato applicazione,ad eliminare dalla tabella TELEFONO anche il record in cui Idpersona vale 1.
In caso contrario si avrebbe nella tabella TELEFONO un record “orfano” della propria relazione con la tabella PERSONA.
Transazioni:
Quando si lavora con i database relazionali ci si trova in alcune situazioni a dover eseguire una serie di query di inserimento su diverse tabelle del database server, prendiamo come esempio l'aggiunta di una persona e di un numero di telefono alla nostra semplice rubrica dei contatti.
In questo caso dovremo eseguire queste operazioni:
- Inserimento nella tabella PERSONA
- Recupero dell'ID del nuovo record inserito in PERSONA
- Inserimento del numero di telefono precedentemente immesso da applicazione, con relativa associazione all'ID della persona appena aggiunta
Se durante uno di questi passaggi il DB andasse in crash, rischieremmo di avere nel database una nuova persona senza un numero di telefono associato.
Per ovviare a queste problematiche alcuni DB server gestiscono i gruppi di comandi SQL tramite transazioni, in sostanza l'inserimento reale dei dati avviene SOLO se tutte le istruzioni sono state eseguite correttamente.
In realtà anche questa problematica è stata risolta da mySQL con l'introduzione delle tabelle di tipo INNODB.
Stored procedures:
I server considerati di livello enterprise consentono di inserire all'interno del database stesso del codice procedurale.
Il che consente prima di tutto di semplificare il codice a livello applicativo ed in seconda battuta di migliorare le performance in quanto il DB server gestisce al meglio il codice da eseguire.
Breve overview sulle caratteristiche e funzionalità del database server MySQL