Corso MySQL #1: cos’è un database e come si rappresenta?

DiMarco Nisticò

PUBBLICATO IL 2 Gen 2019 ALLE 15:00 - AGGIORNATO IL 3 Agosto 2023 ALLE 16:24

In questa prima parte del corso SQL andremo a fare un’introduzione dettagliata sul linguaggio, spiegando il concetto di database e come si integrerà nel codice.

Il linguaggio SQL nasce nel 1974 nei laboratori IBM dall’esigenza di dover gestire grandi database che sfruttano il cosiddetto modello relazionale. In pochi anni diviene lo standard più utilizzato per quanto riguarda la gestione e la modifica di database di grandi e piccole dimensioni, con la possibilità di poter eseguire delle interrogazioni (query) all’interno del database stesso.

L’acronimo sta per Structured Query Language e si basa proprio sulla capacità di gestire grandi quantità di dati (database), che passano per un sistema di gestione dei dati, denominato DBMS (Database Management System). Attraverso il DBMS, che si tratta semplicemente di un software applicativo, è possibile eseguire delle azioni sul database, come l’aggiunta di nuove voci (istanze) o l’esecuzione di una particolare richiesta, come la ricerca di un dato o l’ordinamento secondo un criterio specifico. I due client DBMS più famosi sono sicuramente MySQL e Oracle, specializzati proprio nella creazione e gestione di database.

Tramite SQL è possibile eseguire quattro funzioni principali:

  1. Definition Language: creazione e modifica degli schemi dei dati
  2. Manipulation Language: creazione e modifica dei dati memorizzati
  3. Query Language: interrogare i dati attraverso particolari richieste
  4. Control Lanaguage: gestione degli strumenti di controllo dei dati, come gli utenti che possono accedere al database e così via

Per quanto il nome possa suggerire che si tratti di un semplice linguaggio di interrogazione, l’SQL permette non solo di effettuare richieste sulle istanze ma anche di accedere a quest’ultime e modificarle secondo le esigenze del database.

Ormai i database sono praticamente ovunque. Basti pensare alle grandi aziende, che devono gestire i dati di centinaia, se non migliaia, di dipendenti, registrando eventuali dati riguardanti le ore lavorative, lo stipendio o altre informazioni sensibili. E’ necessario quindi optare per un linguaggio che possa gestire tale mole di informazioni tramite codice. Il compito dell’SQL è proprio questo.

Il modello relazionale

Il modello relazionale (Entity-Relationship) è una rappresentazione logica di un database. Si basa sul concetto di entità-relazione, ovvero del legame che c’è tra tipologie diverse di dati. In questo modello sono presenti i seguenti elementi:

  • Entità: insieme di dati
  • Attributo: insieme delle informazioni per una specifica entità. Può essere unico per ogni singolo dato (chiave) oppure avere lo stesso valore per dati diversi
  • Relazione: legame tra due entità
  • Tupla: insieme di valori assunti dagli attributi

Facciamo un esempio molto semplice. Immaginiamo di dover costruire un database che gestisca l’elenco dell’intera popolazione italiana e che registri i valori di nome, cognome, codice fiscale e indirizzo. In questo caso avremo l’entità Popolazione, dove al suo interno ci saranno gli attributi nome, cognome, codice fiscale e indirizzo. Siccome il codice fiscale è unico per ogni personale, rappresenterà anche una chiave per uno specifico dato. I restanti attributi invece non possono essere chiavi poiché due persone possono chiamarsi allo stesso modo o vivere allo stesso indirizzo. Alla fine si ottiene uno schema a diagrammi, dove verranno rappresentati i vari collegamenti (relazioni) tra le diverse entità. Le entità vengono solitamente rappresentate con dei rettangoli, le entità con dei rombi e gli attributi con degli ellissi.

NOTA: anche le relazioni possono avere attributi propri.

Modello relazionale
Esempio di modello ER

Vincoli di partecipazione e ISA

In alcuni casi, specifici collegamenti possono essere rappresentati in maniera differente, ad esempio tramite una freccia verso l’entità o con un tratto in grassetto. Questa distinzione va a definire quelli che sono i vincoli di partecipazione. Tali vincoli sono determinati dalla tipologia di database che si vuole realizzare. Si suddividono in due categorie: partecipazione parziale e totale. La prima si rappresenta con un tratto in grassetto solamente verso un’entità e indica un grado di partecipazione da 1 a N (relazione Uno-a-Molti) per l’entità che ha il vincolo. La seconda invece si rappresenta con una freccia che punta verso l’entità che deve avere il vincolo. In questo caso il grado è esattamente 1 (relazione Uno-a-Uno).

Per spiegare meglio il concetto, consideriamo il caso di uno studente che segue corsi all’università. Se il vincolo di partecipazione è parziale, significa che lo studente deve seguire almeno un corso, ma può seguirne anche più di uno. Nel caso in cui la partecipazione è parziale, lo studente deve seguire almeno un corso ma al massimo può seguirne uno solo. Se non ci fosse nessun vincolo, lo studente potrebbe seguire 1 o N corsi ma anche nessuno.

Ora vediamo un particolare vincolo, denominato ISA. L’ISA permette di creare delle sottoentità (entità figlie) di un’entità principale (entità padre). In questo modo si creano entità dello stesso tipo ma che possiedono attributi differenti. Basti pensare ad esempio all’entità Impiegato, che si può differenziare in Impiegati a progetto e Impiegati a Tempo Indeterminato, ognuna con i propri attributi. Le sottoentità ereditano tutti gli attributi dell’entità padre, aggiungendo eventuali attributi specifici per quella sottocategoria. Si rappresenta con una freccia a triangolo verso l’entità padre, che si suddividerà poi nelle varie sottoentità. In molti casi è davvero utile adottare questo schema per rappresentare separatamente dati dello stesso tipo ma con attributi differenti.

Il modello logico

Una volta rappresentato correttamente lo scherma relazionare (modello ER), bisogna scrivere il relativo modello logico, facendo una lista delle varie entità e relazioni, con relativi attributi. Ovviamente bisogna fare riferimento allo schema relazionale disegnato, effettuando eventuali semplificazioni che possono risultare superflue nella stesura del codice in SQL.

Il modello logico permette di rappresentare in maniera più chiara come il database dovrà essere rappresentato, con le relative tabelle e tuple da dover inserire. Di seguito vi riportiamo un piccolo esempio di schema logico:

ENTITA’

Studente (CF: string, nome: string, cognome: string, indirizzo: string)

Corso (NomeCorso: string)

RELAZIONI

Segue (CFStudente:string, NomeCorso:string, nome: string, cognome: string)

Come potete notare, nello schema logico abbiamo aggiunto un ulteriore elemento ovvero la tipologia dell’attributo, che andrà poi definita in SQL. Infatti abbiamo contrassegnato i vari attributi con il tipo string poichè si tratta di una semplice stringa di testo. Ovviamente è possibile anche inserire un numero (integer) che può rappresentare l’età dello studente o il numero identificativo del corso che sta seguendo.

Dopo aver completato lo schema logico, si può passare finalmente alla programmazione in SQL, che vedremo nella seconda parte di questo corso.

Di Marco Nisticò

Sviluppatore informatico, cerco sempre di stare al passo con i tempi in un mondo ormai circondato dalla tecnologia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.