Skip to content

2. Tutorial su Firebird

Prima di affrontare le basi del linguaggio SQL, illustriamo al lettore come installare Firebird SGBD e il client grafico IB-Expert.

2.1. Dove trovare Firebird?

Il sito principale di Firebird è [http://firebird.sourceforge.net/]. La pagina dei download offre i seguenti link (aprile 2005):

Image

Si scaricheranno i seguenti elementi:

firebird-win32
SGBD per Windows
firebird-net-provider
una libreria di classi per le applicazioni .NET che consente di accedere a SGBD senza passare attraverso un driver ODBC.
firebird-ODBC-driver
il driver ODBC di Firebird

Eseguire l’installazione di questi elementi. Il driver SGBD viene installato in una cartella il cui contenuto è simile al seguente:

I file binari si trovano nella cartella [bin]:

fbguard.exe
consente di avviare/arrestare il SGBD
isql.exe
client in modalità terminale che consente di gestire i database

Si noti che, per impostazione predefinita, l'amministratore di SGBD si chiama [SYSDBA] e la sua password è [masterkey]. In [Démarrer] sono stati installati i seguenti menu:

Image

L'opzione [Firebird Guardian] consente di avviare/arrestare il SGBD. Dopo l'avvio, l'icona del SGBD rimane nella barra delle applicazioni di Windows:

Per creare e gestire database Firebird con il client da riga di comando [isql.exe], è necessario consultare la documentazione fornita con il prodotto nella cartella [doc].

2.2. a la documentazione di Firebird

La documentazione su Firebird e sul linguaggio SQL è disponibile sul sito di Firebird (gennaio 2006):

Image

Sono disponibili diversi manuali in inglese:

Firebird 1.5 Quick Start Guide
Per iniziare con FB
Firebird 1.5 Error Codes
per comprendere i codici di errore restituiti da FB

Sono disponibili anche manuali di formazione sul linguaggio SQL:

Image

Data Definition Guide
per scoprire come creare tabelle, quali tipi di dati sono utilizzabili, ...
Language Reference
la guida di riferimento per imparare SQL con Firebird

Un modo rapido per lavorare con Firebird e imparare il linguaggio SQL è utilizzare un client grafico. Un esempio di tale client è IB-Expert, descritto nel paragrafo seguente.

2.3. Lavorare con Firebird SGBD grazie a IB- Expert

Il sito principale di IB-Expert è [http://www.ibexpert.com/]. La pagina dei download offre i seguenti link:

Image

Sceglieremo la versione gratuita [Personal Edition]. Una volta scaricata e installata, si avrà a disposizione una cartella simile alla seguente:

Image

Il file eseguibile è [ibexpert.exe]. Normalmente è disponibile un collegamento nel menu [Démarrer]:

Image

Una volta avviato, IBExpert visualizza la seguente finestra:

Image

Utilizziamo l'opzione [Database/Create Database] per creare un database:

Server
potrebbe essere [local] o [remote]. In questo caso il nostro server si trova sulla stessa macchina di [IBExpert]. Scegliamo quindi [local]
Database
utilizzare il pulsante di tipo [dossier] dal menu a tendina per indicare il file del database. Firebird inserisce l’intero database in un unico file. Questo è uno dei suoi punti di forza. Il database viene trasferito da una postazione all’altra semplicemente copiando il file. Il suffisso [.gdb] viene aggiunto automaticamente.
Username
SYSDBA è l’amministratore predefinito delle attuali distribuzioni di Firebird
Password
masterkey è la password dell'amministratore SYSDBA delle attuali distribuzioni di Firebird
Dialect
il dialetto SQL da utilizzare
Register Database
se la casella è spuntata, IBExpert mostrerà un link al database creato dopo averlo creato

Se cliccando sul pulsante di creazione [OK] viene visualizzato il seguente avviso:

Image

significa che non avete avviato Firebird. Avviatelo. Si aprirà una nuova finestra:

Image

Charset
Famiglia di caratteri da utilizzare. Sebbene la schermata sopra riportata non fornisca alcuna informazione, si consiglia di selezionare dall'elenco a discesa la famiglia [ISO-8859-1], che consente di utilizzare i caratteri latini accentati.
Server version
[IBExpert] è in grado di gestire diversi SGBD derivati da Interbase. Selezionare la versione di Firebird installata:

Una volta confermata questa nuova finestra da [Register], si ottiene il seguente risultato:

Image

Per accedere al database creato, è sufficiente fare doppio clic sul relativo collegamento. IBExpert visualizza quindi una struttura ad albero che consente di accedere alle proprietà del database:

Image

2.4. Creazione di una tabella di dati

Creiamo una tabella. Facciamo clic con il tasto destro su [Tables] (vedi finestra sopra) e selezioniamo l’opzione [New Table]. Si apre la finestra di definizione delle proprietà della tabella:

Iniziamo assegnando alla tabella il nome [ARTICLES] utilizzando il campo di immissione [1]:

Utilizziamo il campo di immissione [2] per definire una chiave primaria [ID]:

Per impostare un campo come chiave primaria, fare doppio clic sul campo [PK] (Primary Key). Aggiungiamo dei campi utilizzando il pulsante situato sopra [3]:

Image

Finché non si «compila» la definizione, la tabella non viene creata. Utilizziamo il pulsante [Compile] qui sopra per completare la definizione della tabella. IBExpert prepara le query SQL per la generazione della tabella e richiede conferma:

Image

È interessante notare che IBExpert visualizza le query SQL che ha eseguito. Ciò consente di apprendere sia il linguaggio SQL sia il dialetto SQL, eventualmente proprietario, utilizzato. Il pulsante [Commit] consente di confermare la transazione in corso, mentre [Rollback] di annullarla. In questo caso la si accetta con [Commit]. Una volta fatto ciò, IBExpert aggiunge la tabella creata alla struttura ad albero del nostro database:

Image

Facendo doppio clic sulla tabella, si accede alle sue proprietà:

Image

Il pannello [Constraints] ci permette di aggiungere nuovi vincoli di integrità alla tabella. Apriamolo:

Image

Troviamo il vincolo di chiave primaria che abbiamo creato. È possibile aggiungere altri vincoli:

  • chiavi esterne [Foreign Keys]
  • vincoli di integrità dei campi [Checks]
  • vincoli di unicità dei campi [Uniques]

Si noti che:

  • i campi [ID, PRIX, STOCKACTUEL, STOKMINIMUM] devono essere >0
  • il campo [NOM] deve essere non vuoto e univoco

Apriamo il pannello [Checks] e facciamo clic con il tasto destro del mouse nell'area di definizione dei vincoli per aggiungere un nuovo vincolo:

Image

Definiamo i vincoli desiderati:

Image

Si noti che il vincolo [NOM<>''] utilizza due apostrofi e non virgolette. Compiliamo questi vincoli utilizzando il pulsante [Compile] qui sopra:

Image

Anche in questo caso, IBExpert fornisce informazioni utili indicando le query SQL che ha eseguito. Passiamo ora al pannello [Constraints/Uniques] per specificare che il nome deve essere univoco. Ciò significa che non è possibile avere due volte lo stesso nome nella tabella.

Image

Definiamo il vincolo:

Image

Quindi compiliamolo. Fatto ciò, apriamo il pannello [DDL] (Data Definition Language) della tabella [ARTICLES]:

Image

Questo pannello fornisce il codice SQL per la generazione della tabella con tutti i suoi vincoli. È possibile salvare questo codice in uno script per riutilizzarlo in seguito:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. Inserimento di dati in una tabella

È ora il momento di inserire i dati nella tabella [ARTICLES]. A tal fine, utilizziamo il relativo pannello [Data]:

Image

I dati vengono inseriti facendo doppio clic sui campi di immissione di ciascuna riga della tabella. È possibile aggiungere una nuova riga con il pulsante [+], mentre per eliminare una riga si utilizza il pulsante [-]. Queste operazioni vengono eseguite all’interno di una transazione che viene confermata tramite il pulsante [Commit Transaction] (vedi sopra). Senza questa conferma, i dati andranno persi.

2.6. L'editor SQL di [IB-Expert]

Il linguaggio SQL (Structured Query Language) consente a un utente di:

  1. creare tabelle specificando il tipo di dati che andranno memorizzati e i vincoli che tali dati devono soddisfare
  2. inserirvi dei dati
  3. modificarne alcuni
  4. eliminarne altri
  5. sfruttarne il contenuto per ottenere informazioni
  6. ...

IBExpert consente a un utente di eseguire le operazioni da 1 a 4 in modo grafico. Lo abbiamo appena visto. Quando il database contiene numerose tabelle, ciascuna con centinaia di righe, sono necessarie informazioni difficili da ottenere visivamente. Supponiamo, ad esempio, che un negozio online abbia migliaia di acquirenti al mese. Tutti gli acquisti vengono registrati in un database. Dopo sei mesi, si scopre che un prodotto «X» è difettoso. Si desidera contattare tutte le persone che lo hanno acquistato affinché restituiscano il prodotto per una sostituzione gratuita. Come trovare gli indirizzi di questi acquirenti?

  1. Si potrebbero consultare visivamente tutte le tabelle e cercare questi acquirenti. Ciò richiederebbe alcune ore.
  2. Si può eseguire un comando SQL che fornirà l’elenco di queste persone in pochi secondi

Il linguaggio SQL è utile non appena

  • quando la quantità di dati nelle tabelle è elevata
  • quando ci sono molte tabelle collegate tra loro
  • quando le informazioni da ottenere sono distribuite su più tabelle
  • ...

Presentiamo ora l’editor SQL di IBExpert. È accessibile tramite l’opzione [Tools/SQL Editor] o [F12]:

Image

Si accede così a un editor di query avanzato SQL con cui è possibile sperimentare le query. Digitiamo una query:

Image

Eseguiamo la query SQL utilizzando il pulsante [Execute] qui sopra. Otteniamo il seguente risultato:

Image

Sopra, la scheda [Results] mostra la tabella dei risultati dell’ordine SQL [Select]. Per emettere un nuovo ordine SQL, è sufficiente tornare alla scheda [Edit]. Si ritrova quindi l’ordine SQL che è stato eseguito.

Image

Diversi pulsanti della barra degli strumenti sono utili:

  • il pulsante [New Query] consente di passare a una nuova richiesta SQL:

Image

Si ottiene quindi una pagina di modifica vuota:

Image

A questo punto è possibile digitare un nuovo comando SQL:

Image

ed eseguirlo:

Image

Torniamo alla scheda [Edit]. I vari comandi SQL emessi vengono memorizzati da [IB-xpert]. Il pulsante [Previous Query] consente di tornare a un ordine SQL emesso in precedenza:

Image

Si torna quindi alla richiesta precedente:

Image

Il pulsante [Next Query] consente invece di passare all’ordine successivo SQL:

Image

Si trova quindi l'ordine SQL, che segue nell'elenco degli ordini SQL memorizzati:

Image

Il pulsante [Delete Query] consente di eliminare un ordine SQL dall’elenco degli ordini memorizzati:

Image

Il pulsante [Clear Current Query] consente di cancellare il contenuto dell'editor relativo all'ordine SQL visualizzato:

Image

Il pulsante [Commit] consente di confermare definitivamente le modifiche apportate al database:

Image

Il pulsante [RollBack] consente di annullare le modifiche apportate al database dall'ultimo [Commit]. Se non è stato eseguito alcun [Commit] dal momento della connessione al database, vengono annullate le modifiche apportate a partire da tale connessione.

Image

Facciamo un esempio. Inseriamo una nuova riga nella tabella:

Image

Il comando SQL viene eseguito, ma non viene visualizzato nulla. Non è possibile sapere se l’inserimento sia avvenuto. Per verificarlo, eseguiamo il comando SQL dopo [New Query]:

Image

Si ottiene il seguente risultato con [Execute]:

Image

La riga è stata quindi inserita correttamente. Esaminiamo ora il contenuto della tabella in un altro modo. Facciamo doppio clic sulla tabella [ARTICLES] nell’esploratore di database:

Image

Si ottiene la seguente tabella:

Image

Il pulsante con la freccia qui sopra permette di aggiornare la tabella. Dopo l’aggiornamento, la tabella qui sopra non cambia. Sembra che la nuova riga non sia stata inserita. Torniamo all’editor SQL (F12), quindi confermiamo l’ordine SQL emesso con il pulsante [Commit]:

Image

Fatto ciò, torniamo alla tabella [ARTICLES]. Possiamo constatare che nulla è cambiato anche utilizzando il pulsante [Refresh]:

Image

Ora apriamo la scheda [Fields], quindi torniamo alla scheda [Data]. Questa volta la riga inserita appare correttamente:

Image

Quando inizia l’esecuzione dei vari comandi SQL, l’editor apre quella che viene definita una transazione sul database. Le modifiche apportate da questi comandi SQL dell’editor SQL saranno visibili solo finché si rimane nello stesso editor SQL (è possibile aprirne diversi). È come se l’editor SQL non lavorasse sul database reale, ma su una propria copia. In realtà, non è esattamente così che avviene, ma questa immagine può aiutarci a comprendere il concetto di transazione. Tutte le modifiche apportate alla copia nel corso di una transazione saranno visibili nel database reale solo dopo essere state confermate da un [Commit Transaction]. La transazione in corso viene quindi conclusa e ne inizia una nuova.

Le modifiche apportate nel corso di una transazione possono essere annullate tramite un’operazione denominata [Rollback]. Facciamo il seguente esperimento. Avviamo una nuova transazione (è sufficiente eseguire [Commit] sulla transazione corrente) con il seguente comando SQL:

Image

Eseguiamo questo comando, che elimina tutte le righe della tabella [ARTICLES], quindi eseguiamo [New Query], il nuovo comando SQL, come segue:

Image

Otteniamo il seguente risultato:

Image

Tutte le righe sono state eliminate. Ricordiamo che l’operazione è stata eseguita su una copia della tabella [ARTICLES]. Per verificarlo, facciamo doppio clic sulla tabella [ARTICLES] qui sotto:

Image

e visualizziamo la scheda [Data]:

Image

Anche utilizzando il pulsante [Refresh] o passando alla scheda [Fields] per poi tornare alla scheda [Data], il contenuto sopra riportato rimane invariato. Questo è stato già spiegato. Ci troviamo in un’altra transazione che opera su una propria copia. Ora torniamo all’editor SQL (F12) e utilizziamo il pulsante [RollBack] per annullare le eliminazioni di righe effettuate:

Image

Viene richiesta una conferma:

Image

Confermiamo. L’editor SQL conferma che le modifiche sono state annullate:

Image

Ripetiamo la richiesta SQL sopra riportata per verificare. Ritroviamo le righe che erano state eliminate:

Image

L'operazione [Rollback] ha riportato la copia su cui sta lavorando l'editor SQL allo stato in cui si trovava all'inizio della transazione.