La documentazione che segue è inclusa nella distribuzione di PostgreSQL, nei formati postscript, HTML, e "pagine man" di unix. È collocata nella directory /usr/doc/postgresql* . Se avete accesso ad internet, potete trovare questi documenti presso http://www.postgresql.org/docs e presso http://www.postgresql.org/users-lounge/docs.
È parte del comando PSQL
C'è uno script nella directory /tools dell'albero del codice sorgente.
Usate il comando psql \h
Date un'occhiata ai test di regressione in src/test. Vi trovate le directory
regress/sql e suite/*.sql
script tutorial su SQL si trovano nella directory src/tutorial
Vedere anche "Tutorial SQL per principianti",
nell'
Appendice B
di questo documento.
Edito da Morgan Kaufman, è uno dei migliori libri su SQL. Tratta di SQL92.
della Addison-Wesley Publishing, è un altro buon libro. È un testo su SQL
molto diffuso.
di Stephen Cannan e Gerard Otten
McGraw-Hill Book Company Europe , Berkshire, SL6 2QL, England
di Martin Gruber, Redattore Tecnico: Joe Celko
SYBEX Inc. 2021 Challenger Drive Alameda, CA 94501
Questo libro è la Bibbia dei Sistemi di Gestione dei Database.
Il libro illustra dettagliatamente normalizzazione, SQL, ripristino, con-
correnza, sicurezza, integrità, ed estensioni al modello relazionale ori-
ginale; inoltre tratta le attuali questioni riguardanti i sistemi client/server,
ed i modelli orientati agli oggetti. Per approfondire la
lettura, sono stati inclusi molti riferimenti. Lo raccomando alla maggior
parte degli utenti.
Il libro tratta in dettaglio la teoria dei database relazionali, l'algebra
relazionale, il calcolo relazionale e la normalizzazione. Ma non tratta
di casi del mondo reale, e gli esempi non vanno oltre quelli semplici. È
consigliato per la maggior parte degli utenti.
Lo consiglio alla maggior parte degli utenti.
Questo libro è una raccolta di articoli, pubblicati negli anni passati,
dedicati ai database. Non è un libro per lettori occasionali: si tratta di
di un testo di consultazione per studenti avanzati (laureati), o per svi-
luppatori di sistemi di database.
Il libro è una raccolta di articoli, pubblicati negli anni passati, dedi-
cati ai database. Non è materia per semplici utenti: si tratta di un testo
di consultazione per studenti avanzati (laureati), o per sviluppatori di
sistemi di database.
Questo libro spiega dettagliatamente i metodi d'accesso, e le tecniche di
archiviazione.
Non è materia per semplici utenti, ma è per studenti avanzati (laureati) o
per sviluppatori di sistemi di database.
Wrox Press Ltd.
Unit 16, 20 James Road, Tyseley
Birmingham, B11 2BA, England
1995
Technology
QED and John Wiley
1991
Presenta i requisiti per la creazione di applicazioni database client /
server per mezzo di metamodelli da repository, e l'uso di ANSI SQL stan-
dard 1993
Sono disponibili centinaia di altri titoli su SQL! Cercateli in una libreria.
I documenti delle specifiche ISO ANSI/ISO possono essere trovati presso i seguenti siti:
Vedere l' Appendice A di questo documento.
Le specifiche SQL 1998 (SQL 3) sono ancora in sviluppo. Vedere "Accesso attraverso mezzi Elettronici alla SQL3 Working Draft" in questo documento: SQL 1998
Vedere l' Appendice B di questo documento.
Questa directory contiene le specifiche per una estensione temporale del linguaggio SQL-92 standard. Questo nuovo linguaggio è denominato TSQL2.
Le specifiche del linguaggio qui citato costituiscono la versione finale del linguaggio.
La corrispondenza può essere diretta al Presidente del TSQL2 Language Design Committee, Richard T.Snodgrass, Department of Computer Science, University of Arizona, Tucson, AZ 85721,
Le affiliazioni, e gli indirizzi e-mail dei membri del TSQL2 Language Design Committee, possono essere trovati in una sezione separata, situata in coda alle specifiche del linguaggio. Il contenuto di questa directory è il seguente.spec.dvi,.ps - Specifiche del Linguaggio TSQL2, pubblicate nel settembre 1994
bookspec.ps - Specifiche del Linguaggio TSQL2, come nel libro del TSQL2, pubblicate nel Settembre 1995 (Vedere più sotto).
sql3 - proposte di modifiche sottoposte ai comitati ANSI e ISO SQL3.
Esiste, inoltre, una raccolta di commenti, abbinati alle specifiche del linguaggio, che dibattono le decisioni relative al progetto, forniscono esempi, e considerano come il linguaggio possa essere implementato. Questi commenti sono stati proposti originariamente al TSQL2 Language Design Committee. Adesso hanno un altro uso: fornire esempi dei costrutti, motivare le tante decisioni prese durante la progettazione del linguaggio, e confrontare TSQL2 con i molti altri linguaggi proposti negli ultimi quindici anni. Si dovrebbe sottolineare che questi commenti non sono parte delle specifiche del linguaggio TSQL2, ma sono piuttosto un supplemento e un approfondimento delle stesse. Le specifiche del linguaggio sono le sole parole definitive su TSQL2.
I commenti, insieme alle specifiche del linguaggio, a svariati indici, ed altro materiale di supporto, sono stati pubblicati in un libro:
Snodgrass, R.T. redattore, The TSQL2 Temporal Query Language, Kluwer Academic Publishers, 1995, 674+xxiv pagine.
I commenti di valutazione, che sono presenti nel libro, sono in forma abbreviata; la forma integrale è contenuta nel file eval.ps, ospitato in questa directory.
Il file tl2tsql2.pl è un programma in linguaggio prolog; esso traduce dichiarazioni logiche, consentite dal TSQL2, in costrutti validi per lo stesso TSQL2. Questo programma è stato scritto da Michael Boehlen
Può essere contattato per ottenere un testo descrittivo di questa traduzione. Quella trattata è però una versione alquanto datata di quel programma. Versioni più recenti sono disponibili presso (i sistemi TimeDB e Tiger).Questo documento illustra come procurarsi (legalmente) una copia dello standard SQL-92, e come procurarsi una copia dell'ultima bozza di SQL3.
Lo standard è protetto da copyright: lo standard ANSI è detenuto da ANSI, mentre lo standard ISO è detenuto da ISO.
In realtà esistono due (2) standard SQL: una pubblicazione ANSI e una pubblicazione ISO. I due standard sono identici parola per parola, tranne che per alcune questioni banali come il titolo del documento, le intestazioni delle pagine, la frase "International Standard" contrapposta a "American Standard", e così via.
Acquistare lo standard SQL-92
Lo standard ISO, ISO/IEC 9075:1992, Information Technology - Database Languages - SQL, è attualmente (Marzo, 1993) disponibile alla vendita presso ANSI:
American National Standards Institute
1430 Broadway
New York, NY 10018 (USA)
Phone (sales): +1.212.642.4900
al costo di 230.00 $ USA. La versione ANSI, ANSI X3.135-1992, American
National Standard for Information Systems - Database Language SQL, al momento
della scrittura di questo documento, non era disponibile alla vendita, La disponibilità
era attesa per il periodo tra la fine di marzo e l'inizio di maggio del 1993). Il costo
previsto era di 225.00 $ USA.
Se acquistate entrambi i documenti da ANSI, avrete una maggiorazione del 7% (circa 9.10 $ USA). Le spedizioni all'estero costeranno sicuramente di più. ANSI richiede una copia stampata dell'ordine di acquisto; in alternativa, potete inviare un assegno bancario (in dollari USA ad una banca americana) che sarà sottoposto a controlli di validità e convertito in contanti prima di sbrigare l'ordine (esiste un'eccezione: se la vostra organizzazione è un'azienda membro dell'ANSI, ANSI stessa vi spedirà la documentazione ed invierà il conto alla vostra società).
Lo standard ISO è disponibile anche al di fuori degli USA presso le locali associazioni nazionali che sono membri sia di ISO (International Organization for Standardization), sia di IEC (International Electrotechnical Commission). Copie della lista di consociate nazionali, e dei loro indirizzi, sono disponibili presso ANSI o presso altre consociate nazionali. Sono disponibili anche presso ISO:
International Organization for Standardization
Central Secretariat
1, rue de Varembi
CH-1211 Genhve 20
Switzerland
Se preferite ordinare lo standard in un modo più comodo e rapido,
dovrete pagare per avere questo privilegio. Potete ordinare ISO/IEC
9075:1992, Information Technology - Database Languages - SQL, presso:
Global Engineering Documents
2805 McGaw Ave
Irvine, CA 92714 (USA)
USA
Telefono (valido ovunque): +1.714.261.1455
Telefono (valido solo negli USA): (800)854-7179
per un costo di 308.00 $ USA. Non so se siano incluse le spese postali,
ma posso immaginare che la spedizione internazionale costi
di più (come minimo). In questo modo vi invieranno tempestivamente un documento,
ed accetteranno anche pagamenti con le più note carte di credito. La Global non ha ancora la
versione ANSI, e non dà né l'indicazione di un prezzo, né una data per la disponibilità (anche se
mi aspetto che sia disponibile entro poche settimane dopo la pubblicazione di ANSI, e
ad un prezzo vicino a 300.00 $ USA).
Acquistare una copia di SQL3 Working Draft (la bozza di lavoro)
Potete acquistare una copia stampata della bozza di lavoro di SQL3, presso il Segretariato ANSI X3, CBEMA (Computer and Business Equipment Manufacturers Association). Il loro proposito, è quello di conservare la "più recente" versione della bozza di lavoro di SQL3, e di venderla ad un prezzo tra i 60.00 ed i 65.00 $ USA. Potete contattare CBEMA all'indirizzo:
CBEMA, X3 Secretariat
Attn: Lynn Barra
1250 Eye St.
Suite 200
Washington, DC 20005 (USA)
Lynn Barra può essere raggiunta anche al numero di telefono +1.202.626.5738 per
richiedere una copia, ma probabilmente il contatto via lettera è più gradito.
Accesso attraverso mezzi Elettronici alla SQL3 Working Draft
La versione più recente (al momento della redazione di questo documento) della bozza di lavoro (e tutte le sue Parti) di SQL3 (ANSI e ISO), è disponibile presso
gatekeeper.dec.com
nella directory
/pub/standards/sql/
In questa directory ci sono numerosi file. Ci sono file in formato PostScript. ed in formato
"testo puro" (non gradevolmente formattato, ma leggibile a video
senza software particolare).
In generale, potete trovare file con nomi come:
sql-bindings-mar94.ps
sql-bindings-mar94.txt
sql-cli-mar94.ps
sql-cli-mar94.txt
sql-foundation-mar94.ps
sql-foundation-mar94.txt
sql-framework-mar94.ps
sql-framework-mar94.txt
sql-psm-mar94.ps
sql-psm-mar94.txt
Quando verrà prodotta una nuova versione dei documenti, la stringa "mar94" cambierà
per indicare la nuova data di pubblicazione (ad es., "aug94" è la data
di nuova pubblicazione dopo "mar94").
In più, per quei lettori che non potessero ottenere un listato della directory a mezzo FTP, abbiamo posizionato un file di nome:
ls
nella stessa directory. Questo file (che sorpresa!) contiene un listato del
contenuto della directory.
Reperire file usando FTP diretto
Questo è un esempio di come usare FTP. In particolare, viene mostrato come connettersi a gatekeeper.dec.com, come spostarsi nella directory in cui è ospitato il documento base, e come trasferire il documento al vostro nodo. Notate che il vostro nodo deve avere accesso ad Internet per fare quanto sarà detto. Il nome di login è 'ftp', e la password è il vostro indirizzo email (a questa modalità ci si riferisce spesso come quella di "anonymous ftp" o "ftp anonimo"). Il comando 'type binary' è usato per assicurarci che nessun bit venga rimosso dai file ricevuti. Il comando 'get' trasferisce un file alla volta. Nello script che segue, i commenti sono racchiusi nei simboli < e > .
% ftp gatekeeper.dec.com
Connected to gatekeeper.dec.com.
220- *** /etc/motd.ftp ***
Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research.
<... ora si potrebbe dover attendere...>
220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready.
Name (gatekeeper.dec.com:<il vostro nome-login>): ftp <va bene anche l'ftp anonimo>
331 Guest login ok, send ident as password.
Password: <inserite qui la vostra email >
230 Guest login ok, access restrictions apply.
Remote system type is UNIX. <o qualsiasi altro>
Using binary mode to transfer files.
ftp> cd pub/standards/sql
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 9529
-r--r--r-- 1 root system 357782 Feb 25 10:18 x3h2-93-081.ps
-r--r--r-- 1 root system 158782 Feb 25 10:19 x3h2-93-081.txt
-r--r--r-- 1 root system 195202 Feb 25 10:20 x3h2-93-082.ps
-r--r--r-- 1 root system 90900 Feb 25 10:20 x3h2-93-082.txt
-r--r--r-- 1 root system 5856284 Feb 25 09:55 x3h2-93-091.ps
-r--r--r-- 1 root system 3043687 Feb 25 09:57 x3h2-93-091.txt
226 Transfer complete.
ftp> type binary
200 Type set to I.
ftp> get x3h2-93-082.txt
200 PORT command successful.
150 Opening BINARY mode data connection for x3h2-93-082.txt (90900 bytes).
226 Transfer complete.
90900 bytes received in 0.53 seconds (166.11 Kbytes/s)
ftp> quit
% <il file è ora nella vostra directory col nome x3h2-93-082.txt>
Scaricare file senza supporto FTP diretto
Digital Equipment Corporation, al pari di molte altre compagnie, fornisce il servizio di ftp via email. La risposta può giungere dopo diversi giorni, ma il servizio fornito è equivalente al ftp, ed è per coloro che non hanno accesso diretto a ftp. L'indirizzo del server è:
ftpmail@decwrl.dec.com
Il seguente script permetterà di ottenere il file, in formato PostScript, relativo all'ultima versione del documento su SQL3:
reply joe.programmatore@azienda-immaginaria.com
connect gatekeeper.dec.com anonymous
binary
compress
uuencode
chdir /pub/standards/sql
get x3h2-93-091.ps
quit
La prima riga dello script istruisce il server ad inviarci
i file richiesti; dovreste sostituire "joe.programmatore@azienda-immaginaria.com"
col vostro indirizzo Internet. Il file di questo esempio, x3h2-93-091.ps,
viene inviato in formato compresso (con "compress"), codificato (con "uuencode"), e suddiviso in 34 messaggi email
separati. Se il vostro ambiente non fornisce strumenti per ricostruire
file di questo tipo, potreste farvi inviare il file in forma di testo puro, con
il seguente script:
reply joe.programmatore@azienda-immaginaria.com
connect gatekeeper.dec.com anonymous
chdir /pub/standards/sql
get x3h2-93-091.ps
quit
Ma fate attenzione: il file .ps arriverà a voi suddiviso in più di 70
parti!
Per recuperare un file particolare qualsiasi, che non sia x3h2-93-091.ps, sostituite semplicemente "x3h2-93-091.ps" con il nome del file desiderato. Per ottenere una lista di tutti i file disponibili, sostituite " get x3h2-93-091.ps" con "dir".
Questo capitolo è una fonte di informazioni riguardanti il processo di standardizzazione di SQL, e del suo stato attuale.
Stato attuale:
Progetti di sviluppo sono attualmente in corso per migliorare SQL, rendendolo un linguaggio completo dal punto di vista computazionale, e per la definizione e la gestione di oggetti persistenti e complessi. Ciò comporta: la generalizzazione e la specializzazione delle gerarchie, l'eredità multipla, i tipi di dati definiti dall'utente, i trigger e le assertion, il supporto per i "knowledge based system", espressioni con interrogazioni ricorsive, e strumenti addizionali per l'amministrazione dei dati. Vanno considerati anche le specifiche dei tipi di dati astratti (ADT), degli identificatori di oggetti, dei metodi, dell'ereditarietà, del polimorfismo, dell'incapsulamento, e di tutte le altre caratteristiche normalmente associate alla gestione dei dati ad oggetti.
Nell'autunno 1996, diverse parti di SQL3 sono state votate dal CD ISO. Queste parti erano: SQL/Framework, SQL/Foundation, e SQL/Bindings. Queste votazioni fallirono (come ci si aspettava) con circa 900 commenti di critica. Alla fine di gennaio, si svolse un incontro di elaborazione ISO DBL, che produsse un vasto numero di soluzioni ai problemi che erano stati acclusi come commenti ai voti, o sottoposti come testi separati. Poiché l'incontro di elaborazione DBL non fu in grado di trattare tutti gli argomenti discussi nei commenti, l'incontro stesso venne esteso. Il completamento dell'incontro di elaborazione, è fissato per la fine di luglio del 1997, a Londra.
Esaminando l'incontro di elaborazione di luglio, ci si può aspettare che sarà richiesta una votazione finale del CD per le parti di SQL precedentemente accennate. Il processo del CD Finale impiegherà circa 6 mesi, e richiederà un incontro elaborativo DBL; dopodiché ci sarà una votazione DIS ed una rapidissima votazione IS.
Le procedure ISO sono cambiate rispetto a quelle che hanno determinato SQL/92; per questo i comitati SQL sono ancora impegnati nello studio dei dettagli della procedura stessa.
Se tutto andrà bene, queste parti di SQL3 diverranno ufficialmente standard ISO/IEC alla fine del 1998, ma i tempi sono molto stretti.
Nel 1993, i comitati di sviluppo ANSI e ISO decisero di scindere lo sviluppo del futuro SQL in uno standard, composto di molte parti. Esse sono:
Negli USA, la totalità di SQL3 viene trattata sia come progetto ANSI Domestico ("D"), sia come progetto ISO. Allo stato attuale, il completamento di SQL3 è atteso per il 1999.
Le Parti SQL/CLI e SQL/PSM sono in corso di elaborazione, come aggiuntive a SQL-92. Negli USA, queste caratteristiche vengono trattate solo come progetti Internazionali ("I"). SQL/CLI è stata completata nel 1995. SQL/PSM dovrebbe essere completata intorno alla fine del 1996.
Oltre al lavoro su SQL3, numerosi altri progetti sono in corso:
Comitato degli Standard e Procedimento
In tutto il mondo, i comitati per gli standard SQL sono sorprendentemente numerosi. Esiste un gruppo per gli standard internazionali SQL, ed è parte di ISO. Moltissimi paesi hanno comitati che si occupano specificatamente di SQL. Questi paesi (solitamente) inviano le loro rappresentative ai convegni ISO/IEC JTC1/SC 21/WG3 DBL. I paesi che partecipano attivamente alle procedure, per definire gli standard SQL ISO, sono:
Convalida NIST
Le implementazioni di SQL sono convalidate (negli USA) dal National Institute of Standards and Training (NIST). Attualmente il NIST si serve di una suite di prova per nuovi prodotti SQL-92. I dettagli esatti dei requisiti, per la convalida del NIST, vengono definiti nel Federal Information Processing Standard (FIPS). I requisiti attuali per SQL sono definiti nel FIPS 127-2. Le versioni nei formati Postscript e testo di questo documento, possono essere reperite presso il NIST. L'attuale Lista di Prodotti SQL Convalidati può essere ottenuta dal NIST.
Pubblicazioni di SQL Standard e articoli
Esistono due versioni dello standard SQL. Entrambe sono disponibili presso ANSI:
Le due versioni dello standard SQL sono identiche, tranne che per le intestazioni ed i riferimenti ad altri standard. Entrambe sono reperibili presso:
American National Standards Institute
1430 Broadway
New York, NY 10018
USA
Phone (sales): +1.212.642.4900
Oltre allo standard SQL-92, ora c'è un Technical Corrigendum (correzione
dei bug):
* Technical Corrigendum 1:1994 to ISO/IEC 9075:1992
TC 1 dovrebbe essere reso disponibile da ANSI. C'è solo una versione ISO di TC
1 -- Si applica sia alla versione ANSI che a quella ISO di SQL-92.
Oltre ai testi base, svariati libri sono stati scritti sullo standard SQL 1992. Questi libri forniscono una descrizione dello standard assai più comprensibile dei testi ufficiali veri e propri.
Standard Correlati
Numerosi altri standard sono oggetto di interesse per la comunità SQL. Questa sezione contiene alcuni puntatori alle informazioni su queste realizzazioni. Questi puntatori aumenteranno di numero, man mano che le informazioni aggiuntive diventeranno disponibili sul web.
Una quota significativa, nella realizzazione di SQL3, è quella del Documento dei Fondamenti di SQL:
Ci sono diversi prerequisiti per le funzionalità orientate agli oggetti:
Queste funzionalità sono definite come parti di SQL/PSM
Gran parte del lavoro, viene attualmente svolta per affinare il modello a oggetti di SQL-3, e per allinearlo con il modello ad oggetti proposto da ODMG. Questo lavoro è descritto nel documento X3H2 e ISO DBL: "Accomodating SQL3 and ODMG". Esiste anche un recente aggiornamento sull'operazione di Merge (fusione) SQL3/OQL.
Tempi di lavoro di SQL3
Lo sviluppo di SQL3 è sulla buona strada, ma gli standard finali saranno pronti fra anni.
La versione ANSI dello standard avrà scadenze simili.
SQL/CLI è un'interfaccia a livello di chiamata ai database SQL. È progettata per agevolare l'accesso al database da parte di applicazioni "shrink-wrapped". La CLI è stata originariamente creata da un sottocomitato di SQL Access Group (SAG). Le specifiche SAG/CLI sono state pubblicate come le specifiche di Microsoft Open DataBase Connectivity (ODBC) del 1992. Nel 1993, il SAG sottomise la CLI ai comitati SQL ANSI e ISO SQL (ora SQL Access Group si è fuso con il consorzio X/Open).
SQL/CLI fornisce uno standard internazionale per:
Tempi di lavoro di SQL/CLI
Per essere un procedimento di standardizzazione, quello di SQL/CLI è stato realizzato in tempi rapidissimi.
SQL/PSM estende SQL aggiungendo:
Oltre ad essere un valido strumento di sviluppo di applicazioni, SQL/PSM fornisce il supporto fondamentale per le funzionalità orientate agli oggetti in SQL3.
Istruzioni multiple e stored procedure
Le istruzioni multiple e le stored procedure, offrono una varietà di vantaggi in ambiente client/server:
Estensioni di linguaggio procedurale
Il linguaggio procedurale aggiunge a SQL la potenza di un tradizionale linguaggio di programmazione, attraverso istruzioni per il controllo del flusso, ed una varietà di altri costrutti di programmazione.
Istruzioni per il controllo di Flusso
Le estensioni di linguaggio procedurale comprendono anche altri costrutti:
Procedure esterne e chiamate di funzione
Esiste una funzionalità spesso citata tra quelle desiderate per molti database, ed implementate in qualcuno. Essa è la capacità di poter aggiungere, alle funzionalità interne, altre funzionalità, mediante chiamate a procedure scritte dall'utente, esterne al software del database stesso.
Il beneficio di queste capacità, è che permettono ad un database (e quindi anche alle applicazioni database) di poter usare un grande insieme di procedure e funzioni, troppo numerose per essere definite da un comitato per gli standard.
Tempi di sviluppo di SQL/PSM
SQL/PSM sta procedendo rapidamente:
Per facilità di consultazione i binding con i linguaggi di programmazione, sono stati stralciati in un documento a parte. L'attuale versione è semplicemente un estratto dei binding incorporati e dinamici, tratti da SQL-92.
Svariate questioni, riguardanti i binding con i linguaggi di programmazione, rimangono irrisolte.
Per linguaggi di programmazione tradizionali, esiste la mappatura dei tipi di dati per SQL-92. Comunque, deve essere definita una mappatura tra gli oggetti SQL e le variabili del linguaggio di programmazione.
Nel caso dei linguaggi orientati agli oggetti, deve essere definita una mappatura per i tipi di dati SQL attuali, e tra il modello ad oggetti SQL ed il modello ad oggetti del linguaggio orientato agli oggetti.
Il modello ad oggetti deve essere reso stabile prima di essere utilizzato.
I binding coi linguaggi saranno completati come parte di SQL3.
Queste specifiche vorrebbero standardizzare un'interfaccia ai programmi applicativi (API), tra un Gestore di Transazione globale ed un Gestore di Risorse SQL. Sono volte a standardizzare le chiamate di funzione, basate sulle semantiche di ISO/IEC 10026, "Distributed Transaction Processing", che un Gestore di Risorse SQL dovrebbe poter supportare per commit in due fasi. Il documento base è derivato da una pubblicazione X/Open, con il permesso di X/Open, che specifica esplicitamente i parametri e le semantiche di input ed output, in termini dei tipi di dati SQL, per le seguenti funzioni: xa_close, xa_commit, xa_complete, xa_end, xa_forget, xa_open, xa_prepare, xa_recover, xa_rollback, e xa_start.
Attualmente ISO sta tentando di effettuare il fast-track delle specifiche X/Open XA. Il processo di fast-track porta ad adottare specifiche industriali attualmente in uso senza apporre cambiamenti. Le votazioni relative al fast-track di XA al ISO SC21, livello JTC 1, sono iniziate il 27 aprile, 1995, e termineranno il 27 ottobre 1995. Se le specifiche XA verranno approvate dal 75% dei votanti, e dai 2/3 dei membri di JTC 1, diverranno uno Standard Internazionale. Se la votazione sul fast-track sarà approvata, SQL/XA potrebbe diventare uno standard nel 1996.
SQL Temporal riguarda i dati correlati con il tempo. Il concetto alla base, è l'utilità di effettuare interrogazioni dei dati per conoscere come erano in un momento particolare. SQL Temporal è raccolto in un testo di Rick Snodgrass, datato dicembre 1994, in cui sono descritti i concetti.
X3 Dichiara l'Approvazione di un Nuovo Progetto, ISO/IEC 9075 Parte 7: SQL/Temporal è un comunicato-stampa relativo a SQL/Temporal.
----------------------------------------------------------------------------
Temporal SQL
************
Rick Snodgrass (presidente del comitato TSQL2)
31-Dic-1994
Diverse persone hanno contestato la necessità del supporto addizionale per il tempo in
SQL3 (come proposto da DBL RIO-75, che ha richiesto una nuova parte di SQL per supportare
i database temporali). Si sostiene che i tipi di dati astratti (ADT) siano
sufficienti per il supporto temporale. In questo articolo informativo sostengo, usando
esempi concreti, che usare colonne definite con tipi di dati astratti, per interrogazioni temporali,
è una soluzione inadeguata. In particolare, molte ordinarie interrogazioni temporali
sono difficili da simulare in SQL, oppure richiedono l'incorporazione di SQL in un
linguaggio procedurale. In TSQL2, un'estensione temporale di SQL-92, sono
state proposte delle alternative.
Il supporto del tempo di validità surclassa quello di un ADT temporale. Secondo quest'ultimo, una colonna è specificata come parte di un dominio temporale, come DATE o INTERVAL (più avanti verranno forniti brevi esempi). Con la gestione del tempo di validità, le righe di una tabella variano nel tempo, al variare della realtà. Il timestamp associato ad una riga di una tabella con tempo di validità, è interpretato, dal linguaggio di interrogazione, come quel momento in cui la combinazione dei valori delle colonne nella riga era valida. Questo timestamp implicito permette di esprimere le interrogazioni in modo succinto ed intuitivo.
L'Ufficio Personale (UP) dell'Università dell'Arizona ha archiviato alcune informazioni in un database, tra cui il nome di ogni impiegato, il suo attuale salario, ed il suo attuale titolo. Ciò può essere rappresentato per mezzo di una semplice tabella.
Impiegato(Nome, Salario, Titolo)
Data questa tabella, trovare il salario di un impiegato è facile.
SELECT Salario
FROM Impiegato
WHERE Nome = 'Bob'
Adesso l'UP desidera registrare la data di nascita. Per fare ciò, viene aggiunta una colonna
alla tabella, producendo il seguente schema.
Impiegato(Nome, Salario, Titolo, DatadiNascita DATE)
Trovare la data di nascita dell'impiegato è analogo al determinarne il salario.
SELECT DatadiNascita
FROM Impiegato
WHERE Nome = 'Bob'
L'UP desidera gestire, via computer, l'archivio storico dei dipendenti dell'ufficio. Per farlo vengono aggiunte due colonne: la prima indica quando l'informazione della riga diventa valida, mentre l'altra indica quando l'informazione non è più valida.
Impiegato (Nome, Salario, Titolo, DatadiNascita, Inizio DATE, Fine DATE)
Secondo il modello dei dati, queste nuove colonne sono identiche a DatadiNascita. Tuttavia, la loro presenza ha conseguenze a largo raggio.
Per trovare il salario attuale di un impiegato, le cose si fanno più difficili.
SELECT Salario
FROM Impiegato
WHERE Nome = 'Bob' AND Inizio <= CURRENT_DATE AND CURRENT_DATE <= Fine
Questa query è più complicata della precedente. Le indiziate sono,
ovviamente, le due nuove colonne. L'UP vuole fornire, ad ogni impiegato,
la cronistoria del proprio salario. In particolare, devono essere determinati gli intervalli massimali
per ogni salario. Sfortunatamente, questo non è possibile
in SQL. Un impiegato potrebbe avere mutato il proprio titolo, pur mantenendo fisso il valore
del salario.
Nome Salario Titolo DatadiNascita Inizio Fine
---- ------- ------ ------------- ------ ----
Bob 60000 Assistente Rettore 1945-04-09 1993-01-01 1993-05-30
Bob 70000 Assistente Rettore 1945-04-09 1993-06-01 1993-09-30
Bob 70000 Rettore 1945-04-09 1993-10-01 1994-01-31
Bob 70000 Professore 1945-04-09 1994-02-01 1994-12-31
Figura 1
Notate che ci sono tre righe in cui il salario di Bob è rimasto costante a
70'000 $. Ne segue che il risultato dovrebbe essere di due righe per Bob.
Nome Salario Inizio Fine
---- ------- ------ ----
Bob 60000 1993-01-01 1993-05-30
Bob 70000 1993-06-01 1994-12-31
Un'alternativa è quella di fornire all'utente un estratto delle informazioni Salario e Titolo,
così che egli possa determinare da sé quando il suo salario sia cambiato. Questa
alternativa non è molto attraente, e neanche pratica. Una seconda alternativa è quella
di usare SQL fin quando possibile.
CREATE TABLE Temp(Salario, Inizio, Fine)
AS SELECT Salario, Inizio, Fine
FROM Impiegato;
ripetete
UPDATE Temp T1
SET (T1.Fine) = (SELECT MAX(T2.Fine)
FROM Temp AS T2
WHERE T1.Salario = T2.Salario AND T1.Inizio < T2.Inizio
AND T1.Fine >= T2.Inizio AND T1.Fine < T2.Fine)
WHERE EXISTS (SELECT *
FROM Temp AS T2
WHERE T1.Salario = T2.Salario AND T1.Inizio < T2.Inizio
AND T1.Fine >= T2.Inizio AND T1.Fine < T2.Fine)
finché più nessuna riga viene aggiornata;
DELETE FROM Temp T1
WHERE EXISTS (SELECT *
FROM Temp AS T2
WHERE T1.Salario = T2.Salario
AND ((T1.Inizio > T2.Inizio AND T1.Fine <= T2.Fine)
OR (T1.Inizio >= T2.Inizio AND T1.Fine < T2.Fine))
Il ciclo trova quegli intervalli che si sovrappongono o sono adiacenti, e che quindi dovrebbero
essere fusi. Nella peggiore delle ipotesi, il ciclo viene eseguito log N volte, dove N è
il numero di righe comprese in una serie di sovrapposizioni o di adiacenze.
Il lettore può simulare l'interrogazione sulla tabella d'esempio, per convincersi
della sua correttezza.
Una terza alternativa è quella di usare SQL solo per aprire un cursore sulla tabella. Viene mantenuta una lista collegata di periodi, ognuno di essi associato ad un salario. Questa lista collegata dovrebbe essere inizializzata come lista vuota.
DECLARE emp_cursor CURSOR FOR
SELECT Salario, Titolo, Inizio, Fine
FROM Impiegato;
OPEN emp_cursor;
ciclo:
FETCH emp_cursor INTO :salario, :inizio, :fine;
se nessun-dato restituito goto finito;
trova posizione in lista collegata per inserire quest'informazione;
goto ciclo;
finito:
CLOSE emp_cursor;
itera attraverso la lista collegata, stampando date e salari
In questo caso, la lista collegata potrebbe non essere necessaria, se il cursore è realizzato con ORDER BY Inizio.
In ogni caso l'interrogazione, anche la più semplice, è piuttosto difficile da esprimere usando le funzionalità presenti in SQL-92. L'interrogazione è banale in TSQL2.
SELECT Salario
FROM Impiegato
Un approccio più drastico è quello di evitare il problema dell'estrazione della cronistoria del salario, riorganizzando lo schema per separare le informazioni di salario, titolo, e data di nascita (in seguito ignoreremo la data di nascita, per semplicità).
Impiegato1 (Nome, Salario, DATA Inizio, DATA Fine)
Impiegato2 (Nome, Titolo, DATA Inizio, DATA Fine)
La tabella dell'Impiegato1 è la seguente.
Nome Salario Inizio Fine
---- ------- ------ ----
Bob 60000 1993-01-01 1993-05-30
Bob 70000 1993-06-01 1993-12-31
Segue la tabella d'esempio Impiegato2.
Nome Titolo Inizio Fine
---- ------ ------ ----
Bob Assistente Rettore 1993-01-01 1993-09-30
Bob Rettore 1993-10-01 1994-01-31
Bob Professore 1994-02-01 1994-12-31
Ora, con questa variazione, è facile ottenere l'informazione del salario
di un impiegato.
SELECT Salario, Inizio, Fine
FROM Impiegato1
WHERE Nome = 'Bob'
Ma che fare se l'Ufficio Personale volesse una tabella che contenga intervalli di salario e titoli ? (cioè,
supponete che l'UP voglia una tabella simile a quella in Figura 1)
Una possibilità è quella di stampare due tabelle, lasciando all'utente l'onere di immaginare
le giuste combinazioni. Una seconda alternativa è quella di usare esclusivamente SQL. Sfortunatamente,
quest'interrogazione deve riguardare un caso d'analisi relativamente a come ogni riga di Impiegato1 si sovrappone
ad ogni riga di Impiegato2; sono possibili quattro casi.
SELECT Impiegato1.Nome, Salario, Dipartimento, Impiegato1.Inizio, Impiegato1.Fine
FROM Impiegato1, Impiegato2
WHERE Impiegato1.Nome = Impiegato2.Nome
AND Impiegato2.Inizio <= Impiegato1.Inizio AND Impiegato1.Fine < Impiegato2.Fine
UNION
SELECT Impiegato1.Nome, Salario, Dipartimento, Impiegato1.Inizio, Impiegato2.Fine
FROM Impiegato1, Impiegato2
WHERE Impiegato1.Nome = Impiegato2.Nome
AND Impiegato1.Inizio >= Impiegato2.Inizio AND Impiegato2.Fine < Impiegato1.Fine
AND Impiegato1.Inizio < Impiegato2.Fine
UNION
SELECT Impiegato1.Nome, Salario, Dipartimento, Impiegato2.Inizio, Impiegato1.Fine
FROM Impiegato1, Impiegato2
WHERE Impiegato1.Nome = Impiegato2.Nome
AND Impiegato2.Inizio > Impiegato1.Inizio AND Impiegato1.Fine < Impiegato2.Fine
AND Impiegato2.Inizio < Impiegato1.Fine
UNION
SELECT Impiegato1.Nome, Salario, Dipartimento, Impiegato2.Inizio, Impiegato2.Fine
FROM Impiegato1, Impiegato2
WHERE Impiegato1.Nome = Impiegato2.Nome
AND Impiegato2.Inizio > Impiegato1.Inizio AND Impiegato2.Fine < Impiegato1.Fine
Ottenere tutti i casi giusti è un compito arduo. In TSQL2, effettuando una
join temporale, si ottiene proprio quanto ci si attende.
SELECT Impiegato1.Nome, Salario, Dipartimento
FROM Impiegato1, Impiegato2
WHERE Impiegato1.Nome = Impiegato2.Nome
La prossima richiesta dell'Ufficio Personale è: qual è il salario massimo? Prima di aggiungere il tempo, ciò era facile.
SELECT MAX(Salario)
FROM Impiegato
Ora, dal momento che è stata archiviata la cronistoria del salario, vorremmo una cronistoria del massimo
salario. Il problema, naturalmente, è che SQL non fornisce
funzioni aggregate temporali. Il modo facile per farlo è quello di stampare
l'informazione, e scorrerla manualmente alla ricerca dei massimi. Un'alternativa più scaltra è quella di
convertire l'interrogazione istantanea aggregata in una non-aggregata,
e poi convertire quest'ultima in un'interrogazione temporale. L'interrogazione non-aggregata trova quei
salari per i quali non esiste un salario maggiore degli altri.
SELECT Salario
FROM Impiegato AS I1
WHERE NOT EXISTS (SELECT *
FROM Impiegato AS I2
WHERE I2.Salario > I1.Salario)
Convertire questa query in un'interrogazione temporale non è affatto banale.
Quella che segue è una delle strade possibili.
CREATE TABLE Temp (Salario, Inizio, Fine )
AS SELECT Salario, Inizio, Fine
FROM Impiegato;
INSERT INTO Temp
SELECT T.Salario, T.Inizio, I.Inizio
FROM Temp AS T, Impiegato AS I
WHERE I.Inizio >= T.Inizio AND I.Inizio < T.Fine AND I.Salario > T.Salario;
INSERT INTO Temp
SELECT T.Salario, T.Fine , I.Fine
FROM Temp AS T, Impiegato AS I
WHERE I.Fine > T.Inizio AND I.Fine <= T.Fine AND I.Salario > T.Salario;
DELETE FROM Temp T
WHERE EXISTS (SELECT *
FROM Impiegato AS I
WHERE ((T.Inizio => I.Inizio AND T.Inizio < I.Fine )
OR (I.Inizio >= T.Inizio AND I.Inizio < T.Fine ))
AND I.Salario > T.Salario;
Seguendo questa strada creiamo una tabella ausiliaria. Aggiungiamo a questa tabella il minor
periodo di una sottrazione di periodi, ed il maggior periodo di una sottrazione di periodi.
Poi cancelliamo tutti i periodi che si sovrappongono a qualche riga definita dalla
subquery, e in seguito utilizziamo la precedente interrogazione con l'espressione NOT EXISTS. Infine generiamo
il periodo massimo a partire dalla tabella ausiliaria, e lo facciamo nello stesso modo in cui
è stato calcolato in precedenza. Come si può immaginare, questo codice SQL è estremamente
inefficiente da eseguire, viste le complesse interrogazioni nidificate con predicati
irregolari.
Una terza possibilità è quella di impiegare il meno possibile SQL, e calcolare invece il desiderato valore massimo della cronistoria, servendosi dei cursori in un linguaggio ospite.
La query in TSQL2 è ancora una volta lineare ed intuitiva.
SELECT MAX(Salario)
FROM Impiegato
I dati variabili nel tempo sono gestiti dalla maggior parte delle applicazioni database. Il supporto del tempo di validità è assente in SQL. Molte ordinarie interrogazioni temporali sono difficilmente simulabili in SQL, oppure richiedono l'incorporazione di SQL in un linguaggio procedurale, a causa della mancanza di supporto alle tabelle con tempo di validità nel modello di dati di SQL, e nei suoi costrutti interrogativi.
D'altra parte, abbiamo dimostrato come l'aggiunta del supporto del tempo di validità richieda poche variazioni all'implementazione del DBMS, e come possa semplificare in modo drammatico alcune interrogazioni e consentirne altre; abbiamo visto, inoltre, come ciò possa consentire ottimizzazioni delle strutture di archiviazione, dei metodi di indicizzazione, e delle strategie di ottimizzazione che possono produrre significativi miglioramenti delle prestazioni.
Con una nuova parte di SQL3, che gestisce la variazione nel tempo dell'informazione, possiamo iniziare a realizzare applicazioni mirate, consentendo a SQL3 di gestire i dati temporali in modo più accorto.
----------------------------------------------------------------------------
Accredited Standards Committee* X3, Information Technology
NEWS RELEASE
Doc. No.: PR/96-0002
Reply to: Barbara Bennett presso bbennett@itic.nw.dc.us
X3 Annuncia l'approvazione di un Nuovo Progetto, ISO/IEC
9075 Parte 7: SQL/Temporal
Washington D.C., gennaio 1996
----------------------------------------------------------------------------
-- Accredited Standards Committee
X3, Information Technology, annuncia l'approvazione di un nuovo
progetto di Supporto a SQL/Temporal, ISO/IEC 9075 Parte 7, con il lavoro
realizzato dal Technical Committee X3H2, Database.
L'intenzione, di questa proposta di standard, è quella di stabilire una nuova Parte dello standard
SQL3 in costruzione, e cioè la Parte 7, SQL Temporale, che vuole estendere il
linguaggio SQL per fornire supporto all'archiviazione, estrazione, e manipolazione dei dati temporali
in un ambiente di database SQL.
Il prossimo meeting X3H2 è fissato per 11-14 marzo 1996 in
Kansas.
Le richieste di informazioni, riguardo a questo progetto, dovrebbero essere inviate al
Presidente di X3H2,
Dr. Donald R. Deutsch,
Sybase, Inc., Suite 800,
6550 Rock Spring
Drive, Bethesda, MD 20817.
Email: deutsch@sybase.com.
Una primo giro di consultazioni, su possibili licenze e su altre questioni pertinenti
(copyright, marchi), è in corso. Si prega di fornire
le informazioni del caso al
Segretariato X3 presso
1250 Eye Street
NW, Suite 200,
Washington DC 20005.
Email: x3sec@itic.nw.dc.us
FAX: (202)638-4922.
Un nuovo progetto di standardizzazione internazionale ISO/IEC, volto allo sviluppo di una libreria di classi SQL per applicazioni multimediali, è stato approvato agli inizi del 1993. Questa nuova attività di standardizzazione, denominata SQL Multimedia (SQL/MM), mira a stabilire l'insieme delle definizioni dei tipi di dati astratti (ADT) di SQL, usando gli strumenti per la specifica e l'invocazione degli ADT, i quali sono forniti dalle specifiche del costruendo SQL3. SQL/MM si propone di standardizzare librerie di classi ad uso di ambienti scientifici ed ingegneristici, e per elaborazione di documenti e di metodi per la gestione di oggetti multimediali come immagini, suoni, animazione, musica, e video. Verosimilmente SQL/MM fornirà, al linguaggio SQL, un collegamento agli oggetti multimediali definiti da altri organismi di standardizzazione JTC1 (ad es. SC18 per i documenti, SC24 per le immagini, e SC29 per fotografie e filmati).
Il Piano del Progetto di SQL/MM, indica che sarà uno standard composito, consistente di un certo numero di parti sviluppate indipendentemente. La Parte 1 sarà una struttura di base, che specifica come le altre parti devono essere realizzate. Ognuna delle altre parti sarà dedicata ad uno specifico pacchetto applicativo SQL. La seguente struttura delle Parti SQL/MM esiste dall'agosto 1994:
Esiste un certo numero di tentativi di standardizzazione nell'area delle Informazioni Spaziali e Geografiche: