Appendice all'articolo
Il modello Entità - Relazioni di Giuseppe Sacco
Riletto in PostgreSQL di Ferruccio Zamuner
Premettendo che il PostgreSQL 6.5 non ha ancora implementato le foreign keys,
infatti per ora usa i trigger, ecco qui una
traduzione in PostgreSQL delle pagine precedenti di questo articolo.
Il PostgreSQL supporta i seguenti tipi per il testo:
char, char(n), text, varchar(n)
ma si consiglia l'uso del tipo text che č ottimizzato per gestire qualsivoglia
dimensione di stringa (nel limite degli 8K per record, altrimenti
bisogna ricorrere ai Large Objects).
In PostgreSQL non esistono le procedure, o meglio sono
chiamate funzioni (in virtų del fatto che č un Object-Relational Data Base System).
Ecco la sessione completa del dialogo con l'interprete psql del PostgreSQL.
bash-2.02$ psql arci
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.2 on i386-freebsd3.0, compiled by gcc 2.7.2.1]
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: arci
ARCI=> CREATE TABLE Socio (
tessera INT4 CONSTRAINT pk_tessera PRIMARY KEY,
nome TEXT CONSTRAINT nn_nome NOT NULL,
cognome TEXT,
dataiscr DATE DEFAULT 'NOW',
datainizio DATE,
datafine DATE);
ARCI->NOTICE: CREATE TABLE/PRIMARY KEY will create implicit
index 'pk_tessera' for table 'socio'
CREATE
ARCI=> insert into Socio (tessera,nome,cognome)
values (99,'Giuseppe','Sacco');
INSERT 411218 1
[...]
ARCI=> select * from Socio;
tessera|nome |cognome| dataiscr|datainizio|datafine
-------+---------+-------+----------+----------+--------
100|Ferruccio|Zamuner|10-12-1999| |
99|Giuseppe |Sacco |10-12-1999| |
(2 rows)
ARCI=> CREATE TABLE Squadra (
nome TEXT CONSTRAINT pk_nome PRIMARY KEY,
portiere INT4 CONSTRAINT fk_portiere REFERENCES Socio(tessera),
difdx INT4 CONSTRAINT fk_difdx REFERENCES Socio(tessera),
difsx INT4 CONSTRAINT fk_difsx REFERENCES Socio(tessera),
attdx INT4 CONSTRAINT fk_attdx REFERENCES Socio(tessera),
attsx INT4 CONSTRAINT fk_attsx REFERENCES Socio(tessera));
ARCI-> NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit
index 'pk_nome' for table 'squadra'
CREATE
ARCI=> CREATE TABLE Incontro (
data_ora TIMESTAMP,
squadra TEXT CONSTRAINT nome REFERENCES Squadra(nome),
avversaria TEXT CONSTRAINT nome REFERENCES Squadra(nome),
campo INT2,
torneo TEXT CONSTRAINT titolo REFERENCES Torneo(titolo),
risultato TEXT);
ARCI-> NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
NOTICE: CREATE TABLE/FOREIGN KEY clause ignored;
not yet implemented
CREATE
ARCI=> CREATE FUNCTION SquadreInTorneo ( TEXT ) RETURNS TEXT AS
'SELECT DISTINCT squadra.nome
FROM squadra, incontro
WHERE incontro.torneo = $1 AND
(incontro.squadra = squadra.nome OR
incontro.avversaria = squadra.nome)'
LANGUAGE 'sql';
ARCI=> SELECT SquadreInTorneo('Rione sportivo');
squadreintorneo
---------------
(1 row)
ARCI=>
Questo è tutto per ora.
In futuro potremmo prendere in considerazione altri problemi,
come ad esempio gestione magazzino, partita doppia, gestione
areoportuale etc.
Nota sul costrutto trigger
Per gli interessati e più documentati, l'integrità dei dati su
PostgreSQL fino alla versione 6.5 si otteneva facendo uso dei trigger, ovvero delle operazioni, anche complesse,
che vengono automanticamente eseguite prima o dopo il verificarsi di
certi eventi.
Ecco la sintassi del comando:
CREATE TRIGGER Creates a new trigger
CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
ON table FOR EACH { ROW | STATEMENT }
EXECUTE PROCEDURE func_name ([arguments])
eventX is one of INSERT, DELETE, UPDATE
Dalla versione 7 in poi, il ricorso alla definizione esplicita dei trigger non č pių necessaria grazie all'introduzione delle chiavi esterne (FOREIGN KEY).
|
|
DATABASE |
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
|
|