bases de données et sgbd relationnels
DESCRIPTION
Bases de données et SGBD relationnels. Bases de données et SGBD relationnels (1). Une base de données représente un ensemble de données d’entreprise , mémorisé par un ordinateur, organisé selon un modèle de données accessible à de nombreuses personnes. - PowerPoint PPT PresentationTRANSCRIPT
Bases de données et
SGBD relationnels
Bases de données et SGBD relationnels (1)
Une base de données représente un ensemble de données d’entreprise, mémorisé par un ordinateur, organisé selon un modèle de données accessible à de nombreuses personnes.
Un Système de Gestion de Bases de Données (SGBD) représente un ensemble coordonné de logiciels permettant de décrire, mémoriser, manipuler, traiter,
interroger les ensembles de données constituant la base.
2
Bases de données et SGBD relationnels (2)
Un SGBD doit satisfaire 5 conditions : être une bonne représentation du monde réel,
fiable et à jour : des contraintes d’intégrité doivent assurer un état cohérent de la base.
assurer la non-redondance de l’information : une information doit être implantée une et une seule fois.
maintenir l’indépendance des programmes par rapport aux données, permettant aux applications de partager les mêmes données.
3
Bases de données et SGBD relationnels (3)
assurer la sécurité et la confidentialité des données : les données doivent être protégées contre les accès non autorisés et contre les pannes intempestives.
autoriser le partage des données, permettant à plusieurs utilisateurs de modifier des données quasiment en même temps tout en assurant un résultat cohérent pour un utilisateur consultant la base.
4
Historique des SGBD (1)
Première génération (années 70) : modèle hiérarchique ou modèle en réseau.
Modèle hiérarchique : les données sont représentées sous forme d’une hiérarchie arborescente à plusieurs niveaux. Chaque niveau est constitué d’un ou de plusieurs groupes de données pouvant se décomposer à leur tour.
Modèle en réseau : extension du précédent, où les liens entre objets peuvent exister sans restrictions, indépendamment de la structure de l’arbre.
5
Historique des SGBD (2)
Deuxième génération (années 80) : modèle relationnel. Les données sont représentées sous forme
tabulaire, avec indépendance totale entre les logiciels et le support de stockage.
Langages spécifiques permettant d’accéder aux données de manière assez naturelle : QBE, SQL.
Quelques SGBD relationnels : ORACLE, INGRES, SYBASE, DBASE2, ACCESS, mySQL.
Troisième génération (fin des années 90) : modèle objets. SGBD objets : O2, ORACLE.
6
Objectifs d’un modèle relationnel
Les principaux objectifs d’un modèle relationnel sont : utiliser des structures de données simples
une table relationnelle est un tableau proposer des langages permettant d’accéder aux
données de manière assez naturelle QBE, SQL
proposer l’indépendance entre les données et les traitements exécutés sur ces données
permettre à chaque utilisateur d’avoir une vue de la base de données appropriée à ses besoins.
7
Le modèle relationnel (1)
Le concept de base du modèle relationnel est la relation, de structure tabulaire
Une relation a plusieurs attributs Le degré de la relation est le nombre de ces
attributs Exemple : la relation PRODUIT, de degré 3,
comporte les attributs : num_produit, nom_produit et stock
num_produit nom_produit stockN101 table 25N201 chaise 120N251 fauteuil 36N541 lit 12… … …
8
Le modèle relationnel (3)
On représente symboliquement une relation R par un schéma SR de la forme : R(clé, attribut 2, attribut 3, …, attribut n).
On aura donc :PRODUIT(num_produit, nom_produit, stock).
9
Exemple de base de données relationnelle (1)
Relation VOL (numvol, depart, arrivee, numav, numpil, jdep, hdep, jarr, harr)
numvol : numéro du vol (clé) depart : ville de départarrivee : ville d’arrivée numav : numéro d’avionnumpil : numéro du pilote jdep : jour de départ (clé)hdep : heure de départ jarr : jour d’arrivéeharr : heure d’arrivée
NUMVOL DEPART ARRIVEE NUMAV NUMPIL JDEP HDEP JARR HARRV0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30V0002 Londres Moscou A0003 P0001 15/05/2004 10:30 15/05/2004 17:00V0003 Berlin Madrid A0002 P0003 15/05/2004 11:15 15/05/2004 18:00V0004 Londres Madrid A0004 P0006 16/05/2004 06:20 16/05/2004 09:30V0005 Bruxelles Rome A0006 P0005 16/05/2004 10:00 16/05/2004 15:10V0006 Berlin Amsterdam A0005 P0001 16/05/2004 14:30 16/05/2004 17:00V0007 Paris Bruxelles A0001 P0002 16/05/2004 18:00 16/05/2004 20:00V0008 New York Paris A0001 P0003 17/05/2004 03:00 17/05/2004 21:30V0009 Paris Bruxelles A0004 P0006 17/05/2004 06:00 17/05/2004 07:00V0010 Berlin Madrid A0002 P0004 17/05/2004 08:00 17/05/2004 11:00
10
Exemple de base de données relationnelle (2)
Relation PILOTE(numpilote, nom, prenom)
numpilote : numéro du pilote (clé)nom : nom du piloteprenom : prénom du pilote
Relation AVION(numavion, type, cap)
numavion : numéro de l’avion (clé)type : type de l’avioncap : capacité de l’avion
NUMPILOTE NOM PRENOMP0001 Dupuis AntoineP0002 Simon GeorgesP0003 François LucP0004 André GeorgesP0005 Arthur LouisP0006 Mathieu François
NUMAVION TYPE CAPA0001 Boeing 747 420A0002 Airbus 320 300A0003 Airbus 300 280A0004 Boeing 737 250A0005 DC 10 120A0006 Boeing 747 410
11
Exemple de base de données relationnelle (3)
Les liens entre ces relations sont appelés des jointures : l’attribut NUMAV de VOL représente le même type
d’information que l’attribut NUMAVION de AVION. On écrira :
VOL.NUMAV = AVION.NUMAVION l’attribut NUMPIL de VOL représente le même
type d’information que l’attribut NUMPILOTE de PILOTE. On écrira :
VOL.NUMPIL = PILOTE.NUMPILOTE
12
SQL Structured Query Language
IntroductionInterrogation simple
Création de tableManipulation des n-uplets
Introduction
Questions ?Qu’est ce que Structured Query Language ?
Comment l’utiliser ?
SQL
Définition Langage pour accéder aux données gérées par
les SGBD Peut être associé avec d’autres langages (c++,
java, PHP, …), Encapsulation de SQL dans un autre langage
Langage déclaratif (non procédural) dérivé du calcul relationnel
déclarer ce que l’on veut Langage standard Chaque implémentation de SQL a de légères
variantes
15
SQL
3 sous langages Langage de Manipulation de Données (LMD)
Permet d’insérer des n-uplets, de modifier leur valeur, de les supprimer
Permet d’interroger le SGBD : requêtes Langage de définition de données (LDD)
Permet de créer des tables de les modifier et les supprimer de les renommer
Langage de contrôle de données (LCD) Permet de gérer le contrôle d’accès aux données des
différents utilisateurs
16
SQL
Vue Permet de définir des représentations pour différents
utilisateurs Contrainte
Permet de définir des contraintes sur les valeurs des données
Indexation et regroupement (cluster) Permet d’utiliser des mécanisme pour accélérer l’accès aux
données Transaction
Permet de regrouper des commandes SQL Permet de définir des points de retour à des moments ou les
valeurs des données étaient cohérentes
17
Tables d’exemples
Table EMP La table des employés EMP qui a le schéma
suivant EMP (NUMERO, NOM, JOB, MRG, HIREDATE,
SALAIRE, COMM, DEPTNO) Table DEP
La table des départements DEPT qui a le schéma suivant
DEPT (DEPTNO, DNAME, LOC)
18
Table d’exemple : EMP
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 3000 10 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 - TURNER SALESMAN 7698 08-SEP-81 1500 30 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10
19
Table d’exemple : DEPT
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPÉRATIONS BOSTON
20
Requêtes simples
Select … from … where …
Manipulation de données
Recherche d’information : requête (Queries) SELECT colonnes FROM tables WHERE prédicats (condition de recherche)
Stockage de données INSERT INTO table [col1, col2, ..., coln] VALUES (value1, value2, ..., valuen)
22
La sélection de n-uplets
Permet de sélectionner certaines colonnes d'une table, ainsi que certaines lignes d'une table (les lignes étant sélectionnées en fonction de leur contenu).
Permet de combiner des informations venant de plusieurs tables.
23
Requête Syntaxe globale
select [distinct] { ' [nom table.]nom _col1 [,nom _col2 ...] } from ( nom table [, nom table2] } [where prédicat] [group by nom _col3 [, nom _col4] [having prédicat] ] [order by nom _col5 [desc] [,nom _col6 [desc] ...]
[ ] facultatif Traduction
Sélection des colonnes des tablesqui répondent à la conditionregroupé par groupesqui répondent à la condition sur les groupesordonné suivant les valeurs des colonnes
24
Sélection des colonnes (1)
L'ordre le plus simple a la syntaxe suivante : select * from nom_table.
Dans ce cas, toutes les lignes de la table sont sélectionnées.
Limitation de la sélection à certaines colonnes, en indiquant une liste de noms de colonnes à la place de
l'astérisque select col1 co12 ... from nom_table Dans ce cas, on parlera projection
exemple : sélectionner les noms des employés avec leur JOB associé. select ENAME JOB from EMP;
25
Sélection des colonnes (2)
La clause DISTINCT ajoutée derrière l'ordre SELECT permet d'éliminer les duplications si dans le résultat plusieurs n-uplets sont identiques, un seul sera conservé.
exemple : lister les jobs présents dans la table EMP. select DISTINCT JOB from EMP;
Remarque : le terme DISTINCT s'applique à toutes les
colonnes sélectionnées.
26
Sélection des lignes (1)
La clause WHERE permet de spécifier quelles sont les lignes à sélectionner.
Cette clause est suivie d'un prédicat qui sera évalué pour chaque ligne de la table.
Seules les lignes pour lesquelles le prédicat est vrai seront sélectionnées.
Dans ce cas, on parlera de restriction Syntaxe
select … from nom_table where prédicat
27
Sélection des lignes (2)
Un prédicat une expression logique ayant la valeur vrai ou
faux. L'expression logique peut contenir des
Opérateurs de comparaisons Opérateurs logiques AND, OR NOT BETWEEN LIKE IS NULL
28
Opérateurs de comparaisons
Opérateurs de comparaisons : =, !=, >, >=, <, <
Exercice sélectionner les employés dont la commission est
supérieure au salaire
29
Opérateurs logiques
Opérateurs logiques AND, OR
Les opérateurs AND et OR peuvent être utilisés pour combiner plusieurs prédicats.
Exercice sélectionner les employés du département 30 ayant un
salaire supérieur à 1500.
Remarque : L'opérateur AND est prioritaire par rapport à OR. Des parenthèses peuvent être utilisées
30
Opérateurs NOT, BETWEEN et IN
L'opérateur NOT placé devant un prédicat en inverse le sens.
Opérateur BETWEEN expr1 BETWEEN expr2 AND expr3 Ce prédicat est vrai si expr1 est compris entre
expr2 et expr3, bornes incluses. Opérateur IN :
expr1 IN ( expr2, expr3 ....) Ce prédicat est vrai si expr1 est égale à l'une des
expressions de la liste entre parenthèses.
31
Opérateurs LIKE et IS NULL
Opérateur LIKE expr LIKE chaîne où chaque chaîne est une chaîne de caractères
pouvant contenir l'un des caractères jokers "_" : remplace 1 caractère exactement. "%" : remplace une chaîne de caractères de longueur
quelconque, y compris de longueur nulle. Opérateur IS NULL
expr IS NULL Ce prédicat est vrai si l'expression à la valeur
NULL
32
Opérateurs
Exemple sélectionner les employés qui ont été embauchés
en 1981 syntaxe
select ENAME, HIREDATE from EMPwhrere HIREDATE like '%‑%‑81';
Exercice Sélectionner tous les employés qui ont une
commission ? Sélectionner les employés qui ont un salaire
inférieur à 1200 parmi les clerks et les salesmans.
33
Les expressions (1)
Une expression est soit une variable désignée par un nom de colonne, une constante.
Types des expressions numérique Caractère date
34
Les expressions (2)
Constante numérique : nombre contenant éventuellement un
signe, un point décimal et un exposant de puissance de dix.
Exemple : ‑10, 2.5, 1.2 E‑10 Constante alphanumérique :
elle se désigne par une chaîne de caractères entre apostrophes.
Exemple 'MARTIN'. Attention majuscule minuscule
‘MARTIN’ ≠ ‘martin’ ≠ ‘Martin’
35
Les expressions (3)
Constante date : elle se désigne par une chaîne de caractères au
format suivant jour‑mois‑année.
jour sur deux chiffres le mois est désigné par les trois premières lettres de son
nom en anglais l'année est sur deux chiffres
Exemple '1‑FEB 85‘ Le format est modifiable
36
Classement des n-uplets sélectionnés (1)
On peut, grâce au mot clé ORDER BY, imposer un ordre dans une requête.
Cet ordre peut porter sur une ou plusieurs colonnes. II peut être croissant ou décroissant. La clause ORDER BY devra être placée derrière la clause
FROM, et après la clause WHERE si elle existe. Syntaxe
select col1 , col2 ... from nom table where prédicat order by col1 [DESC], col2 [DESC] ...
Le tri se fait d'abord selon la première colonne spécifiée dans l'ORDER BY, puis les n-uplets ayant la même valeur dans la première colonne
sont triés selon la deuxième colonne de l'ORDER BY, ....
37
Classement des n-uplets sélectionnés (2)
Exercices sélectionner par ordre croissant tous les employés
qui ont été embauché entre le 1ier Décembre 1980 et le 31 Mars 1981.
sélectionner les employés triés par job, et pour chaque job triés par salaire décroissant.
38
La Jointure
La jointure permet d'obtenir des informations venant de plusieurs tables dans un même n-uplet résultat.
Il existe plusieurs type de jointures l'équi‑jointure La jointure externe La jointure d'une table à elle‑même
39
Equi‑jointure (1)
Une jointure se formule en spécifiant plusieurs tables dans la clause FROM du SELECT. Syntaxe
select ... from nom_table1, nom_table2 ...Where …
Si aucune condition de sélection WHERE, résultat est le produit cartésien des deux tables,
Dans notre exemple, EMP et DEPT peuvent être "reliées" par l'attribut DEPTNO. C'est en utilisant cet attribut que l'on pourra effectuer une
jointure.
40
Equi‑jointure (2)
Si l'attribut, qui désigne le numéro de département, a le même nom dans les deux tables, il ait nécessaire de préfixer l'attribut DEPTNO par
le nom de la table dans le critère de jointure. dept.deptno et emp.deptno Par contre, le nom des attributs ENAME et LOC
n'ont pas besoin d'être préfixés puisqu'il n'y a pas d'ambiguïté sur la table à laquelle ces attributs appartiennent.
41
Equi‑jointure (3)nom Dernierlivre
Dupond Robinson
Jospin Faust
Martin Misère
nom prénom adresse téléphone
Martin Pierre 7 allée des vers 0258941236
Dupond Jean 32 allé Poivrot 0526389152
Personnes
SELECT Personnes.prénom, dernierlivreFROM Personnes, BibliothèqueWHERE Personnes.nom = Bibliothèque.nom
On joint les deux tables, grâce à la colonne nom.
Et on combine cette jointure à une projection sur les attributs nom et dernierlivre.
Attention à lever toute ambi-guïté sur les noms d’attribut dans le cas où deux tables possèdent des colonnes de même nom.
Bibliothèque
prénom Dernierlivre
Jean Robinson
Pierre Misère
42
Equi‑jointure (4)
Les requêtes utilisant très souvent les jointures, il a été créé des syntaxes plus rapide
si les attributs ont le même nom. Syntaxe
SELECT Personnes.nom, nblivresFROM Personnes INNER JOIN BibliothèqueUSING (nom)
ce qui signifie que les deux relations Personnes et Bibliothèque sont concaténées (INNER JOIN) en utilisant (USING) l’attribut nom.
43
Equi‑jointure (5)
Si les attributs servant pour la jointure ne portent pas le même nom, il faut utiliser la syntaxe ON.
Ainsi la jointure précédente peut s’écrire aussi : SELECT Personnes.nom, nblivres FROM Personnes INNER JOIN Bibliothèque ON Personnes.nom = Bibliothèque. emprunteur
Remarque La méthode INNER JOIN n’inclus les enregistrements de la
première table que s’ils ont une correspondance dans la seconde table.
Nom Prénom
Martin Jean
Tartan Pion
Dupond Jacques
Personnes
Emprunteur Nblivres
Martine 5
Tartan 10
Dupond 3
Bibliothèque
Nom Nblivres
Tartan 10
Dupond 3
Résultat de la jointure
44
Equi‑jointure (6) Exercice
obtenir la liste des employés avec la localité dans laquelle ils travaillent
synonyme On peut associer un synonyme à un nom de table, il pourra alors être utilisé en préfixant les noms
d'attributs. Par contre, l'ancien nom de la table ne pourra plus
être utilisé lors du SELECT. Syntaxe
Select EMPNO, DEPTNO from EMP e // e est l’alias de EMPwhere e.DEPTNO = 20;
45
La jointure externe (1)
Lorsqu'un n-uplet d'une table figurant dans une jointure n'a pas de correspondant dans les autres tables, elle ne satisfait pas le critère d'équi‑jointure et donc ne figure pas dans le résultat de la jointure.
Pour obtenir ces n-uplets, il faut accoler (+) au nom de la colonne de la table dans laquelle manquent des éléments, dans la condition d'équi‑jointure.
Exempleselect ENAME, LOC from EMP, DEPT where EMP.DEPTNO(+) = DEPT.DEPTNO;
Exercice sélectionner les départements n'ayant pas d'employés
46
La jointure externe (2) Le (+) n’existe pas en MySQL Pour remédier aux limites de INNER JOIN, il existe la syntaxe LEFT
JOIN qui inclus tous les enregistrements de la première table même s’ils n’ont pas de correspondance dans la seconde table. Dans ce cas précis, l’attribut non renseigné prendra la valeur NULL.
La jointure devient : SELECT Personnes.nom, nblivres
FROM Personnes LEFT JOIN BibliothèqueON Personnes.nom = Bibliothèque.nom
RIGHT JOIN est l’opération symétrique
Nom Prénom
Martin Jean
Tartan Pion
Dupond Jacques
Personnes
Nom Nblivres
Martine 5
Tartan 10
Dupond 3
Bibliothèque Résultat de la jointure
Nom Nblivres
Martin NULL
Tartan 10
Dupond 3
47
Jointure d'une table à elle‑même
II peut être utile de rassembler des informations venant d'un n-uplet d'une table avec des informations venant d'un autre n-uplet de la même table. Utilisation des synonymes obligatoire
48
Jointure d'une table à elle‑même (2)
Exemple Lister les employés en indiquant pour chacun le
nom de son manager Syntaxe
Select e.ENAME, m.ENAMEfrom EMP e, EMP mwhere e.MGR = m.EMPNO(+);
Exercice Sélectionner les employés gagnant plus que
JONES
49
Modification des données
Création, modification, suppression de données
Modification des données
Le LMD permet également de modifier les informations contenues dans la base.
II existe trois commandes pour effectuer des modifications UPDATE: modifie les valeurs d'une table INSERT : ajoute des n-uplets à une table DELETE : supprime des n-uplets à une table
51
Mise à jour ‑ UPDATE (1)
La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs
syntaxe update table
set col1 = nv_valeur, col2 = nv_valeur2 .... [where prédicat]
Les valeurs col1, col2 ... sont mises à jour dans tous les n-uplets satisfaisant au prédicats.
En l'absence de la clause WHERE, tous les n-uplets sont mis à jours.
52
Mise à jour ‑ UPDATE (2)
On peut faire référence aux anciennes valeurs des champs du n-uplets.
Exercice le salaire des analystes est augmenté de 10
53
Ajout de n-uplets ‑ INSERT (1)
La commande INSERT permet d'insérer un n-uplet dans une table en spécifiant les valeurs à insérer.
Syntaxe insert into table (col1, col2 ...)
values (valeur, valeur ....) La liste des noms de colonne est optionnelle.
Si elle est omise, la liste des colonnes sera par défaut la liste de l'ensemble des
colonnes de la table dans l'ordre de création de la table. Si une liste de colonne est spécifiée,
les colonnes ne figurant pas dans la liste auront la valeur NULL.
54
Ajout de n-uplets ‑ INSERT (2)
exemple, ajouter un nouvel employé insert into EMP
values (17657, 'WILSON', 'ANALYST', 7566. ‘10‑MAY‑85' ,3400, NULL, 20);
II est possible d'insérer dans une tables plusieurs n-uplets provenant d'une autre table. Syntaxe
insert into table (col1, col2 ...) select ....
55
Suppression de n-uplets
La commande DELETE permet de supprimer les n-uplets d'une table Syntaxe
delete from table [where prédicat];
En l'absence de la clause WHERE tous les n-uplets de la table sont supprimés.
Exemple : supprimer tous les employés du département 20 delete from EMP
where DEPTNO = 20 ;
56
Langage de définition de données
Création, modification, suppression de tables
Langage de définition de données (LDD)
Le LDD permet de créer, de modifier et de supprimer la description d'une table.
II existe 4 commandes pour effectuer des modifications CREATE TABLE: crée une table ALTER TABLE : modifie la structure d'une table DROP TABLE : supprime une table RENAME : renomme la table
58
création d'une table (1)
A la création, la table sera vide. Cependant, un certain espace lui sera alloué. Syntaxe
create table nom_table (col1 type1 [NOT NULL], col2 type2 [NOT NULL], ...)
L'option NOT NULL assure que le SGBD interdira lors d'un INSERT ou d'un UPDATE
que cette colonne contienne la valeur NULL. Par défaut, la valeur NULL est autorisée.
Les principaux types des éléments sont : Char (n)
n caractères maximum (n <= 255) Number (d)
nombre à d chiffres maximum (38 chiffres significatifs) Number (d,p)
nombre à d chiffres maximum dont p après le point décimal Date
élément de type DATE.
59
création d'une table (2)
Exemple Création de la table EMP on écrira
create table EMP (EMPNO number(4) not null,ENAME char(10),JOB char(9),MGR number(4),HIREDATE date,SAL number(7,2),COMM number(7,2),DEPTNO number(2) not null );
Exercice Créer une table BONUS, en y insérant les noms et les
salaires des MANAGERS.
60
Modification d'une table (1)
II est possible de modifier la définition d'une table, soit ajouter une colonne. soit modifier une colonne existante. II n'est pas possible de supprimer une colonne
Ajout d'une colonne : ADD Syntaxe
alter table nom_tableadd col1 type1, col2 type2, ....)
Les valeurs de cette colonne seront alors toutes égales à NULL.
61
Modification d'une table (2)
Modification d'une colonne ‑ MODIFY II est possible de modifier la définition d'une
colonne, à condition que la nouvelle définition soit compatible avec le contenu de la colonne :
il est possible d'augmenter la taille maximale de la colonne,
il est possible de spécifies NOT NUL si la colonne né contient aucune valeur NULL...
Syntaxe alter table nom_table
modify (col1 nv_type1, col2 nv_type2, ....)
62
Suppression d'une table
II est possible de supprimer une table les n-uplets et la définition de la table sont
détruites. Syntaxe
drop table nom_table
63
Renommer une table
II est possible de renommer une table Syntaxe
rename table ancien_nom_table to nouveau_nom_table
64