[an error occurred while processing this directive]
diff logo Informatica e sistemi alternativi
su questo sito sul Web
    Home   Chi siamo    Contattaci    Scrivi per diff    Proponi un argomento 18/04/24
    Cos'è diff    Come accedere    F.A.Q.    Promuovi    Dicono di diff    Amici di diff    
AmigaOS
Linux
FreeBSD
BeOS
OpenSource
Java
Database
Informatica
Hardware
E-Commerce
Narrativa

Una semplice implementazione di pagine web dinamiche
di Giuseppe Sacco

La base di dati

Lo schema della base di dati è molto semplice: ci sono le tabelle localita, tipologia, appartamento, cliente e prenotazioni. Credo che la loro comprensione sia immediata e quindi non mi ci soffermerò.

Se avete installato postgreSQL per la prima volta allora sarà necessario dare all'utente che state utilizzando i diritti per creare e modificare una base di dati. In seguito all'installazione solo l'utente postgres può definire altri utenti, quindi dovete entrare nel sistema come superutente ed eseguire il seguente comando (sostituite nomeutente con il nome del vostro utente)

bash-2.03# su - postgres -c createuser -d -u nomeutente

A questo punto il vostro utente sarà in grado di aggiungere o eliminare basi di dati e altri utenti.

La prima cosa da fare è creare una nuova base di dati chiamata case tramite il comando

bash-2.03$ createdb case

successivamente si potrà accedere alla base di dati e creare tutto lo schema. Ecco di seguito riportato come viene fatto. Nota che il file crea-db.sql è disponibile qui.

bash-2.03$ psql case
Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms 
  of POSTGRESQL
[PostgreSQL 7.0 on i686-pc-linux-gnu, 
 compiled by gcc 2.95.2]

   type \? for help on slash commands
   type \q to quit
   type \g or terminate with semicolon to execute query
 You are currently connected to the database: case

case=> \i crea-db.sql
CREATE TABLE localita (
        ID      INTEGER NOT NULL PRIMARY KEY,
        Localita VARCHAR(100));
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit
         index 'localita_pkey' for table 'localita'
CREATE

CREATE TABLE tipologia (
        ID      INTEGER NOT NULL PRIMARY KEY,
        Descrizione VARCHAR(200));
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit
         index 'tipologia_pkey' for table 'tipologia'
CREATE

CREATE TABLE appartamento (
        ID      INTEGER NOT NULL,
        Localita INTEGER REFERENCES localita,
        Tipologia INTEGER REFERENCES tipologia,
        Note    VARCHAR(500),
        Postiletto      SMALLINT,
        Prezzo  INTEGER,
        PRIMARY KEY (ID,Localita));
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit
         index 'appartamento_pkey' for table 'appartamento'
NOTICE:  CREATE TABLE will create implicit trigger(s) for 
         FOREIGN KEY check(s)
CREATE

CREATE TABLE cliente (
        ID      INTEGER NOT NULL PRIMARY KEY,
        Nome    VARCHAR(30),
        Cognome VARCHAR(50),
        Indirizzo VARCHAR(100),
        Email   VARCHAR(40));
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit
         index 'cliente_pkey' for table 'cliente'
CREATE

CREATE TABLE prenotazioni (
        ID      INTEGER REFERENCES appartamento,
        Da      DATE NOT NULL,
        A       DATE NOT NULL,
        Cliente INTEGER REFERENCES cliente,
        PRIMARY KEY (ID, da));
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit
         index 'prenotazioni_pkey' for table 'prenotazioni'
NOTICE:  CREATE TABLE will create implicit trigger(s) for 
         FOREIGN KEY check(s)
CREATE

INSERT INTO localita (ID, Localita) VALUES (1, 'Spinea');
INSERT 23402 1
INSERT INTO localita (ID, Localita) VALUES 
                      (2, 'San Benedetto del Tronto');
INSERT 23403 1
INSERT INTO localita (ID, Localita) VALUES (3, 'Paola');
INSERT 23404 1
INSERT INTO localita (ID, Localita) VALUES 
       (4, 'Isola d''elba');
INSERT 23405 1
INSERT INTO localita (ID, Localita) VALUES (5, 'Chieri');
INSERT 23406 1

INSERT INTO tipologia (ID, Descrizione)
 VALUES (1, 'Casa isolata vicino al mare.');
INSERT 23406 1
INSERT INTO tipologia (ID, Descrizione)
 VALUES (2, 'Casetta in centro.');
INSERT 23407 1
INSERT INTO tipologia (ID, Descrizione)
 VALUES (3, 'Appartamento in centro a 
             due passi dalle discoteche.');
INSERT 23408 1
INSERT INTO tipologia (ID, Descrizione)
 VALUES (4, 
         'Immerso nella natura, per chi cerca il riposo 
          totale
          e la lontananza dallo smog oramai domestico.');
INSERT 23409 1

INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (1,1,3,'A metà prezzo a maggio.',2,800000);
INSERT 23410 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (2,3,2,'',4,700000);
INSERT 23411 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (3,4,3,'',2,500000);
INSERT 23412 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (4,2,1,'',6,900000);
INSERT 23413 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (5,3,4,'Non disponibile per meno di due settimane',
         4,750000);
INSERT 23414 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (6,4,3,'',6,800000);
INSERT 23415 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (7,2,2,'',5,750000);
INSERT 23416 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (8,2,3,'',2,450000);
INSERT 23417 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (9,1,2,'',4,550000);
INSERT 23418 1
INSERT INTO appartamento 
 (ID,Localita,Tipologia,Note,Postiletto,Prezzo)
 VALUES (10,3,4,'',4,600000);
INSERT 23419 1
EOF
case=> \q
bash-2.03$

Come si può vedere dal listato precedente, postgreSQL non prevede la gestione delle chiavi esterne e quindi ne dà avviso tramite la riga NOTICE:.

Una volta terminata la base di dati non resta altro che renderla accessibile tramite web. La prima cosa da fare è dare i diritti all'utente proprietario del server web per accedere alla base di dati. Analogamente a quanto si è fatto all'inizio va dato il comando:

bash-2.03$ psql case
case=> create user apache;
CREATE USER
case=> grant select on localita, tipologia, appartamento,
case-> cliente, prenotazioni to apache;
CHANGE
case=> grant insert on prenotazioni, cliente to apache;
CHANGE
case=> \q
bash-2.03$

sostituendo apache con il nome dell'utente proprietario del processo apache.






Giuseppe Sacco è laureato in Scienze dell'Informazione presso l'Ateneo di Pisa. In passato si è occupato di Amiga (è uno dei fondatori di IPISA) e di Interfacce Utente Grafiche. Attualmente lavora nell'ambito dei prodotti ERP e si sta specializzando in amministrazione di sistema con Oracle, Informix, Unix e Windows NT. Da sempre ha tenuto sott'occhio il movimento attorno a Linux con un particolare riguardo alla distribuzione Debian della quale è coordinatore della traduzione del sito web in italiano.

Puoi contattare l'autore scrivendo a:
gsacco@diff.org


Articoli dello stesso autore:
Introduzione ad Oracle8i
Il modello entità - relazioni
Pagine web dinamiche


 



© 1999,2000,2001,2002 NonSoLoSoft di Ferruccio Zamuner (Italia)- tutti i diritti sono riservati