SQL: creazione di un database

I database relazionali ricoprono un ruolo fondamentale nella progettazione e sviluppo di qualsiasi applicativo software. Imparare a modellare ed interrogare un database oltre a manipolare opportunamente i dati mediante il linguaggio SQL è alla portata di tutti. Iniziamo a scoprire alcune caratteristiche di questo linguaggio mediante le istruzioni per creare un database e definire le tabelle che lo costituiscono.

Share

Reading time: 4 minutes

Nonostante noi tutti usiamo diverse applicazioni mobile e visitiamo diversi siti internet, difficilmente ci fermiamo a pensare come queste siano strutturate e funzionino. In particolare, anche molti sviluppatori, si concentrano sul design e sul linguaggio di programmazione per rendere più accattivante ed efficiente il proprio progetto, tralasciando uno dei componenti principali di qualsiasi progetto: il database. Progettare in modo opportuno e scrivere correttamente le query è fondamentale per lo sviluppo di qualsiasi software. In questa serie di articoli vogliamo introdurre il linguaggio più famoso e utilizzato per interrogare le basi dati relazionali: l’SQL.

Il Structured Query Language, o per gli amici SQL, è un linguaggio di programmazione introdotto con le prime versioni dei database relazioni sia per estrarre i dati dal database, sia per manipolare i dati. È essenziale conoscerlo al giorno d’oggi per lavorare con i database e migliorare l’efficienza di qualsiasi progetto, dal più piccolo al più grande. In questo articolo introdurremo velocemente le tipologie di dato che sono disponibili per i database relazionali e, successivamente esamineremo le istruzioni principali per la creazione di un database e delle tabelle.

La creazione delle tabelle deve avvenire da un processo di modellazione ben strutturato e accurato. Se volete approfondire questo aspetto vi invitiamo a leggere il libro “Database designer: Dalla teoria alla pratica per apprendere i segreti della progettazione dei database relazionali” per ora solo disponibile in lingua italiana.

Per semplicità i comandi che riporteremo sono relativi a MySQL, uno dei database maggiormente utilizzati al mondo. Infatti, essendo un prodotto open source e gratuito, nonostante sia sviluppato da un colosso mondiale come Oracle, viene scelto per supportare la creazione sia di siti web (dai blog agli e-commerce) sia di applicativi mobile. Esistono ovviamente altri database relazionali a partire dal database commerciale di Oracle per poi passare a PostgreSQL fino ad arrivare ad Access. Ogni database ha le sue peculiarità e si differenzia anche per alcuni dettagli nel linguaggio SQL. Pertanto, si suggerisce sempre di leggere la documentazione del database che si utilizza.

Tipi di dati in SQL

In SQL c’è una pletora di tipologie di dato. Si parte da quelli più elementari come le stringhe (ad esempio VARCHAR) e i numeri (a esempio INTEGER) fino ad arrivare a quelli più complessi come i dati geografici e i JSON. Nonostante alcuni di essi sia definiti nello standard SQL, alcuni tipi sono specifici del database stesso. Si riporta una tabella con le varie tipologie di dato che potrebbe non essere esaustiva.

Tipologia di dato SQL
Testo

CHARACTER [VARYING] [(Lunghezza)] [CHARACTER SET NomeFamigliaCaratteri]

VARCHAR (Lunghezza)

TEXT

Binario

BIT [VARYING] [(Lunghezza)] 

BLOB

BINARY

Booleano BOOLEAN
Numeri interi

INTEGER

SMALLINT

BIGINT

Numeri reali

NUMERIC [( Precisione, Scala )]

DECIMAL [( Precisione, Scala )]

FLOAT [(n)]

REAL

DOUBLE PRECISION

Tempo  

TIMESTAMP [(Precisione)] [WITH TIME ZONE]

DATE

DATETIME

JSON JSON
Spaziali  

SDO_GEOMETRY

GEOMETRY

POINT

LINESTRING

POLYGON

Creazione di un database

Un database è una collezione strutturata di dati organizzati e memorizzati in modo da consentire un recupero e una manipolazione efficienti dei dati stessi. Il comando CREATE DATABASE a creare un nuovo database. La sintassi è la seguente

				
					CREATE DATABASE db_name;
				
			

Eliminazione del database

Il comando DROP DATABASE serve a eliminare un database esistente. Quando si elimina un database, tutte le tabelle, i dati e gli altri oggetti del database (indici, viste, ecc) vengono eliminati definitivamente.

				
					DROP DATABASE db_name;
				
			

Tipi di comandi SQL

Prima di addentrarci nelle istruzioni del linguaggio SQL è opportuno fare una breve panoramica sulle tipologie di comandi a disposizione. I comandi si possono suddividere in

  • Data Definition Language (DDL) : sono utilizzati per definire lo schema del database. I comandi DML sono utilizzati per creare, modificare e cancellare le strutture del database, ma non i dati.
  • Data Manipulation Language (DML): sono utilizzati per leggere i dati e apportare modifiche al contenuto del database, ossia tutte le operazioni CRUD (creazione, lettura, aggiornamento e cancellazione).
  • Data Controlling Language (DCL): consentono di impostare i permessi degli utenti.
  • Transaction Control Language (TCL): sono utilizzati per gestire le transazioni nel database. Servono a gestire le modifiche apportate dalle dichiarazioni DML. Consentono inoltre di raggruppare le istruzioni in transazioni logiche.

Data Definition Language (DDL)

Il Data Definition Language viene utilizzato per definire la struttura o lo schema del database. Il DDL viene utilizzato anche per specificare proprietà aggiuntive dei dati. La struttura di memorizzazione e i metodi di accesso utilizzati dal sistema di database sono definiti da un insieme di dichiarazioni in un tipo speciale di DDL, chiamato linguaggio di definizione e memorizzazione dei dati. Queste istruzioni definiscono i dettagli di implementazione dello schema del database, che di solito sono nascosti agli utenti. I valori dei dati memorizzati nel database devono soddisfare determinati vincoli di coerenza.

Ad esempio, supponiamo che l’università richieda che il saldo del conto di un dipartimento non sia mai negativo. Il DDL offre la possibilità di specificare tali vincoli. Il sistema di database controlla questi vincoli ogni volta che il database viene aggiornato. In generale, un vincolo può essere un predicato arbitrario relativo al database. Tuttavia, i predicati arbitrari possono essere costosi per il test. Pertanto, il sistema di database implementa vincoli di integrità che possono essere testati con un overhead minimo.

I vincoli principali sono:

  • Vincoli di dominio: A ogni attributo deve essere associato un dominio di valori possibili (ad esempio, tipi di numeri interi, tipi di caratteri, tipi di data/ora). La dichiarazione che un attributo appartiene a un particolare dominio agisce come vincolo sui valori che può assumere.
  • Integrità referenziale: ci sono casi in cui si vuole garantire che un valore che appare in una relazione per un determinato insieme di attributi appaia anche in un certo insieme di attributi in un’altra relazione, ossia l’integrità referenziale. Ad esempio, il dipartimento elencato per ogni corso deve essere uno effettivamente esistente.

Creazione di una tabella

Il comando CREATE TABLE permette sia di definire tutti gli attributi (le colonne) della tabella che i vincoli di integrità, qualora presenti. La sintassi è la seguente:

				
					CREATE TABLE NomeTabella 
(NomeAttributo Dominio [ValoreDiDefault ] [Vincoli]
{ , NomeAttributo Dominio [ValoreDiDefault ] [Vincoli ]}
AltriVincoli
);
				
			

Modifica di un tabella

Mediante in comando ALTER TABLE è possibile:

  • aggiungere una nuova colonna
  • definire un nuovo valore di default per una colonna esistente
  • eliminare una colonna esistente
  • definire un nuovo vincolo di integrità
  • eliminare un vincolo di integrità esistente

La sintassi è la seguente:

				
					ALTER TABLE NomeTabella
< ADD COLUMN <Definizione-Attributo> |
   ALTER COLUMN NomeAttributo 
      < SET <Definizione-Valore-Default> | DROP DEFAULT>|
   DROP COLUMN NomeAttributo 
      < CASCADE | RESTRICT > |
   ADD  CONSTRAINT [NomeVincolo] 
      < definizione-vincolo-unique > | 
      < definizione-vincolo-integrità-referenziale > |
      < definizione-vincolo-check > |
   DROP CONSTRAINT [NomeVincolo] 
      < CASCADE | RESTRICT > 

				
			

I parametri RESTRICT e CASCADE indicano come il database deve comportarsi in presenza di qualche definizione di un altro elemento (colonna o vincolo) che si referenzia all’elemento oggetto della modifica. Di default viene attuata la politica del RESTRICT che non permette l’operazione qualora ci siano riferimenti incrociati. Diversamente, il CASCADE opera anche sulle dipendenze finché ne esistono.

Cancellazione di una tabella

Il comando DROP TABLE elimina la tabella di riferimento insieme al suo contenuto. La sintassi è la seguente:

				
					DROP TABLE NomeTabella  [ RESTRICT | CASCADE];
				
			

Di default si applica l’opzione RESTRICT che impedisce la rimozione della tabella qualora questa sia presente in qualche definizione di tabella, vincolo o vista. Con l’opzione CASCADE invece si modificano gli oggetti (viste e tabelle) che si referenziano alla tabella stessa.

More To Explore

Intelligenza artificiale

Gradio: applicazioni web in python per AI [parte1]

Scrivere applicazioni web per i nostri modelli di machine learning e/o di intelligenza artificiale può richiedere molto tempo e competenze che non sono in nostro possesso. Per snellire e velocizzare questo compito ci viene in aiuto Gradio, una libreria Python pensata per creare applicazioni web con poche righe di codice. Scopriamo le sue funzionalità base con alcuni esempi.

Intelligenza artificiale

AI: le migliori tecniche di prompt per sfruttare i LLM

Le tecniche di prompt sono alla base dell’uso dei LLM. Esistono diversi studi e linee guide per ottenere i migliori risultati da questi modelli. Analizziamo alcuni di essi per estrarre i principi fondamentali che ci permetteranno di ottenere le risposte desiderate in base al nostro compito.

2 risposte

Lascia un commento

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

Design with MongoDB

Design with MongoDB!!!

Buy the new book that will help you to use MongoDB correctly for your applications. Available now on Amazon!