Skip to content

2. Tutorial su Firebird

Prima di trattare le nozioni di base del linguaggio SQL, mostreremo al lettore come installare il DBMS Firebird e il client grafico IB-Expert.

2.1. Dove trovare Firebird?

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

Image

Dovrai scaricare i seguenti elementi:

firebird-win32
il DBMS per Windows
firebird-net-provider
una libreria di classi per applicazioni .NET che consente l'accesso al DBMS senza utilizzare un driver ODBC.
firebird-ODBC-driver
il driver ODBC di Firebird

Installare questi componenti. Il DBMS viene installato in una cartella con contenuti simili ai seguenti:

I file binari si trovano nella cartella [bin]:

fbguard.exe
consente di avviare/arrestare il DBMS
isql.exe
client a riga di comando per la gestione dei database

Si noti che, per impostazione predefinita, l'amministratore del DBMS si chiama [SYSDBA] e la password è [masterkey]. Sono stati aggiunti dei menu a [Start]:

Image

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

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

2.2. Documentazione Firebird

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

Image

Sono disponibili vari manuali in inglese:

Guida rapida a Firebird 1.5
per iniziare con FB
Codici di errore di Firebird 1.5
per comprendere i codici di errore restituiti da FB

Sono disponibili anche manuali di formazione su SQL:

Image

Guida alla definizione dei dati
per imparare a creare tabelle, quali tipi di dati sono disponibili, ...
Riferimento al linguaggio
la guida di riferimento per imparare SQL con Firebird

Un modo rapido per lavorare con Firebird e imparare SQL è utilizzare un client grafico. Uno di questi client è IB-Expert, descritto nella sezione seguente.

2.3. Lavorare con il DBMS Firebird utilizzando IB- Expert

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

Image

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

Image

Il file eseguibile è [ibexpert.exe]. Normalmente nel menu [Start] è presente un collegamento:

Image

Una volta avviato, IBExpert visualizza la seguente finestra:

Image

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

Server
può essere [local] o [remote]. In questo caso, il nostro server si trova sulla stessa macchina di [IBExpert]. Selezioniamo quindi [local]
Database
Utilizza il pulsante [cartella] nel menu a tendina per selezionare il file del database. Firebird memorizza l’intero database in un unico file. Questo è uno dei suoi vantaggi. Puoi trasferire il database da un computer all’altro semplicemente copiando il file. Il suffisso [.gdb] viene aggiunto automaticamente.
Nome utente
SYSDBA è l'amministratore predefinito per le attuali distribuzioni di Firebird
Password
masterkey è la password dell'amministratore SYSDBA nelle attuali distribuzioni di Firebird
Dialetto
Il dialetto SQL da utilizzare
Registra database
Se questa casella è selezionata, IBExpert visualizzerà un collegamento al database dopo che è stato creato

Se, quando si fa clic sul pulsante [OK] per creare il database, viene visualizzato il seguente avviso:

Image

significa che non hai avviato Firebird. Avvialo. Apparirà una nuova finestra:

Image

Set di caratteri
Set di caratteri da utilizzare. Sebbene la schermata sopra riportata non mostri alcuna informazione, si consiglia di selezionare il set [ISO-8859-1] dall'elenco a discesa, che consente l'uso di caratteri latini accentati.
Versione del server
[IBExpert] è in grado di gestire vari DBMS derivati da Interbase. Selezionare la versione di Firebird installata:

Una volta confermata questa nuova finestra cliccando su [Registra], vedrai il seguente risultato:

Image

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

Image

2.4. Creazione di una tabella dati

Creiamo una tabella. Fai clic con il tasto destro del mouse su [Tabelle] (vedi finestra sopra) e seleziona l'opzione [Nuova tabella]. Si aprirà la finestra per definire le proprietà della tabella:

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

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

Per impostare un campo come chiave primaria, fare doppio clic sul campo [PK] (Chiave primaria). Aggiungiamo dei campi utilizzando il pulsante in alto [3]:

Image

Finché non abbiamo "compilato" la nostra definizione, la tabella non viene creata. Utilizza il pulsante [Compila] in alto per finalizzare la definizione della tabella. IBExpert prepara le query SQL per generare la tabella e chiede conferma:

Image

È interessante notare che IBExpert visualizza le query SQL che ha eseguito. Ciò consente di apprendere sia il linguaggio SQL che eventuali dialetti SQL proprietari che potrebbero essere utilizzati. Il pulsante [Commit] convalida la transazione corrente, mentre [Rollback] la annulla. In questo caso, la accettiamo cliccando su [Commit]. Una volta fatto ciò, IBExpert aggiunge la tabella creata alla nostra struttura ad albero del database:

Image

Facendo doppio clic sulla tabella, possiamo accedere alle sue proprietà:

Image

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

Image

Vediamo il vincolo di chiave primaria che abbiamo creato. Possiamo aggiungere altri vincoli:

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

Specifichiamo che:

  • i campi [ID, PRICE, CURRENTSTOCK, MINIMUMSTOCK] devono essere >0
  • il campo [NAME] deve essere non vuoto e univoco

Apri il pannello [Controlli] e fai clic con il pulsante 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 [NAME<>''] utilizza due virgolette singole, non doppie. Compilare questi vincoli utilizzando il pulsante [Compila] in alto:

Image

Ancora una volta, IBExpert dimostra la sua facilità d'uso visualizzando le query SQL che ha eseguito. Passiamo ora al pannello [Constraints/Unique] per specificare che il nome deve essere univoco. Ciò significa che lo stesso nome non può apparire due volte nella tabella.

Image

Definiamo il vincolo:

Image

Quindi compiliamolo. Una volta fatto ciò, apriamo il pannello [DDL] (Data Definition Language) per la tabella [ARTICLES]:

Image

Questo pannello mostra il codice SQL per generare la tabella con tutti i suoi vincoli. Puoi salvare questo codice in uno script per eseguirlo in un secondo momento:

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 dei dati in una tabella

È ora il momento di inserire i dati nella tabella [ARTICLES]. Per farlo, utilizzare il pannello [Dati]:

Image

I dati vengono inseriti facendo doppio clic sui campi di immissione di ciascuna riga della tabella. Una nuova riga viene aggiunta utilizzando il pulsante [+], mentre una riga viene eliminata utilizzando il pulsante [-]. Queste operazioni vengono eseguite all'interno di una transazione che viene confermata utilizzando il pulsante [Commit Transaction] (vedi sopra). Senza questa conferma, i dati andranno persi.

2.6. L'editor SQL [IB-Expert]

Il linguaggio SQL (Structured Query Language) consente all'utente di:

  1. creare tabelle specificando il tipo di dati che conterranno e i vincoli che i dati devono soddisfare
  1. inserire dati al loro interno
  2. modificare determinati dati
  3. eliminare altri dati
  4. utilizzare i dati per recuperare informazioni
  5. ...

IBExpert consente agli utenti di eseguire le operazioni da 1 a 4 in modo grafico. Lo abbiamo appena visto. Quando il database contiene molte tabelle, ciascuna con centinaia di righe, abbiamo bisogno di informazioni difficili da ottenere visivamente. Supponiamo, ad esempio, che un negozio online abbia migliaia di clienti al mese. Tutti gli acquisti vengono registrati in un database. Dopo sei mesi, si scopre che il prodotto "X" è difettoso. Il negozio vuole contattare tutti coloro che lo hanno acquistato in modo che possano restituire il prodotto per una sostituzione gratuita. Come si possono trovare gli indirizzi di questi acquirenti?

  1. Si potrebbero esaminare manualmente tutte le tabelle e cercare questi acquirenti. Ciò richiederebbe alcune ore.
  2. Possiamo eseguire una query SQL che restituirà un elenco di queste persone in pochi secondi

SQL è utile ogni volta che

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

Ora presenteremo l'Editor SQL di IBExpert. È possibile accedervi tramite l'opzione [Strumenti/Editor SQL] o premendo [F12]:

Image

Questo vi dà accesso a un editor avanzato di query SQL dove potete eseguire le query. Digitiamo una query:

Image

Esegui la query SQL utilizzando il pulsante [Esegui] in alto. Otterrai il seguente risultato:

Image

Sopra, la scheda [Risultati] mostra la tabella dei risultati per l'istruzione SQL [Select]. Per emettere un nuovo comando SQL, basta tornare alla scheda [Modifica]. Vedrai quindi l'istruzione SQL che è stata eseguita.

Image

Diversi pulsanti sulla barra degli strumenti sono utili:

  • Il pulsante [Nuova query] consente di passare a una nuova query SQL:

Image

Questo fa apparire una pagina di modifica vuota:

Image

È quindi possibile digitare una nuova istruzione SQL:

Image

ed eseguirla:

Image

Torniamo alla scheda [Modifica]. Le varie istruzioni SQL eseguite vengono memorizzate da [IB-xpert]. Il pulsante [Query precedente] consente di tornare a un'istruzione SQL eseguita in precedenza:

Image

Si torna quindi alla query precedente:

Image

Il pulsante [Query successiva] consente di passare all'istruzione SQL successiva:

Image

Verrà quindi visualizzata l'istruzione SQL successiva nell'elenco delle istruzioni SQL memorizzate:

Image

Il pulsante [Elimina query] consente di eliminare un'istruzione SQL dall'elenco delle istruzioni memorizzate:

Image

Il pulsante [Cancella query corrente] cancella il contenuto dell'editor relativo alla query SQL visualizzata:

Image

Il pulsante [Conferma] consente di salvare in modo permanente 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 quella connessione.

Image

Vediamo un esempio. Inseriamo una nuova riga nella tabella:

Image

L'istruzione SQL viene eseguita ma non viene visualizzato nulla. Non sappiamo se l'inserimento sia avvenuto. Per scoprirlo, eseguiamo la seguente istruzione SQL [Nuova query]:

Image

Otteniamo il seguente risultato:

Image

La riga è stata effettivamente inserita. Esaminiamo ora il contenuto della tabella in un altro modo. Facciamo doppio clic sulla tabella [ARTICLES] nell'esploratore del database:

Image

Otteniamo la seguente tabella:

Image

Il pulsante con la freccia in alto consente di aggiornare la tabella. Dopo l'aggiornamento, la tabella sopra non cambia. Sembra che la nuova riga non sia stata inserita. Torniamo all'editor SQL (F12) e poi confermiamo l'istruzione SQL utilizzando il pulsante [Commit]:

Image

Una volta fatto ciò, torniamo alla tabella [ARTICLES]. Possiamo vedere che nulla è cambiato, anche utilizzando il pulsante [Refresh]:

Image

In alto, apri la scheda [Fields], quindi torna alla scheda [Data]. Questa volta, la riga inserita appare correttamente:

Image

Quando inizia l'esecuzione delle varie istruzioni SQL, l'editor apre quella che viene chiamata una transazione sul database. Le modifiche apportate da queste istruzioni SQL nell'editor SQL saranno visibili solo finché rimani nello stesso editor SQL (puoi aprire più istanze). È come se l'editor SQL non lavorasse sul database vero e proprio, ma su una sua copia. In realtà, non è esattamente così che funziona, ma questa analogia può aiutarci a comprendere il concetto di transazione. Tutte le modifiche apportate alla copia durante una transazione saranno visibili nel database effettivo solo dopo che saranno state confermate tramite un [Commit Transaction]. La transazione corrente viene quindi terminata e ne inizia una nuova.

Le modifiche apportate durante una transazione possono essere annullate tramite un'operazione chiamata [Rollback]. Proviamo il seguente esperimento. Avviamo una nuova transazione (semplicemente [Commit] la transazione corrente) con la seguente istruzione SQL:

Image

Eseguiamo questo comando, che elimina tutte le righe dalla tabella [ARTICLES], quindi eseguiamo [New Query] con il seguente nuovo comando SQL:

Image

Otteniamo il seguente risultato:

Image

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

Image

e visualizza la scheda [Dati]:

Image

Anche se utilizziamo il pulsante [Aggiorna] o passiamo alla scheda [Campi] e poi torniamo alla scheda [Dati], il contenuto sopra rimane invariato. Questo è stato 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

Ci viene richiesta una conferma:

Image

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

Image

Eseguiamo nuovamente la query SQL sopra riportata per verificare. Le righe che erano state eliminate sono ora tornate:

Image

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