On trouve dans la distribution PostgreSQL aux formats postscript, HTML et pages de manuel unix les documents suivants. Si vous avez accès à l'internet, vous pouvez trouver les documents indiqués ci-dessous à http://www.postgresql.org/docs
Fait partie des commandes PSQL de la version 6.5.2.
Il y a un script dans le répertoire /tools qui fait cela
Utilisez la commande psql \h
Consultez les tests de régression dans src/test. Là, vous y trouver les
répertoires regress/sql et suite/*.sql.
Les scripts du didacticiel SQL sont dans le répertoire src/tutorial
Voir également "Didacticiel SQL pour les débutants"
dans l'appendice B de ce document
Appendix B
Morgan Kaufman Publisher. C'est un des meilleurs livres sur SQL. Il
concerne SQL92.
Addison-Wesley Publishing company. C'est également un bon livre. Très
populaire en ce qui concerne SQL.
Stephen Cannan and Gerard Otten
McGraw-Hill Book Company Europe , Berkshire, SL6 2QL, England
Martin Gruber, Technical Editor: Joe Celko
SYBEX Inc. 2021 Challenger Drive Alameda, CA 94501
Ce livre est la Bible des Systèmes de Gestion de Bases de Données.
Le livre détaille la normalisation, SQL, la récupération, la concurrence,
la sécurité, l'intégrité, les extensions au modèle relationnel original,
des sujets actuels tels que les systèmes client/serveur et le(s) modèle(s)
Orienté(s) Objet. De nombreuses références sont données pour des lectures
complémentaires. Recommandé pour la plupart des utilisateurs.
Ce livre détaille la théorie des bases de données relationnelles, l'algèbre
relationnelle, le calcul et la normalisation. Mais il ne couvre pas les sujets
du mode réel et les exemples sont un peu simplistes. Recommandé pour la plupart
des utilisateurs.
Recommandé pour la plupart des utilisateurs.
Ce livre est un recueil de papiers, sur les bases de données, qui ont été
publiés sur plusieurs années. Il n'est pas pour l'utilisateur occasionnel
mais, c'est réellement une référence pour les étudiants en classes supérieures
(troisième cycle) ou pour les développeurs de systèmes de bases de données.
Ce livre est un recueil de papiers, sur les bases de données, qui ont été
publiés sur plusieurs années. Il n'est pas pour l'utilisateur occasionnel
mais c'est réellement une référence pour les étudiants en classes
supérieures (troisième cycle) ou pour les développeurs de systèmes de
bases de données.
Ce livre traite des détails des méthodes d'accès, et des technique de stockage.
Il n'est pas pour l'utilisateur occasionnel mais c'est réellement une
référence pour les étudiants en classes supérieures (troisième cycle)
ou pour les développeurs de systèmes de bases de données.
Wrox Press Ltd.
Unit 16, 20 James Road, Tyseley
Birmingham, B11 2BA, England
1995
Technology
QED and John Wiley
1991
Présente les exigences de construction d'applications de base de données
client/server par l'intermédiaire de méta-modèles d'entrepôt et l'utilisation
de la norme SQL ANSI 1993
Des centaines d'autres titres concernant SQL sont disponibles! Vérifiez-le dans une librairie.
Les documents de Spécifications ANSI/ISO SQL sont situés à l'endroit indiqué ci-dessous.
Voir l'Appendice A de ce document Appendix A
Les spécifications de SQL 1998 (SQL 3) sont encore en cours de développement. Voir le paragraphe 'Electronic Access to the SQL3 Working Draft' de ce document document à SQL 1998
Voir l'Appendice B de ce document Appendix B
Ce répertoire contient les spécifications pour une extension temporelle au langage SQL-92 standard. Ce nouveau langage est appelé TSQL2.
Les spécifications du langage présentées ici correspondent à la version finale du langage.
La correspondance doit être adressée au bureau du Comité de Conception du Langage TSQL2, Richard T.Snodgrass, Department of Computer Science, University of Arizona, Tucson, AZ 85721,
Les affiliations et les adresses électroniques des membres du Comité de Conception du langage TSQL2 peuvent être trouvées, dans un chapitre séparé, à la fin des spécifications du langage.Le contenu du répertoire est le suivant :
spec.dvi,.ps Spécifications du langage TSQL2, publié en Septembre, 1994
bookspec.ps Spécifications du langage TSQL2, telles qu'elles apparaissent dans le livre sur TSQL2, publié en Septembre, 1995 (voir ci-dessous).
sql3 proposition de modification soumise au comités ANSI et ISO SQL3.
Un ensemble de commentaires, associés aux spécifications du langage, parle des décisions de conception, fournit des exemples, et traite de la façon dont le langage peut être implanté. Ces commentaires sont, à l'origine, des propositions faites au Comité de Conception du Langage TSQL2. Ils poursuivent actuellement un objectif différent: fournir des exemples de syntaxe, expliquer les nombreuses décisions prises durant la conception du langage, et comparer TSQL2 aux nombreuses autres propositions de langage faites au cours des quinze dernières années. Il faut insister sur le fait que ces commentaires ne font pas partie intégrante des spécifications du langage TSQL2 en lui-même, mais plutôt qu'elles le complètent et constituent un apport. Le mot de la fin est donné par les spécifications de TSQL2 proprement dit.
Les commentaires, ainsi que les spécifications du langage, plusieurs index, et d'autres éléments de support ont été publiés dans un livre :
Snodgrass, R.T., éditeur, The TSQL2 Temporal Query Language, (Le Langage de Requêtes Temporel TSQL2) Kluwer Academic Publishers, 1995, 674+xxiv pages.
Les commentaires d'évaluation sont donnés sous forme abrégée dans le livre; La totalité des commentaires est fournie dans le fichier eval.ps situé dans ce répertoire
Le fichier tl2tsql2.pl est un programme prolog qui traduit la logique temporelle autorisée en TSQL2. Ce programme a été écrit par Michael Boehlen
On peut le contacter pour obtenir un papier qui décrit cette traduction. C'est une version tout à fait ancienne du programme. Les nouvelles versions sont disponibles à (the TimeDB and Tiger systems).Ce document vous explique comment acquérir (légalement) une copie de la norme SQL-92 et comment acquérir une copie du Brouillon de Travail du SQL3 "actuel".
La norme ANSI est protégée par un copyright de l'ANSI, et la norme ISO par un copyright de l'ISO.
Il y a deux (2) normes SQL courantes, une publication ANSI et une publication ISO. Les deux normes sont identiques mot-pour-mot excepté pour quelques sujets triviaux tel que le titre du document, les en-tête de page, la phrase "International Standard" au lieu de "American Standard", et ainsi de suite.
Achat du Standard SQL-92
La norme ISO, ISO/IEC 9075:1992, Information Technology - Database Languages - SQL, est actuellement (Mars, 1993) disponible et en stock à l'ANSI :
American National Standards Institute
1430 Broadway
New York, NY 10018 (USA)
Phone (sales): +1.212.642.4900
au prix de US$ 230.00. La version ANSI, ANSI X3.135-1992, American
National Standard for Information Systems - Database Language SQL, n'était
pas disponible en stock au moment de la rédaction, mais il
devrait l'être entre fin Mars et début Mai, 1993). Il devrait coûter
US$ 225.00.
Si vous achetez l'un ou l'autre document à l'ANSI, il y aura un supplément de 7% pour le traitement (soit environ US$ 9.10). Les frais d'envoi à l'étranger accroîtront sans doute le coût. ANSI exige des sociétés un document de commande écrit pour chaque commande; d'un autre côté, vous pouvez envoyer un chèque tiré sur une banque US en dollars US, qu'ils encaisseront avant d'expédier votre commande. (Il y a une exception : si votre organisation est membre de l'ANSI, alors l'ANSI enverra les documents et une facture à votre compagnie.)
La norme ISO est aussi disponible en dehors des États-Unis à partir de représentations nationales locales (entités de standardisation du pays) qui sont membres soit de l'ISO (International Organization for Standardization) soit de l'IEC (International Electrotechnical Commission). Des copies de la liste des représentations nationales, avec leurs adresses, sont disponibles de l'ANSI ou d'autres entités nationales. Ils sont aussi disponibles à l'ISO :
International Organization for Standardization
Central Secretariat
1, rue de Varembi
CH-1211 Genève 20
Switzerland
Si vous préférez commander la norme d'une façon plus facile et plus rapide, il
vous faudra payer pour ce privilège. Vous pouvez commander le ISO/IEC
9075:1992, Information Technology - Database Languages - SQL, à :
Global Engineering Documents
2805 McGaw Ave
Irvine, CA 92714 (USA)
USA
Téléphone (accessible de partout): +1.714.261.1455
Téléphone (uniquement aux USA): (800)854-7179
pour un prix de US$ 308.00. Je ne sais pas si le port est compris ou non,
mais je parierais que l'envoi international (au moins) sera en supplément.
Ils peuvent vous envoyer un document très rapidement et acceptent même
les "plus grandes cartes de crédit". Global n'a pas encore la version ANSI
pas plus qu'un prix ou qu'une date prévisible de disponibilité (bien que je
l'attende dans les quelques semaines suivant la publication par l' ANSI et à
un prix aux alentours de US$ 300.00).
Achat d'une copie du Document de Travail SQL3
Vous pouvez acheter une copie du document de travail SQL3 au secrétariat de l'ANSI X3, CBEMA (Computer and Business Equipment Manufacturers Association). Leur objectif est d'avoir la "plus récente" version du document de travail de SQL3 disponible et de la vendre pour environ US$ 60.00 à US$ 65.00. Vous pouvez contacter CBEMA à:
CBEMA, X3 Secretariat
Attn: Lynn Barra
1250 Eye St.
Suite 200
Washington, DC 20005 (USA)
Lynn Barra peut aussi être contactée par téléphone au +1.202.626.5738 pour une
demande de copie, bien qu'un courrier soit probablement plus courtois.
Accès Électronique au Document de Travail SQL3
La plus récente version (à la date de rédaction) du document de travail SQL3 (à la fois ANSI et ISO, et de toutes ses parties) est disponible par "ftp anonyme" ou par "ftpmail" sur:
gatekeeper.dec.com
dans
/pub/standards/sql/
Dans ce répertoire , il y a de nombreux fichiers. Ce sont des fichiers PostScript
et "texte ordinaire" (pas très bien formatés, mais lisibles sur un écran sans
logiciel spécifique).
En général, vous pouvez trouver des fichiers avec des noms tels que :
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
A mesure que de nouvelles versions des documents sont produites le "mar94" changera
pour indiquer la nouvelle date de publication (e.g., "aug94" est la date attendue
de la prochaine publication suivant "mar94").
De plus, pour les lecteurs ne pouvant pas obtenir une liste de répertoire par FTP, nous avons ajouté un fichier ayant pour nom :
ls
dans le même répertoire. Ce fichier (surprise!) contient une liste du répertoire.
Récupérer les Fichiers Directement par Ftp
Voici un exemple sur la façon d'utiliser FTP. Spécifiquement, il montre comment se connecter à gatekeeper.dec.com, aller au répertoire où le document de base est gardé et à transférer ce document sur votre machine. Notez que votre machine doit pouvoir accéder à l'internet pour faire cela. Le nom de connexion est 'ftp' et le mot de passe est votre adresse e-mail (on appelle quelquefois cela 'ftp anonyme'). La commande 'type binaire' est utilisée pour s'assurer qu'aucuns bits ne seront supprimés du (des) fichier(s) reçu(s). La commande 'get' récupère un fichier à la fois. Les commentaires dans le script ci-dessous sont placés entre les signes < ... >, < comme ceci > .
% ftp gatekeeper.dec.com
Connected to gatekeeper.dec.com.
220- *** /etc/motd.ftp ***
Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research.
<...il en va ainsi pendant un certain temps...>
220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready.
Name (gatekeeper.dec.com:<votre nom de connexion ici>): ftp <anonyme fonctionne également>
331 Guest login ok, send ident as password.
Password: <entrez votre adresse e-mail ici>
230 Guest login ok, access restrictions apply.
Remote system type is UNIX. <ou autre>
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
% <le fichier est maintenant dans votre répertoire sous le nom x3h2-93-082.txt>
Récupération de Fichiers Sans Faire un ftp Direct
Digital Equipment Corporation, comme plusieurs autres compagnies, fournit un service de ftp par courrier électronique. La réponse peut prendre plusieurs jours, mais cela fournit un service équivalent à ftp pour ceux qui n'ont pas un accès direct au ftp par Internet. L'adresse du serveur est:
ftpmail@decwrl.dec.com
Le script suivant récupérera la dernière version PostScript du document SQL3 :
reply joe.programmer@imaginary-corp.com
connect gatekeeper.dec.com anonymous
binary
compress
Le script suivant récupérera la dernière version PostScript du document SQL3 :
reply joe.programmer@imaginary-corp.com
connect gatekeeper.dec.com anonymous
binary
compress
uuencode
chdir /pub/standards/sql
get x3h2-93-091.ps
quit
La première ligne du script commande au serveur de vous retourner les fichiers demandés;
vous devrez remplacer "joe.programmer@imaginary-corp.com" par votre adresse Internet.
Le fichier x3h2-93-091.ps, dans cet exemple, est retourné sous forme de 34 messages e-mail
séparés, "compressés" et "uuencodés". Si votre environnement ne dispose pas des outils
pour reconstruire de tels fichiers, alors, il vous faudra récupérer le fichier sous forme
de texte pur en utilisant le script suivant:
reply joe.programmer@imaginary-corp.com
connect gatekeeper.dec.com anonymous
chdir /pub/standards/sql
get x3h2-93-091.ps
quit
Mais, attention, le fichier .ps vous sera probablement envoyé en plus de 70 morceaux!
Pour récupérer un fichier particulier, autre que x3h2-93-091.ps, remplacez simplement "x3h2-93-091.ps" par le nom du fichier désiré. Pour obtenir la liste de tous les fichiers disponibles dans un répertoire, remplacez "get x3h2-93-091.ps" par "dir".
Ce chapitre constitue une source d'information à propos du processus de normalisation de SQL et de son état actuel.
État Actuel
Le développement pour améliorer SQL afin d'en faire un langage complet pour la définition et la gestion d'objets persistants et complexes. Ceci comprend : les hiérarchies de généralisation et de spécialisation, l'héritage multiple, les types de données définies par l'utilisateur, les déclencheurs et les assertions, le support des systèmes à base de connaissances, les requêtes récursives, et des outils complémentaires d'administration de données. Cela inclue également la spécification des types de données abstraits (ADTs), des identificateurs d'objets, des méthodes, de l'héritage, du polymorphisme, de l'encapsulation et de tous les autres moyens normalement associés à la gestion d'objets.
A l'automne 1996, plusieurs parties de SQL3 ont été soumises à un vote de l'ISO CD. Ce sont SQL/Framework, SQL/Foundation et SQL/Bindings. Ce vote échoua (comme prévu) avec environ 900 commentaires. Fin Janvier, un comité de rédaction traita un grand nombre de solutions aux problèmes qui furent soit incluses avec les commentaires du vote ou soumises en tant que documents séparés. Depuis le comité de rédaction DBL n'a pas pu traiter tous les commentaires et sa durée a été augmentée. La fin du comité de rédaction est prévue pour la fin Juillet 1997, à Londres.
A la suite du comité de rédaction de Juillet, on attend qu'un vote final du CD soit demandé pour ces parties de SQL. Le processus du CD Final prendra environ 6 mois et un comité de rédaction du DBL, après lesquels il y aura un vote IS et un très rapide vote IS.
Les procédures ISO ont changé depuis SQL/92, et les comités SQL travaillent encore selon les règles du processus.
Si tout va bien, ces parties du SQL3 deviendront une norme officielle ISO/IEC en fin 1998, mais le programme est très serré.
En 1993, les comités de développement ANSI et ISO ont décidé de d'éclater le développement futur de SQL en une norme multi-parties. Ces parties sont :
Aux USA, la totalité de SQL3 est en cours de traitement à la fois comme projet ("D") national et comme projet ISO. La fin de SQL3 est attendue pour courant 1999.
Le SQL/CLI et le SQL/PSM sont en cours de traitement aussi rapidement que possible comme addenda à SQL-92. Aux USA, ils sont traités uniquement comme projet International. SQL/CLI a été terminé en 1995. SQL/PSM devrait être terminé fin 1996.
En plus du travail sur SQL3, quelques projets additionnels sont poursuivis :
Comités et Processus de Standardisation
Il y a effectivement de nombreux comités de normalisation de par le monde. Il y a un groupe international de normalisation SQL faisant partie de l'ISO. Un certain nombre de pays on des comités qui se consacrent à SQL. Ces pays (habituellement) envoient des représentants aux réunions ISO/IEC JTC1/SC 21/WG3 DBL. Les pays qui participent activement au processus de normalisation ISO SQL sont :
Validation NIST
Les implémentations SQL sont validées (aux États-Unis) par le National Institute of Standards and Testing (NIST). Le NIST possède une suite de tests de validation pour le niveau de base SQL-92. Les détails exacts des exigences de la validation NIST sont définis comme un Federal Information Processing Standard (FIPS). Les exigences actuelles pour SQL sont définies dans le document FIPS 127-2. Les versions Postscript et Texte de ce document peuvent être obtenues au NIST. La Liste des Produits Validés à jour peut également être obtenue au NIST.
Publications et Articles sur le Standard SQL
Il y a deux versions de la norme SQL. Les deux sont disponibles à l'ANSI:
Les deux versions de la norme SQL sont identiques sauf la page de garde et les références aux autres normes. Les deux versions sont disponibles au :
American National Standards Institute
1430 Broadway
New York, NY 10018
USA
Téléphone (ventes): +1.212.642.4900
En supplément à la norme SQL-92, il y a maintenant un Technical Corrigendum (correction
d'erreurs) :
* Technical Corrigendum 1:1994 to ISO/IEC 9075:1992
Le TC 1 doit aussi être disponible à l'ANSI. Il n'y a qu'une version du TC
1 -- qui s'applique à la fois aux versions ISO et ANSI de SQL-92.
En supplément à ces normes, plusieurs livres ont été écrits sur la norme SQL 1992. Ces livrent donnent une description bien plus lisible de la norme que celle donnée par le norme elle-même.
Standards connexes
Un certain nombre d'autres normes présentent de l'intérêt pour la communauté SQL. Cette section contient des pointeurs donnant des informations sur ces efforts. Ces pointeurs seront plus nombreux à mesure que des informations complémentaires seront disponibles sur le web.
Une partie importante de l'effort pour SQL3 réside dans le document de base SQL :
Il y a plusieurs pré-requis pour les capacités orientées objets :
Ces capacités sont définies comme faisant partie de SQL/PSM
Une grande quantité de travail est en cours de réalisation pour affiner le modèle objet SQL-3 et l'aligner sur le modèle objet proposé par l'ODMG. Cet effort est décrit dans les papiers X3H2 et ISO DBL : Accommoder SQL3 et ODMG. Une mise à jour récente sur le Fusionneur SQL3/OQL est également disponible.
Planification de SQL3
Le travail sur SQL3 se poursuit normalement, mais la publication de la norme finale se situe encore à un horizon de plusieurs années.
SQL/CLI est une interface de programmation d'appel pour les bases de données SQL. Il est conçu pour accéder aux bases de données à partir d'applications fermées. CLI a, à l'origine, été créé par un sous-comité du groupe SQL Access (SAG). Les spécifications de SAG/CLI ont été publiées, en 1992, en tant que spécifications Microsoft Open DataBase Connectivity (ODBC) en 1992. En 1993, le SAG a soumis le CLI aux comités ANSI et ISO SQL. (Le groupe "SQL Access Group" a maintenant été fusionné avec le consortium X/Open.)
SQL/CLI fournit une norme internationale pour :
Planification de SQL/CLI
Le processus de normalisation de SQL/CLI se poursuit à une vitesse aveuglante.
SQL/PSM étend SQL en ajoutant :
SQL/PSM apporte, en plus du fait d'être un bon outil de développement d'application, une base pour des fonctionnalités orientées objet dans SQL3.
Procédures mémorisées et multi-instructions
Multi-instructions et procédures mémorisées offrent une grande variété d'avantages dans un environnement client/serveur :
Extensions de Langage Procédural
Le langage procédural ajoute la puissance d'un langage de programmation traditionnel à SQL grâce à des instructions de contrôle de flot et à d'autres constructions utilisées en programmation.
Instructions de contrôle de flot
Les extensions de langage procédural comprennent d'autres constructions des langages de programmation :
De plus, toutes les instructions SQL traditionnelles peuvent être inclues dans de procédures multi-instructions.
Appels de Fonctions et de Procédures externes
Une fonctionnalité souvent mentionnée dans la liste des souhaits pour de nombreuses base de données et produits et qui est implémentée dans quelques-uns, est la capacité de pouvoir augmenter les fonctionnalités du logiciel de base de données d'origine par des appels à des procédures externes écrites par les utilisateurs.
Le bénéfice de cette capacité est de donner accès, pour la base de données (et, par là, aux applications base de données), à un riche ensemble de procédures et de fonctions trop nombreuses pour être définies par un comité de normalisation.
Planification de SQL/PSM
SQL/PSM évolue rapidement :
Pour en faciliter l'accès, la description des liens avec le langage de programmation a été mise dans un document séparé. La version actuelle consiste simplement en un extrait concernant les liens dynamiques et intégrés de SQL-92.
Un certain nombre de sujets concernant les liens avec le langage de programmation restent en suspens.
Pour les langage de programmation traditionnels, il existe des transformations pour les types de données de SQL-92. Cependant, des transformations doivent être définis entre les objets SQL et les variables des langages de programmation.
Pour les langages orientés objets, la transformation doit être définie pour les types de données courants SQL et entre le modèle objet SQL et le modèle objet du langage orienté objet.
Le modèle objet doit se stabiliser avant de résoudre ces problèmes.
Les liens avec le langage feront partie intégrante de SQL3.
Cette spécification devrait normaliser l'interface de programmation d'application (API) entre un Gestionnaire de Transaction global et le Gestionnaire de Ressources SQL. Il devrait normaliser les appels de fonction, en s'appuyant sur la sémantique de l'ISO/IEC 10026, "Distributed Transaction Processing", qu'un Gestionnaire de Ressources SQL devrait supporter pour la validation en deux phases. Le document de base est dérivé d'une publication de l'X/Open, avec sa permission, qui spécifie explicitement les paramètres d'entrée, de sortie et la sémantique, en termes de types de données SQL, pour les fonctions suivantes : xa_close, xa_commit, xa_complete, xa_end, xa_forget, xa_open, xa_prepare, xa_recover, xa_rollback, et xa_start.
ISO essaye actuellement de coller aux spécifications XA de l'X/Open. Ce processus de suivi, au plus près, consiste à adopter les spécifications de l'industrie sans changements. Le vote pour l'XA à l'ISO SC21, JTC 1 a débuté le 27 avril 1995 et se termine le 27 octobre 1995. Si les spécifications XA sont approuvées par 75% des votants, et par 2/3 des membres participants de JTC 1, cela deviendra une Norme Internationale. Si le vote est approuvé, SQL/XA pourrait devenir une norme en 1996.
Le SQL Temporel traite des données en relation avec le temps. Conceptuellement, cela consiste à dire qu'il est utile d'aller chercher des données pour découvrir l'allure qu'elles avaient à un certain moment. L'origine du SQL Temporel réside dans un papier de décembre 1994 de Rick Snodgrass qui en décrivait les concepts.
X3 Annonce l'Approbation d'un Nouveau Projet, ISO/IEC 9075 Partie 7 : SQL/Temporel est un communiqué de presse concernant le SQL/Temporel.
----------------------------------------------------------------------------
SQL Temporel
************
Rick Snodgrass (Président du comité TSQL2)
31-Dec-1994
Plusieurs personnes se sont posé la question de la nécessité de la prise en
charge de la gestion du temps dans SQL3 (comme cela a été proposé par DBL RIO-75,
demandant qu'une nouvelle partie de SQL prenne en charge les bases de données
temporelles). Le sentiment est que les types de données abstraits (ADT) sont
suffisants pour gérer les questions de temps. Dans ce papier, je démontre,
par des exemples concrets, que l'utilisation de colonnes typées, avec des
types de données abstraits, est inadaptée pour des requêtes temporelles.
En particulier, beaucoup de requêtes temporelles courantes sont soit
difficiles à simuler en SQL, soit nécessitent d'intégrer SQL dans un langage
procédural. Des solutions alternatives sont exposées dans TSQL2, une extension
temporelle à SQL-92.
La prise en charge d'un instant de validité va au-delà de celle de types de données temporels abstraits (ADT temporel). Avec ce dernier, on spécifie qu'une colonne sera celle consacrée au domaine temporel, tel que la DATE ou un INTERVALLE (je donnerai des exemples bientôt). Avec un instant de validité, les lignes d'une table varient en fonction du temps, reflétant les modifications de la réalité. Le timbre dateur associé à une ligne d'une table à instant de validité est interprété par le langage d'interrogation comme l'instant où la combinaison des valeurs dans les colonnes d'une ligne était valide. Ce timbre dateur implicite permet d'exprimer des requêtes de manière simple et intuitive.
Le bureau du personnel (BP) salarié de l'université de l'Arizona possède un certain nombre d'informations, dans une base de données, dont le nom de chaque employé, son salaire actuel ainsi que son titre. On peut représenter cela dans une simple table.
Employee(Name, Salary, Title)
Étant donné cette table, retrouver le salaire d'un employé est une opération aisée.
SELECT Salary
FROM Employee
WHERE Name = 'Bob'
Maintenant, le BP souhaite enregistrer les dates de naissance. Pour ce faire, on ajoute
une colonne à la table, ce qui donne le schéma suivant.
Employee(Name, Salary, Title, DateofBirth DATE)
Retrouver la date de naissance d'un employé est analogue à retrouver son salaire.
SELECT DateofBirth
FROM Employee
WHERE Name = 'Bob'
Le BP souhaite informatiser l'historique de l'emploi. Pour ce faire, ils ajoutent deux colonnes, l'une pour indiquer quand l'information contenue dans le ligne est devenue valide, l'autre indiquant la fin de validité de cette information.
Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)
Pour le modèle de données, ces nouvelles colonnes sont identiques à la date de naissance. Cependant, leur présence à des conséquences à grande échelle.
Pour trouver le salaire actuel d'un salarié, les choses sont plus difficiles.
SELECT Salary
FROM Employee
WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop
Cette requête est plus compliquée que la précédente. Le coupable se situe, de
toute évidence, dans ces deux nouvelles colonnes. Le BP veut fournir à chaque
employé l'historique de leur salaire. Pour chaque personne, spécifiquement,
il est nécessaire de déterminer les intervalles correspondants à chacun des
salaires. Malheureusement, cela n'est pas possible en SQL. Un employé peut
avoir un nombre arbitraire de changements de titre entre deux changements
de salaire.
Name Salary Title DateofBirth Start Stop
---- ------ ----- ----------- ----- ----
Bob 60000 Assistant Provost 1945-04-09 1993-01-01 1993-05-30
Bob 70000 Assistant Provost 1945-04-09 1993-06-01 1993-09-30
Bob 70000 Provost 1945-04-09 1993-10-01 1994-01-31
Bob 70000 Professor 1945-04-09 1994-02-01 1994-12-31
Figure 1
Notez qu'il y a trois lignes pour lesquelles le salaire de Bob reste constant à
$ 70,000. De là, le résultat sera de deux lignes pour Bob.
Name Salary Start Stop
---- ------ ----- ----
Bob 60000 1993-01-01 1993-05-30
Bob 70000 1993-06-01 1994-12-31
Une alternative est de donner à l'utilisateur une édition des informations Salaire
et Titre, et de laisser l'utilisateur déterminer quand son salaire a changé. Cette
alternative n'est ni très attirante ni très réaliste. Une seconde alternative est
d'utiliser SQL autant que possible.
CREATE TABLE Temp(Salary, Start, Stop)
AS SELECT Salary, Start, Stop
FROM Employee;
répéter
UPDATE Temp T1
SET (T1.Stop) = (SELECT MAX(T2.Stop)
FROM Temp AS T2
WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
WHERE EXISTS (SELECT *
FROM Temp AS T2
WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
jusqu'à ce qu'aucune ligne ne soit mise à jour;
DELETE FROM Temp T1
WHERE EXISTS (SELECT *
FROM Temp AS T2
WHERE T1.Salary = T2.Salary
AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop)
OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop))
La boucle trouve des intervalles qui se chevauchent ou sont adjacents et,
doivent donc être fusionnés. La boucle est exécutée log N fois dans le pire
des cas, où N est le nombre de lignes dans une chaîne de lignes de valeur
équivalente qui se chevauchent ou sont adjacentes. Le lecteur peut simuler
cette requête sur la table de l'exemple pour se convaincre de sa vérité.
Une troisième alternative consiste à utiliser SQL uniquement pour ouvrir un curseur sur la table. Une liste chaînée de périodes est entretenue, chacune avec un salaire. La liste chaînée doit être initialisée vide.
DECLARE emp_cursor CURSOR FOR
SELECT Salary, Title, Start, Stop
FROM Employee;
OPEN emp_cursor;
boucle:
FETCH emp_cursor INTO :salary, :start, :stop;
si pas-de-données est retourné alors aller à fin;
trouver la position dans la liste chaînée pour insérer cette information;
aller à boucle;
fin:
CLOSE emp_cursor;
Répéter tout au long de la liste chaînée, édition des dates et des salaires
La liste chaînée peut ne pas être nécessaire au cas où le curseur est ORDER BY Start.
Dans tous les cas, la requête, tout ce qu'il y a de naturelle, est tout à fait difficile à exprimer en utilisant les possibilités offertes par SQL-92. La requête est triviale en TSQL2.
SELECT Salary
FROM Employee
Une approche plus drastique consiste à éviter le problème d'extraction de l'historique du salaire en réorganisant le schéma pour séparer les informations de salaire, de titre, et de date de naissance (dans ce qui suit, nous ignorerons la date de naissance pour raison de simplicité).
Employee1 (Name, Salary, Start DATE, Stop DATE)
Employee2 (Name, Title, Start DATE, Stop DATE)
La table Employee1 est la suivante.
Name Salary Start Stop
---- ------ ----- ----
Bob 60000 1993-01-01 1993-05-30
Bob 70000 1993-06-01 1993-12-31
Voici un exemple de la table Employee2.
Name Title Start Stop
---- ------ ----- ----
Bob Assistant Provost 1993-01-01 1993-09-30
Bob Provost 1993-10-01 1994-01-31
Bob Professor 1994-02-01 1994-12-31
Avec cette modification, aller chercher l'information de salaire d'un employé
devient maintenant facile.
SELECT Salary, Start, Stop
FROM Employee1
WHERE Name = 'Bob'
Mais qu'en est-il si le BP veut une table des salaires, des intervalles de
titre (c'est-à-dire, supposons que le BP veuille qu'une table soit calculée
dans la forme de la Figure 1)? Une alternative est d'éditer les deux tables,
et de laisser l'utilisateur en calculer les combinaisons. Une seconde
alternative est d'utiliser entièrement SQL. Malheureusement, cette requête
doit faire une étude de cas sur la manière dont chaque ligne de Employee1 se
chevauche avec chaque ligne de Employee2; il y a quatre cas possibles.
SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee1.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
AND Employee2.Start <= Employee1.Start AND Employee1.Stop < Employee2.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee2.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
AND Employee1.Start >= Employee2.Start AND Employee2.Stop < Employee1.Stop
AND Employee1.Start < Employee2.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee1.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
AND Employee2.Start > Employee1.Start AND Employee1.Stop < Employee2.Stop
AND Employee2.Start < Employee1.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee2.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
AND Employee2.Start > Employee1.Start AND Employee2.Stop < Employee1.Stop
Prendre en compte, d'une façon correcte, tous les cas constitue une tâche qui relève du challenge. En TSQL2, réaliser
une jointure temporelle correspond simplement à ce que l'on peut espérer.
SELECT Employee1.Name, Salary, Dept
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
Maintenant, on demande au BP quel est le salaire maximum ? Avant d'ajouter les données de temps, c'était facile.
SELECT MAX(Salary)
FROM Employee
Maintenant que l'historique du salaire est enregistré, nous obtiendrons quelque chose
comme l'historique du salaire maximum à travers le temps. Le problème est que,
naturellement, SQL ne fournit pas d'agrégats temporels. Le moyen simple de réaliser
cela consiste à éditer l'information, et à chercher, à la main, le maximum. Une
alternative consiste à être plus astucieux et à convertir l'instantané de la
requête agrégée en une requête non agrégée, puis à convertir le résultat en
requête temporelle. La requête non agrégée retrouve les salaires pour lesquels
un salaire plus élevé n'existe pas.
SELECT Salary
FROM Employee AS E1
WHERE NOT EXISTS (SELECT *
FROM Employee AS E2
WHERE E2.Salary > E1.Salary)
Convertir cette requête en une requête temporelle est loin d'être évident. Ce qui
suit constitue une approche possible.
CREATE TABLE Temp (Salary, Start, Stop)
AS SELECT Salary, Start, Stop
FROM Employee;
INSERT INTO Temp
SELECT T.Salary, T.Start, E.Start
FROM Temp AS T, Employee AS E
WHERE E.Start >= T.Start AND E.Start < T.Stop AND E.Salary > T.Salary;
INSERT INTO Temp
SELECT T.Salary, T.Stop, E.Stop
FROM Temp AS T, Employee AS E
WHERE E.Stop > T.Start AND E.Stop <= T.Stop AND E.Salary > T.Salary;
DELETE FROM Temp T
WHERE EXISTS (SELECT *
FROM Employee AS E
WHERE ((T.Start => E.Start AND T.Start < E.Stop)
OR (E.Start >= T.Start AND E.Start < T.Stop))
AND E.Salary > T.Salary;
Cette approche crée une table auxiliaire. Nous ajoutons à cette table la
période inférieure soustraite d'une période et la partie supérieure
soustraite d'une période. Nous supprimons alors toutes les périodes
qui se chevauchent avec une ligne définie dans la sous-requête, de ce fait
réalisant le NOT EXISTS(n'existe pas). Finalement nous générons à partir
de la table auxiliaire les périodes maximales, de la même façon que
l'information de salaire avait été calculée ci-dessus. Comme on peut
l'imaginer, un tel code SQLest extrêmement inefficace à l'exécution,
compte tenu des requêtes complexes imbriquées contenant des prédicats
d'inégalité.
Une troisième alternative consiste à utiliser le moins possible SQL, et plutôt de calculer le maximum désiré dans un langage hôte en utilisant des curseurs.
La requête en TSQL2 est de nouveau simple et intuitive.
SELECT MAX(Salary)
FROM Employee
Dans la plupart des applications de base de données on manipule des données qui changent en fonction du temps. La prise en compte de l'instant de validité est absente de SQL. Beaucoup de requêtes temporelles ordinaires sont difficiles à simuler en SQL, ou requièrent du SQL intégré dans un langage procédural, ceci étant dû au manque de support des tables avec instant de validité dans son modèle de données et dans la structure des requêtes.
Ailleurs, nous avons montré que l'ajout du support de l'instant de validité ne requiert que peu de modifications dans l'implémentation des SGDB, peut radicalement simplifier un certain nombre de requêtes et en permettre d'autres, et peut, plus tard, permettre des optimisations dans les structures de mémoires, les méthodes d'indexation et les stratégies d'optimisation qui peuvent entraîner des améliorations notables dans les performances.
Avec une nouvelle partie de SQL3 supportant les informations qui varient avec le temps, permettant une meilleure gestion des données temporelles par SQL3, nous pouvons commencer à apporter une réponse à de telles application.
----------------------------------------------------------------------------
Comité de Normalisation Accrédité* X3, Technologie de L'Information
COMMUNIQUE
Doc. No.: PR/96-0002
Reply to: Barbara Bennett at bbennett@itic.nw.dc.us
X3 Annonce l'approbation d'un Nouveau Projet, ISO/IEC
9075 Partie 7: SQL/Temporal
Washington D.C., Janvier 1996
----------------------------------------------------------------------------
-- Le Comité de Normalisation Accrédité
X3, Technologie de l'Information, annonce l'approbation d'un nouveau
projet concernant le support de SQL/Temporel , ISO/IEC 9075 Partie 7, le
travail devant être réalisé au sein du Comité Technique X3H2, Bases de Données.
Cette proposition de norme concerne un nouvelle partie de la norme naissante
SQL3, e.g., Partie 7, SQL Temporel, et spécifie les extensions au langage
SQL pour gérer le stockage, l'extraction et la manipulation des données
temporelles dans un environnement de base de données SQL.
La prochaine réunion du comité X3H2 est planifié pour la période du 11 au 14 Mars 1996 dans le Kansas.
Les questions concernant ce projet doivent être envoyées au président de X3H2 :
Chairman of X3H2,
Dr. Donald R. Deutsch,
Sybase, Inc., Suite 800,
6550 Rock Spring
Drive, Bethesda, MD 20817.
Email: deutsch@sybase.com.
Un appel initial pour de possibles brevets ou autres sujets pertinents
(copyrights, trademarks) est sur le point d'être émis. Soumettez, s'il vous plaît,
les informations à ce propos au secrétariat de X3 à :
X3 Secretariat
1250 Eye Street
NW, Suite 200,
Washington DC 20005.
Email: x3sec@itic.nw.dc.us
FAX: (202)638-4922.
Un nouveau projet international de normalisation ISO/IEC pour le développement d'une bibliothèque de classe SQL pour les applications multi-media a été approuvé début 1993. Cette nouvelle activité de normalisation, appelée SQL Multi-media (SQL/MM), spécifiera les paquetages de définition de types de données abstraites SQL (ADT) en utilisant les fonctions fournies dans les spécifications SQL3 naissantes pour ADT. SQL/MM a pour objectif de normaliser des bibliothèques de classes pour la science et l'ingénierie, le traitement des textes et des documents, ainsi que des méthodes pour la gestion d'objets multi-media tels que les images, les sons, les animations, la musique et la vidéo. Il fournira vraisemblablement un lien entre le langage SQL et les objets multi-media définis par les autres entités de normalisation du JTC1 (e.g. SC18 pour les documents, SC24 pour les images, et SC29 pour les photographies et les images animées).
Le Plan du Projet pour SQL/MM prévoit que ce sera une norme multi-parties dont le nombre de parties pourra évoluer. La partie 1 consistera en un cadre spécifiant comment les autres parties doivent être architecturé. Chacune de ces autres parties sera consacrée à un paquetage d'application SQL spécifique. En août 1994, la structure existante était la suivante :
On assiste à des efforts de normalisation dans le domaine des informations Spatiales et Géographiques :