SQL Structured Query Language Langage de définition des données INT Management 148
Plan du document Introduction slide 150 Définition des données slide 152 Contraintes d intégrité slide 159 149
Présentation de SQL Introduction Fonctionnalités : définition et manipulation de données au format relationnel contrôle des données Le langage de manipulation non procédural emprunté à l'algèbre relationnelle et au calcul relationnel de tuples 150
Présentation de SQL (2) Introduction Origine langage SEQUEL du prototype de SGBD relationnel SYSTEM/R (74-76) laboratoire de recherche IBM à San José Normalisation ISO norme SQL1 (1986, 1989) norme SQL2 (1992) nouvelle norme en préparation SQL3 Langage de requêtes des SGBD relationnels ORACLE (Oracle Corporation - 1977) INGRES (Ingres Technology - 1980) DB2 (IBM - 1984) INFORMIX (Informix Inc - 1981) SYBASE (Sybase Inc - 1984) MySQL (1995) 151
Définition des données Définition des données définition des schémas des relations définition de vues relationnelles définition de contraintes d'intégrité définition de droits validation d'un traitement définition du placement et des index (non normalisé => SGBD dépendant!!) 152
LDD SQL vs. Modèle relationnel Domaines limités Clé facultative : Doublons Opérateur de projection différent ( DISTINCT) Relation n est plus un ensemble 153
Domaines de base Définition des données Numériques : Entier : INTEGER, SMALLINT Décimal : DECIMAL (m,n), NUMBER(m,n) Réel flottant : FLOAT, REAL Chaîne de caractères : CHAR (n), VARCHAR(n) Temporel : DATE (dans la norme SQL2!) chaque SGBD possède d'autres domaines qui lui sont propres Valeur NULL : absence de valeur 154
Schéma d une relation Définition des données Création CREATE TABLE Vins ( num Integer, cru Char(20), annee Integer) Mise à jour Ajout d'un attribut (norme SQL2!) ALTER TABLE Vins ADD COLUMN degre Integer Suppression (norme SQL2!) DROP TABLE Vins 155
BD Exemple: les vins BD Exemple Vins(num, cru, annee, degre) Recoltes(nvin, nprod, quantite) Producteurs(num, nom, prenom, region) Buveurs(num, nom, prenom, ville) Commandes(ncde, date, nb, nvin, qte) Livraisons(ncde, no_ordre, qtelivree) V R P B C L 156
Modèle E/A de la BD des vins BD Exemple num cru degré annee Vins 0,n 0,n Buveurs num nom prenom ville 0,n recoltes quantite concerne Passer 0,n Producteurs num nom prenom region 1,1 1,1 Commandes ncde qté date 0,n Donner_lieu (1,1) Livraisons No_ordre qtelivrée date 157
Exemple en SQL CREATE TABLE VINS ( num integer, cru char (40), annee integer, degre float) CREATE TABLE PRODUCTEURS ( num integer, nom char(40), prenom char(40), region char(40)) CREATE TABLE RECOLTES( nprod integer, nvin integer, quantite integer) 158
Contraintes d intégrité Règles de gestion des données Etat cohérent de la base Vérifiées en permanence 159
Exemples de contraintes d intégrité Schéma de la BD Vins Vins(num, cru, annee, degre) Producteurs(num, nom, prénom, region) Recoltes(nprod, nvin, quantité) Modèle relationnel : Unicité de la clé (num dans vins) CI référentielle (nvin vers num) Domaine : Année entre 1970 et 2000 Région : Bourgogne, Beaujolais, Non nullité : Nom de cru de vin obligatoire Comportementale: Le degré d un vin est supérieur à 7 Le degré d un vin augmente 160
Les CIs dans les SGBD Quand les déclarer? À la création du schéma de BD Au cours de la vie de la BD Comment les exprimer? SQL Extensions de SQL Qu offrent les SGBD? Peu de CIs en général Autres CIs vérifiées par programme 161
Les CIs dans les SGBD (2) Normes : SQL 86 : unicité, non nullité, vue avec «check option» SQL89 : domaine, clé, intégrité référentielle avec «rejet» SQL2 (SQL92) : intégrité référentielle avec «cascade delete et update» Définition d une CI 2 possibilités: À chaque définition d attribut À la fin de la définition d une relation 162
Exemple CREATE TABLE VINS ( num integer PRIMARY KEY, cru char (40) NOT NULL, annee integer CONSTRAINT Cannee CHECK (annee between 1970 and 2000), degre float CONSTRAINT Cdegre CHECK (degre between 9.0 and 15.0)) CREATE TABLE PRODUCTEURS ( num integer, nom char(40), prenom char(40), region char(40) PRIMARY KEY(num)) ALTER TABLE PRODUCTEURS add CONSTRAINT Cregion CHECK (region in ('Bourgogne', 'Beaujolais', 'Alsace', 'Jura', 'Corse')) CREATE TABLE RECOLTES( nprod integer, nvin integer, quantite integer) ALTER TABLE RECOLTES add primary key (nprod, nvin) ALTER TABLE RECOLTES add constraint refvin foreign key (nvin) references VINS(num) on delete cascade ALTER TABLE RECOLTES add constraint refrep foreign key (nprod) references PRODUCTEURS(num) on delete cascade 163
Problèmes liés aux CIs Cohérence Pas de règles contradictoires Redondance Age > 18 et âge > 21 Optimisation Nombre minimal de données mises à jour en jeu pour la vérification Vérification sur certains types de màj uniquement 164