Page suivante Page précédente Table des matières

24. Livres et Documentations

24.1 Guides utilisateur et Manuels

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

24.2 Documentation en ligne

24.3 Documents de Référence: Ouvrages de référence utiles :

Des centaines d'autres titres concernant SQL sont disponibles! Vérifiez-le dans une librairie.

24.4 Documents de Spécifications ANSI/ISO SQL - SQL 1992, SQL 1998

Les documents de Spécifications ANSI/ISO SQL sont situés à l'endroit indiqué ci-dessous.

24.5 Syntaxe de l'ANSI/ISO SQL 1992

Voir l'Appendice A de ce document Appendix A

24.6 Syntaxe de l'ANSI/ISO SQL 1998

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

24.7 Didacticiel SQL pour les débutants

Voir l'Appendice B de ce document Appendix B

24.8 Extension Temporelle à SQL92

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

24.9 Partie 0 - Acquisition des Documents ISO/ANSI SQL

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:

[email protected]

Le script suivant récupérera la dernière version PostScript du document SQL3 :

     reply [email protected]
     connect gatekeeper.dec.com anonymous
     binary
     compress
Le script suivant récupérera la dernière version PostScript du document SQL3 :
     reply [email protected]
     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 "[email protected]" 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 [email protected]
     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".

24.10 Partie 1 - Etat Actuel de l'ISO/ANSI SQL

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.

24.11 Partie 2 - Fondements ISO/ANSI SQL

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.

Le programme de la version ANSI sera similaire.

24.12 Partie 3 - Interface d'Appel SQL ISO/ANSI

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.

24.13 Partie 4 - Modules Mémorisés Persistants ISO/ANSI SQL

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 :

24.14 Partie 5 - ISO/ANSI SQL/Liens

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.

24.15 Partie 6 - Interface de Spécialisation (SQL/XA) ISO/ANSI SQL XA)

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.

24.16 Partie 7 - ISO/ANSI SQL Temporel

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.

INTRODUCTION

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.

ÉTUDE DE CAS - ENREGISTREMENT DE L'INFORMATION COURANTE

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'

ÉTUDE DE CAS - ENREGISTREMENT DE L'INFORMATION HISTORIQUE

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.

ÉTUDE DE CAS - PROJECTION

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

ÉTUDE DE CAS - JOINTURE

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

ÉTUDE DE CAS - AGRÉGATS

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

RÉSUMÉ

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 [email protected]

             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: [email protected].
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: [email protected]
        FAX:  (202)638-4922.

24.17 Partie 8 - SQL MULTIMEDIA ISO/ANSI (SQL/MM)

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 :


Page suivante Page précédente Table des matières