MySQL: come gestire database in maniera semplice

MySQL: come gestire database in maniera semplice

MySQL è un linguaggio open source che permette di gestire database, basati sul modello relazionale. Ecco un breve definizione, tratta da Wikipedia, di modello relazionale:

In informatica il modello relazionale è un modello logico di rappresentazione o strutturazione dei dati di un database implementato su sistemi di gestione di basi di dati (DBMS), detti perciò sistemi di gestione di basi di dati relazionali (RDBMS).

Si basa sulla teoria degli insiemi e sulla logica del primo ordine ed è strutturato intorno al concetto matematico di relazione (detta anche tabella). Per il suo trattamento ci si avvale di strumenti quali ilcalcolo relazionale e l’algebra relazionale.

Venne proposto da Edgar F. Codd nel 1970 per semplificare la scrittura di interrogazioni sui database e per favorire l’indipendenza dei dati; venne reso disponibile come modello logico in DBMSreali nel 1981. Oggi è uno dei modelli logici più utilizzati, implementato su moltissimi DBMS sia commerciali che open source.

iconDB

Dal punto di vista pratico, il modello relazionale, è basato su definizioni/operazioni algebriche, che permettono di “ordinare” correttamente il nostro DB. Dal momento che questo post ha lo scopo di introdurre il lettore a questo argomento, partiamo da un esempio pratico, per capire un po’ di algebra relazionale. Facciamo il caso di questo schema logico, che spiega come vengono gestiti i dipendenti di vari supermercati.

Relazione 1: Dipendenti(Codice Fiscale, Cognome, Nome, Data di Nascita, Città di residenza)

Relazione 2: Supermercati(ID, Città, Via, Numero Civico, Telefono)

Relazione 3: Assunzioni(ID Super, Dipendente, Stipendio)

Queste relazioni, possono essere riempite con i relativi dati, dal momento che sono dal punto di vista pratico, delle tabelle.

Codice FiscaleCognomeNomeData di nascitaCittà di Residenza
AAABBB12RossiMario01/01/80Milano
BBBCCC12VerdiMarco02/01/81Roma

 

IDCittàViaNumero CivicoTelefono
A1MilanoVia Roma120202
A2RomaVia Milano160606

 

ID SuperDipendenteStipendio
A1AAABBB121.750€
A2BBBCCC122.000€

 

Ci sono alcuni concetti importati. I nome in alto ad ogni tabella, vengono chiamati attributi, mentre le righe vengono chiamate tuple. Degli attributi, ce ne sono alcuni importanti. Il codice fiscale, ha la proprietà di essere unico per ogni persona italiana. Quindi viene considerato una chiave primaria, dal momento che è in grado di individuare ogni persona. Per questo motivo, non ci possono essere due tuple, con lo stesso codice fiscale ! Stesso discorso vale per ID, che ha il ruolo di identificare ogni supermercato. Nell’ultima tabelle, possiamo vedere che entrano in gioco queste chiavi primarie; esse sono dette anche chiave esterne, dal momento che un’eventuale tupla, con un codice fiscale che non esiste nella prima relazione, non avrebbe senso ! Viene assunta una persona, che non è un dipendente ! Le prossime definizioni, riguardo alle operazioni possibili in algebra relazionale, sono tratte da Wikipedia:

 

Operatori dell’algebra relazionale

L’algebra relazionale ha 6 operatori di base, nessuno dei quali può essere omesso senza perdere in espressività, e diversi operatori derivati, che possono cioè essere definiti come combinazione di operatori primitivi.

Operatori fondamentali (di base):

  1. Unione (operatore binario)
  2. Differenza (operatore binario)
  3. Prodotto cartesiano (operatore binario)
  4. Selezione (operatore unario)
  5. Proiezione (operatore unario)
  6. Ridenominazione (operatore unario)

Operatori derivati (da quelli di base):

  1. Intersezione (operatore binario)
  2. Join (operatore biario) in varie forme (theta-join, natural-join, ecc.)
  3. Divisione (operatore binario)

Indichiamo con r(R), la relazione r definita sullo schema R. R è un insieme di attributi.

Unione, intersezione, differenza

Dato che le relazioni sono degli insiemi ha senso definire su di esse gli operatori insiemistici tradizionali come unione, differenza e intersezione. L’unico vincolo è quello di avere delle tuple omogenee cioè definite sugli stessi attributi.

  • l’unione di due relazioni r1 e r2 definite sullo stesso insieme di attributi X è indicata con r1\cup r2 ed è una relazione ancora su X contenente le tuple che appartengono a r1 oppure a r2,senza ripetizioni delle eventuali tuple ripetute.
  • la differenza di r1(x) e r2(x) è indicata come r1-r2 ed è una relazione su X contenente le tuple che appartengono a r1 e non appartengono a r2.
  • l’intersezione di r1(X) e r2(X) è indicata con r1\cap r2 ed è una relazione su X contenente le tuple che appartengono sia a r1 che r2.

Ridenominazione

L’operatore di ridenominazione, r, modifica lo schema di una relazione, cambiando i nomi di uno o più attributi. Quest’operazione è molto utile per ottenere delle tuple omogenee quando non lo sono anche se il campo semantico di applicazione della query lo è. Sia r una relazione definita sull’insieme di attributi X e sia Y un (altro) insieme di attributi con ordinamento per gli attributi in Xe un ordinamento per quelli in Y. Allora la ridenominazione \rho _{{B_{1},B_{2},\dots ,B_{k}\leftarrow A_{1},A_{2},\dots ,A_{k}}}(r) contiene una tupla t' per ciascuna tupla t in r, definita come segue: t' è una tupla su Y e t'[B_{i}]=t[A_{i}], per i=1,\dots ,n. La definizione conferma che ciò che cambia sono i nomi degli attributi, mentre i valori rimangono inalterati e vengono associati ai nuovi attributi.

Prodotto cartesiano

È definito solo nel caso in cui le relazioni non abbiano attributi in comune, e al contrario dell’omonimo operatore sugli insiemi, il risultato non è un insieme di tuple, ma un’unica tupla composta dalle due tuple delle relazioni originarie.

Logica proposizionale

Selezione

È un operatore unitario e restituisce come risultato una relazione.

Chiamiamo “formula relazionale” un’espressione che mette in relazione attributi per mezzo degli operatori =,!= (diverso da),<,>,<=,>=. Sia r(X) una relazione sull’insieme di attributi X, e F una formula relazionale. La selezione di r rispetto a F, denotata da “S” F(r), è una relazione definita su X, contenente le tuple di r che rendono F vera, cioè la selezione da una tabella non è altro che l’insieme di righe che appartengono alla tabella e che soddisfano una serie di condizioni indicate nella selezione stessa.

Proiezione

L’operatore di proiezione effettua una modifica al grado della relazione a cui si applica. Il simbolo è \Pi  a pedice del quale viene indicata la lista degli attributi che costituiscono la nuova relazione, tali attributi sono un sottoinsieme degli attributi della relazione originale. La proiezione \Pi _{{\left(A_{1},A_{2},...,A_{n}\right)}}(r) produce una relazione r_{p} il cui schema è l’insieme degli attributi A_{n} e la cui istanza è la restrizione delle tuple di r sugli attributi A_{n}.

Formalmente la proiezione elimina le tuple che dovessero risultare duplicate nella relazione finale, infatti istanze con presenza di tuple duplicate non sono ammesse dal modello relazionale.

Join

Il join è un’ operazione binaria che si applica a due relazioni R(A_{1},A_{2},...,A_{m}) ed S(B_{1},B_{2},...,B_{n}). La funzione del join è unire tuple logicamente collegate delle due relazioni in un’unica tupla. La relazione risultante Rj(A_{1},A_{2},...,A_{m},B_{1},B_{2},...,B_{n}) ha come schema l’insieme degli attributi di R ed S, mentre l’estensione viene espressa come il prodotto cartesiano di R ed S seguito dalla selezione delle tuple che soddisfano la condizione di join. L’operatore di join non è un operatore elementare dell’algebra relazionale ed è definito nel seguente modo: \bowtie _{{F\left(R,S\right)}}\left(R,S\right)=\sigma _{{F\left(R,S\right)}}\left(R\times S\right). Per il significato e la sintassi della condizione di selezione F(R,S) vedere l’operatore di selezione.

Nel caso che il criterio di selezione delle tuple sia determinato da un operatore di confronto (<,>,=,ecc.) si può parlare di theta-join. Un caso particolare del theta-join è l’equi-join, in cui si applica l’operatore di uguaglianza.

Nel caso si voglia eseguire un equi-join su attributi con lo stesso nome, si può ricorrere a un’operazione particolare chiamata natural-join. In presenza di due attributi uguali, viene rinominato l’attributo comune in una delle due relazioni, viene eseguito l’equi-join rispetto ai due attributi, e viene eliminata una delle colonne che risultano uguali. Nel natural-join, quindi, la condizione di join è implicita, e lo schema della relazione risultante è l’insieme degli attributi di R ed S meno uno degli attributi uguali.

Divisione

La divisione è un’operazione binaria che si applica a due relazioni r ed s, rispettivamente con schemi relazionali R=(A_{1},...,A_{m}) ed S=(A_{{i_{{1}}}},...,A_{{i_{{n}}}}), dove S è un sottoinsieme proprio di R (e quindi m-n>0 sempre).

La relazione risultante, r\div s, è detta il quoziente della divisione di r per s e ha come schema R-S, cioè l’insieme degli attributi di R non compresi in S. In essa saranno presenti tutte (e solo) le tuple che possano essere combinate con una qualsiasi tupla di s in modo tale che la tupla risultante appartenga ad r.

 

Ora che abbiamo trattato l’argomento, alla base dei DBMS, passiamo “finalmente” al lato informatico di MySQL, introducendo il linguaggio vero e proprio !

Per poter creare dei DBMS, possiamo usare il nostro stesso PC, installando il server vero e proprio e un programma di tipo client, in grado di accedere a quest’ultimo; quest’ultimo si chiama MySQLWorkbench.

Come scritto in precedenza, MySQL è “open source”, però la versione gratuita, è limitata rispetto a quella per il Business, per i nostri progetti, va più che bene !

Installazione Server

Per installare il Server MySQL sul nostro PC, basta selezionare la versione per il proprio sistema operativo, da questo pagina http://dev.mysql.com/downloads/mysql/. L’installazione per Windows contiene anche ulteriori utilities, per gestire il server.

Installazione Workbench

Per installare l’applicazione che permette di fare query, creare DB veri e propri, occorre installare il programma da questo link http://dev.mysql.com/downloads/tools/workbench/

 

MySQL

Ora che abbiamo installato tutti i software necessari, possiamo finalmente aprire i programmi e creare le credenziali d’accesso di tipo “root”, ovvero che hanno tutti i privilegi,.

Un po’ di sintassi SQL

L’esempio più semplice per effettuare una query, ovvero una richiesta, come ad esempio visualizzare tutti i dipendenti, si scrive in questo modo:

SELECT *

FROM Dipendenti

WHERE TRUE

In generale la sintassi è:

SELECT [lista attributi]

FROM [relazione]

WHERE [condizione]

Se volessimo visualizzare tutti i dipendenti che hanno come città di residenza Milano, si scrive:

SELECT *

FROM Dipendenti

WHERE CITTA = ‘Milano’

Ci altre operatori, che permettono di fare dell’operazioni più avanzati, come ad esempio trovare il massimo, minimo, media di una lista di tuple. Su questi operatori, bisogna prestare attenzione, perché la loro implementazione non è immediata:

SELECT Codice Fiscale., Max(Stipendio)

FROM Dipendenti JOIN Assunzioni on (Codice Fiscale = Dipendenti)

 

Per creare un nuovo schema logico, possiamo farlo attraverso la barra degli strumenti presenti in Workbench. Sempre attraverso query, possiamo inserire dati. Per farlo si crivere:

INSERT [nome relazione] VALUES [valori]

Per esempio:

INSERT Dipendenti VALUES (AAABBB, Rossi, Mario, 01-01-1980, Milano)

Per cancellare una singola tupla, la sintassi è:

DELETE

FROM [relazione]

WHERE [condizione]

Spero che questa introduzione sia stata chiara e sopratutto utile, per capire i prossimi articoli, in cui si farà uso di DB, specialmente con Arduino.

 

 

 

ismanettoneblog