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
|
|