VII.1 LE LANGAGE SQL2 1. INTRODUCTION Les serveurs de données relationnels prés

VII.1 LE LANGAGE SQL2 1. INTRODUCTION Les serveurs de données relationnels présentent aujourd’hui une interface externe sous forme d’un langage de recherche et mise à jour, permettant de spécifier les ensembles de données à sélectionner ou à mettre à jour à partir de propriétés des valeurs, sans dire comment retrouver les données. Ainsi, les opérations directement utilisables par les usagers sont en général celles des langages dits assertionnels. Plusieurs langages assertionnels permettant de manipuler des bases de données relationnelles ont été proposés, en particulier QUEL [Zook77], QBE [Zloof77] et SQL [IBM82, IBM87]. Aujourd’hui, le langage SQL est normalisé [ISO89, ISO92] et constitue le standard d’accès aux bases de données relationnelles. Les autres interfaces par menus, fenêtres, grilles, etc., ou de programmation type langage de 3e ou 4e génération, sont le plus souvent offertes au-dessus du langage SQL. Celui-ci constitue donc le point d’entrée obligatoire des SGBD relationnels. QUEL était le langage proposé par l’université de Berkeley pour son système INGRES : il est aujourd’hui peu utilisé dans l’industrie. QBE est un langage par grille dérivé de la logique qui est souvent offert au-dessus de SQL. De manière générale, SQL comme les autres langages qui ont été proposés (e.g., QUEL) utilisent tous des critères de recherche (encore appelés qualifications) construits à partir de la logique des prédicats du premier ordre. Ils comportent quatre opérations de base : • la recherche (mot clé SELECT en SQL, RETRIEVE en QUEL) permet de retrouver des tuples ou parties de tuples vérifiant la qualification citée en arguments ; • l’insertion (mot clé INSERT en SQL, APPEND en QUEL) permet d’ajouter des tuples dans une relation ; les tuples peuvent être fournis par l’utilisateur ou construits à partir de données existant déjà dans la base ; • la suppression (mot clé DELETE en SQL, SUPPRESS en QUEL) permet de supprimer d’une relation les tuples vérifiant la qualification citée en argument ; VII.2 • la modification (mot clé UPDATE en SQL, REPLACE en QUEL) permet de mettre à jour les tuples vérifiant la qualification citée en argument à l’aide de nouvelles valeurs d’attributs ou de résultats d’opérations arithmétiques appliquées aux anciennes valeurs. Le langage assertionnel SQL fut introduit commercialement tout d’abord par IBM [IBM82]. Il résultait alors d’une évolution du langage SEQUEL 2 [Chamberlin76] initialement développé au centre de recherches de San-José comme un langage expérimental appelé SQUARE [Boyce75] pour paraphraser en anglais les expressions de l’algèbre relationnelle. Aujourd’hui, l’ISO a normalisé le langage SQL pour manipuler les bases de données relationnelles et ceci à plusieurs niveaux. Le niveau SQL1 [ISO89] correspond à la norme de base acceptée en 1989, telle qu’elle est aujourd’hui appliquée par la plupart des constructeurs. SQL1 permet l’expression des requêtes composées d’opérations de l’algèbre relationnelle et d’agrégats. En plus des fonctionnalités de définition, de recherche et de mise à jour, SQL1 comporte aussi des fonctions de contrôle qui n’appartiennent pas à proprement parler au modèle relationnel, mais qui sont nécessaires pour programmer des applications transactionnelles. Le niveau SQL2 [ISO92] est sous-divisé en trois niveaux, respectivement entrée, intermédiaire et complet. Le niveau entrée peut être perçu comme une amélioration de SQL1, alors que les niveaux intermédiaire et complet permettent de supporter totalement le modèle relationnel avec des domaines variés, tels date et temps. SQL3 est constitué d’un ensemble de propositions nouvelles traitant plus particulièrement des fonctionnalités objets et déductives. Ce chapitre est organisé comme suit. Les quatre sections qui suivent sont consacrées à l’étude du standard SQL1. Nous étudions successivement la définition de schéma, la recherche de données, l’expression des mises à jour et l’intégration aux langages de programmation pour écrire des transactions. La section qui suit présente les fonctionnalités du nouveau standard SQL2. En conclusion, nous résumons brièvement les propositions émises dans le cadre SQL3 et nous soulignons l’importance de SQL. Nous utilisons des notations syntaxiques en BNF (Backus-Naur Form), avec les extensions suivantes : • les crochets ([]) indiquent des éléments optionnels ; • les pointillés suivent un élément qui peut être répété plusieurs fois ; • les accolades groupent comme un seul élément une séquence d’éléments ; • un exposant plus (+) indique que l’élément qui précède peut être répété n fois (n>0), chaque occurrence étant séparée de la précédente par une virgule ; • un exposant multiplié (*) indique que l’élément qui précède peut être répété n fois (n0), chaque occurrence étant séparée de la précédente par une virgule. 2. SQL1 : LA DEFINITION DE SCHEMAS SQL1 permet de définir des schémas de bases de données composés de tables et de vues. Un schéma est simplement identifié par un identifiant autorisant l’accès à la base. Au niveau d’un VII.3 schéma sont associés des autorisations d’accès aux tables. Au niveau de la table, des contraintes d’intégrité peuvent être définies. 2.1 Création de tables SQL1 permet de créer des relations sous forme de tables et de définir lors de la création des contraintes d’intégrité variés sur les attributs. Ainsi, une commande de création permet de spécifier le nom de la table et de définir les éléments de table correspondant aux colonnes ou aux contraintes, selon la syntaxe suivante : CREATE TABLE <NOM DE TABLE> (<ELEMENT DE TABLE>+) Un nom de table peut être un nom simple (par exemple VINS) ou un nom composé d’un nom de schéma (identifiant d’autorisation d’accès à la base, par exemple DEGUSTATION) suivi par le nom simple de table en notation pointée (par exemple, DEGUSTATION.VINS). Un élément de table est soit une définition de colonne, soit une définition de contrainte, comme suit : <ELEMENT DE TABLE> ::= <DEFINITION DE COLONNE> | <CONTRAINTE DE TABLE> Une colonne est définie par un nom et un type de données. Une valeur par défaut peut être précisée. Une contrainte de colonne peut aussi être définie à ce niveau. On obtient donc la syntaxe suivante : <DEFINITION DE COLONNE> : := <NOM DE COLONNE> <TYPE DE DONNEES> [<CLAUSE DEFAUT>] [<CONTRAINTE DE COLONNE>] Les types de données supportés sont les chaînes de caractères de longueurs fixes — CHAR(<longueur>) —, la valeur par défaut de la longueur étant 1, les numériques exactes — NUMERIC et DECIMAL avec précision et échelle optionnelles, INTEGER et SMALLINT ——, les numériques approchés — FLOAT avec précision optionnelle, REAL et DOUBLE PRECISION. La clause défaut permet simplement de spécifier une valeur par défaut selon la syntaxe DEFAULT <valeur>, la valeur NULL étant permise. Nous examinerons les contraintes d’intégrité de table et de colonne dans la section qui suit. Afin d’illustrer les possibilité introduites, la figure VII.1 présente les commandes permettant de créer la base dégustation, pour l’instant sans contrainte d’intégrité. Le schéma de la base obtenu est composé des trois relations suivantes : VINS (NV, CRU, MILLESIME, DEGRE, QUALITE) BUVEURS (NB, NOM, ADRESSE, TYPE) ABUS (NB, NV, DATE, QUANTITE). VII.4 CREATE SCHEMA AUTHORIZATION DEGUSTATION CREATE TABLE VINS (NV INT, CRU CHAR(12), MILLESIME INT, DEGRE DEC(3,1), QUALITE CHAR) CREATE TABLE BUVEURS (NB INT, NOM CHAR(20), ADRESSE CHAR(30), TYPE CHAR(4)) CREATE TABLE ABUS(NB INT, NV INT, DATE DEC(6), QUANTITE SMALLINT) Figure VII.1 — Création de la base Dégustation 2.2 Expression des contraintes d’intégrité Les contraintes de colonnes permettent de spécifier différentes contraintes d’intégrité portant sur un seul attribut, y compris les contraintes référentielles. Les différentes variantes possibles sont :  valeur nulle impossible (syntaxe NOT NULL),  unicité de l’attribut (syntaxe UNIQUE ou PRIMARY KEY),  contrainte référentielle — syntaxe REFERENCES <table référencée> [(<colonne référencée>)] —, le nom de la colonne référencée étant optionnel s’il est identique à celui de la colonne référençante,  contrainte générale (syntaxe CHECK <condition>) ; la condition est une condition pouvant spécifier des plages ou des listes de valeurs possibles (voir condition de recherche ci-dessous). Les contraintes de relations peuvent porter sur plusieurs attributs. Ce peut être des contraintes d’unicité, référentielles ou générales. Elles sont exprimées à l’aide des phrases suivantes :  contrainte d’unicité UNIQUE <attribut>+,  contrainte référentielle, permettant de spécifier quelles colonnes référencent celles d’une autre table, [FOREIGN KEY (<colonne référençante>+)] REFERENCES <table référencée> [(<colonne référencée>+)],  contrainte générale CHECK <condition>. Par exemple, la création de la relation ABUS avec contraintes d’intégrité pourra être effectuée par la commande de la figure VII.2. Cette commande précise que les attributs NB et NV ne doivent pas être nuls et doivent exister dans les relations BUVEURS et VINS respectivement, que la date est comprise entre le premier janvier 80 et le 31 décembre 99, que la quantité doit être comprise entre 1 et 100 avec une valeur par défaut de 1. VII.5 CREATE TABLE ABUS ( NB INT NOT NULL, NV INT NOT NULL REFERENCES VINS(NV), DATE DEC(6) CHECK (DATE BETWEEN 010180 AND 311299), QUANTITE SMALLINT DEFAULT 1, PRIMARY KEY(NB, NV, DATE), FOREIGN KEY NB REFERENCES BUVEURS, CHECK (QUANTITE BETWEEN 1 AND 100) ) Figure VII.2 — Création de la table ABUS avec contraintes d’intégrité 2.3 Définition des vues SQL1 permet de définir des vues au niveau du schéma. Rappelons qu’une vue est une table virtuelle calculée à partir des tables de base par une question. La syntaxe de la commande de création de vues est uploads/Voyage/ 7-sql2.pdf

  • 84
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Mar 04, 2022
  • Catégorie Travel / Voayage
  • Langue French
  • Taille du fichier 0.5927MB