Guida pratica al DDL (Data Definition Language) iN SQL

Quando senti “DDL SQL”, ti stai riferendo al Data Definition Language (Linguaggio di Definizione Dati). Questa parte del linguaggio SQL è usata per definire, modificare ed eliminare la struttura (o schema) degli oggetti in un database, non i dati al loro interno.

Cos’è il DDL?

Mentre il DML (Data Manipulation Language) si occupa di inserire, modificare, eliminare e leggere i dati nelle tabelle, il DDL si occupa degli “scheletri” del database: tabelle, viste, indici, stored procedure, trigger, e persino il database stesso.

Pensa al DDL come agli strumenti che un architetto userebbe per progettare e costruire le fondamenta e le pareti di un edificio. Non si preoccupa dell’arredamento o degli abitanti (quello sarebbe DML), ma della struttura portante.

Le operazioni DDL sono generalmente auto-commit. Questo significa che, una volta eseguite, le modifiche alla struttura del database sono permanenti e non possono essere facilmente annullate con un ROLLBACK (anche se in alcuni database o contesti transazionali più avanzati ci sono delle eccezioni o accorgimenti). Per questo motivo, le operazioni DDL devono essere eseguite con grande cautela, specialmente in ambienti di produzione.


I Comandi Principali del DDL

Ecco i comandi DDL più comuni e le loro funzioni:

1. CREATE: Creare Nuovi Oggetti

Il comando CREATE è usato per costruire nuovi oggetti nel database.

Scopo: Creare tabelle, database, viste, indici, stored procedure, ecc.

Esempio 1: Creare una Tabella

Questo è l’uso più frequente. Definisci il nome della tabella, i nomi delle colonne, i loro tipi di dato e i vincoli (come PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY).

SQL

CREATE TABLE Dipendenti (
    ID INT PRIMARY KEY IDENTITY(1,1), -- Chiave primaria auto-incrementante
    Nome VARCHAR(50) NOT NULL,        -- Nome non può essere NULL
    Cognome VARCHAR(50) NOT NULL,     -- Cognome non può essere NULL
    DataNascita DATE NULL,            -- Data di nascita opzionale
    Email VARCHAR(100) UNIQUE,        -- Email deve essere unica
    DipartimentoID INT,
    CONSTRAINT FK_Dipartimento FOREIGN KEY (DipartimentoID) REFERENCES Dipartimenti(ID)
);

Esempio 2: Creare un Database (in SQL Server)

SQL

CREATE DATABASE MioNuovoDatabase;

Esempio 3: Creare un Indice

Un indice migliora le performance delle query, agendo come un indice di un libro per velocizzare la ricerca.

SQL

CREATE INDEX IX_Dipendenti_Cognome ON Dipendenti (Cognome);

2. ALTER: Modificare Oggetti Esistenti

Il comando ALTER è usato per modificare la struttura di un oggetto database esistente senza doverlo eliminare e ricreare.

Scopo: Aggiungere, eliminare o modificare colonne, aggiungere/rimuovere vincoli, rinominare oggetti (a volte).

Esempio 1: Aggiungere una Nuova Colonna a una Tabella

SQL

ALTER TABLE Dipendenti
ADD Salario DECIMAL(10, 2) NULL;

Esempio 2: Modificare il Tipo di Dato di una Colonna

SQL

ALTER TABLE Dipendenti
ALTER COLUMN Salario DECIMAL(12, 2) NOT NULL; -- Ora il salario non può essere NULL

Esempio 3: Eliminare una Colonna da una Tabella

SQL

ALTER TABLE Dipendenti
DROP COLUMN DataNascita;

3. DROP: Eliminare Oggetti

Il comando DROP elimina completamente un oggetto dal database. Questa operazione è irreversibile nella maggior parte dei casi (a meno che tu non abbia un backup!).

Scopo: Eliminare tabelle, database, viste, indici, ecc.

Esempio 1: Eliminare una Tabella

Questo comando elimina la tabella e tutti i dati al suo interno.

SQL

DROP TABLE Dipendenti;

Esempio 2: Eliminare un Database

SQL

DROP DATABASE MioNuovoDatabase;

4. TRUNCATE: Svuotare una Tabella (e resettare gli ID)

Sebbene spesso confuso con DELETE, TRUNCATE è un comando DDL perché agisce sulla definizione e sulla gestione dello spazio della tabella, non solo sui dati.

Scopo: Rimuovere tutte le righe da una tabella in modo rapido, liberando lo spazio allocato e resettando eventuali contatori IDENTITY (auto-incremento).

Esempio:

SQL

TRUNCATE TABLE Dipendenti;

Differenza con DELETE:

  • TRUNCATE è molto più veloce su tabelle grandi perché non registra ogni singola eliminazione nel log delle transazioni (meno overhead).
  • TRUNCATE non attiva i trigger DELETE.
  • TRUNCATE resetta i contatori IDENTITY a zero (o al valore seed iniziale).
  • TRUNCATE non può essere usata con una clausola WHERE. Elimina tutto.
  • TRUNCATE non può essere eseguita su tabelle che hanno una relazione FOREIGN KEY referenziata da altre tabelle (a meno che non sia stata definita una relazione ON DELETE CASCADE o si disabilitino temporaneamente i vincoli).

5. RENAME: Rimuovere Oggetti (specifico di alcuni DB, in SQL Server si usa sp_rename)

In alcuni sistemi database (come MySQL o Oracle), esiste un comando RENAME esplicito nel DDL. In SQL Server, la funzionalità di rinominare oggetti è spesso gestita tramite procedure di sistema come sp_rename.

Scopo: Cambiare il nome di una tabella, colonna, o altro oggetto.

Esempio (SQL Server – usando sp_rename):

SQL

EXEC sp_rename 'Dipendenti', 'Impiegati';

DDL in Contesto: DML e DCL

Come menzionato prima, il DDL è una delle tre principali categorie di comandi SQL:

  • DDL (Data Definition Language): Per la struttura del database (es. CREATE TABLE, ALTER TABLE, DROP TABLE).
  • DML (Data Manipulation Language): Per i dati all’interno della struttura (es. SELECT, INSERT, UPDATE, DELETE).
  • DCL (Data Control Language): Per i permessi e il controllo degli accessi (es. GRANT, REVOKE).

Comprendere il DDL è fondamentale per chiunque si occupi della progettazione, implementazione e manutenzione di un database, in quanto permette di modellare lo “scheletro” su cui poi si basano tutte le operazioni sui dati.