Perché non usare MySql a fini didattici

Molto spesso, quando ci vengono affidati corsi di base di SQL per lavoratori neoassunti, ci viene chiesto di utilizzare MySql.
In questo articolo vi spiego cinque motivi per cui MySql non è a mio parere il DBMS migliore per illustrare l’SQL a scopo didattico,
in particolar modo a persone che si approcciano per la prima volta seriamente a tale linguaggio.

Alcune di queste caratteristiche potrebbero essere viste anche come un “benefit” se osservate dal punto di vista di un programmatore esperto, ma didatticamente rappresentano per me un ostacolo nella strada per insegnare e imparare a scrivere query che
restituiscano informazioni corrette, oltre a semplicemente terminare senza errori di esecuzione.

 

Gestione colonne non raggruppate

Molto spesso, il primo concetto un po’ ostico da digerire per gli studenti all’interno di un corso introduttivo di Sql è il raggruppamento. La tentazione di aggiungere nella select, senza l’utilizzo di funzioni di aggregazioni, delle colonne che non sono presenti nel group by è molto forte all’inizio, nonostante le ripetute raccomandazioni. In questi casi, un bel messaggio di errore sarebbe gradito ed “educativo”. Invece su Mysql, una query come la seguente compila senza errori associando ad ogni regione di residenza un nome casuale tra quelli del gruppo.

SELECT       RegioneResidenza,
                      Nome,
                      count(*) as NumeroClienti
FROM          Clienti
GROUP BY RegioneResidenza;

 

FULL JOIN non utilizzabile

Un altro argomento fondamentale in un corso introduttivo sull’SQL sono le varie tipologie di JOIN.
Per quanto un programmatore esperto possa raggiungere facilmente lo stesso obiettivo con del codice leggermente più complicato,
dal punto di vista didattico la mancanza della FULL JOIN risulta frustante per gli insegnanti e per gli studenti, in quanto nel flusso
della lezione è naturale chiedersi quale sintassi utilizzare per avere un comportamento pari “all’unione” dei costrutti LEFT JOIN e RIGHT JOIN.

 

Gestione JOIN senza ON

Purtroppo l’esperienza in azienda mi ha mostrato come tutt’oggi molti sviluppatori utilizzino la sintassi deprecata “virgola nella From più condizioni nella where” per eseguire una JOIN tra più tabelle, scrivendo query come questa

SELECT    *
FROM       Fatture, Clienti
WHERE   Fatture.IdCliente = Clienti.IdCliente;

Tra i molteplici motivi per cui questa sintassi è sconsigliata (probabilmente ci dedicheremo un altro articolo), potrebbe esserci quello per cui l’inavvertita cancellazione delle condizioni nella where porterebbe a dei risultati abbondantemente errati, invece di un errore in fase di compilazione. Tuttavia ciò non si applica a MySql. Questa query infatti compila ed è equivalente ad una cross join. Provare per credere…

SELECT           *
FROM              Fatture
INNER JOIN Clienti;

 

Gestione nuove colonne in tabelle già popolate

Dopo le lezioni sull’interrogazione, si passa alle istruzioni DML. Reputo molto istruttivo dal punto di vista didattico far riflettere gli studenti sulla necessità di definire una nuova colonna con l’attributo NULL se la tabella è già popolata. Dopo la creazione, aggiorneremo tale colonna con un update e infine, se necessario, la modificheremo per darle l’attributo NOT NULL.

Su MySQL invece possiamo tranquillamente aggiungere fin da subito una colonna con l’attributo NOT NULL. Verranno inseriti in automatico degli zeri se la colonna è di tipo numerico, o alternativamente delle stringhe vuote. Tale comportamento può essere anche comodo in fase di sviluppo per un programmatore esperto e consapevole, ma dal punto di vista didattico non è l’ideale per chi sta imparando.

 

Operazioni tra tipi differenti

Una fetta importante degli errori runtime su codice Sql è legato ad errate conversioni in operazioni tra dati di tipo differente.
Dal punto di vista didattico reputo fondamentale investire molto tempo sul concetto di tipo associato alle colonne,  sottolineando come esso sia un elemento cardine nella definizione di tabella e di quante problematiche (anche legati alle performance) possa portare la scelta di tipi sbagliati. Usare MySql per fare le dimostrazioni non è proprio l’ideale visto che questa query compila e da 1.

SELECT   ‘a’+1;

 

Articoli correlati

Scopri le differenze tra Sql Server e Oracle per lavorare correttamente su entrambi gli ambienti.