Académique Documents
Professionnel Documents
Culture Documents
AVANCÉES
PLAN DES COURS
Rappel: Fondements des bases de données PL/SQL: éléments de base du langage
Le langage SQL Curseurs
Création de table Déclencheurs (triggers)
Requêtes simples Exceptions
Requêtes sur plusieurs tables Évaluation et optimisation des requêtes
Mises-à-jour Concurrence d'accès et reprise
SQL avancé
Le contrôle d’accès
Les vues SQL
Extensions de la structure des requêtes
SFW
Les requêtes récursives
Les prédicats
Les procédures SQL
2
Le catalogue
PL/SQL
SOURCES DU COURS
3
LES SGBDS
BASE DE DONNÉES
(4) : Confidentialité
(5) : Performance
5
SGBD
Un SGBD (Système de Gestion de Bases de Données) est un
logiciel qui permet de manipuler les informations stockées
dans une BD.
BD
SGBD
6
SGBD
Un SGBD est un intermédiaire entre les utilisateurs et les fichiers
physiques
Plus besoin de travailler directement sur les fichiers physiques (tels qu’ils
sont enregistrés sur disque).
BD =Fichiers BD =tables
….
7
SGBD
Un SGBD permet de décrire les données et les liens entre elles
d’une façon logique sans se soucier d u comment cela va se faire
physiquement dans les fichiers.
On parle alors d’image logique de la base de données, (ou aussi description
logique ou conceptuelle ou encore de schéma logique).
Image
physique
Fichiers physiques
Image logique
8
OBJECTIFS D’UN SGBD
Description des données
Codification et structuration, grâce au Langage de Description
de Données (LDD)
Manipulation des données
Insertion, mise à jour et interrogation
Mise en œuvre à l ’aide d’un Langage de Manipulation de Données
(LMD)
S.Q.L (Structured Query Language) : Langage standard
Confidentialité
contrôle des droits d'accès, autorisation
Partage
Une BD est partagée entre plusieurs utilisateurs en même temps
⇒ contrôle des accès concurrents (notion de transaction)
L'exécution d'une transaction doit préserver la cohérence de la BD9
Sécurité
Reprise après panne, journalisation
OBJECTIFS D’UN SGBD
Efficacité d’accès aux données
Optimisation : temps de réponse, débit, ...
Optimisation des opérations d’E/S
Indépendance physique
Pouvoir modifier les structures de stockage ou les index sans que cela
ait de répercussion au niveau des applications
Les disques, les méthodes d’accès, les modes de placement, le codage
des données ne sont pas apparents
Indépendance logique
Permettre aux différentes applications d’avoir des vues différentes
des mêmes données
Permettre au DBA de modifier le schéma logique sans que cela ait de
répercussion au niveau des applications
10
TYPES DE SGBD
L'organisation des données au sein d'une BD a une
importance essentielle pour faciliter l'accès et la mise à
jour des données
Il existe plusieurs types de SGBDs par modèle de données :
Modèle hiérarchique
Modèle réseau
Modèle relationnel
Modèle objet
11
TYPES DE SGBD
Modèle hiérarchique
Schéma logique représenté par un ARBRE
Nœud : segment (regroupement de données)
Arc : lien hiérarchique 1:N
Exemple
12
TYPES DE SGBD
Modèle réseau
Schéma logique représenté par un GRAPHE
N œ u d : article (représente une entité)
Arc : lien hiérarchique 1:N
13
TYPES DE SGBD
Modèle relationnel
Schéma logique représenté par des RELATIONS
attributs de l'association)
BREF HISTORIQUE DES PRINCIPAUX SGBDS
manipulation.
2ème génération 1965 - 70
SGBD navigationnel
Critères de choix :
Support technique
16
Type d’accès aux données (OLTP,décisionnel…)
QUELQUES SGBD DU MARCHÉ
17
LES SGBDR DU MARCHÉ
20
FOURNISSEURS DE SGBDS
Oracle
Puissant
Portabilité
Procédures stockées en PL/SQL
Accès aux données systèmes via des vues
Gestion de très grande quantité de données
Services Web, Support XML…
Inconvénients:
Prix exorbitant
Forte demande de ressources
21
SGBDS OPEN SOURCE
o MySQL
Solution très courante en hébergement public
Très bonne intégration dans l'environnementApache/PHP
OpenSource, bien que les critères de licence soient de plus en plus difficiles à supporter
Facilité de déploiement et de prise en main
Inconvénients:
o Ne supporte qu'une faible partie des standards SQL
o Manque de robustesse avec de fortes volumétries
o Pas d'héritage de table
o Pas de vue matérialisée
o PostgresSQL
Fiable et relativement performant
Simple d’utilisation et d’administration
Inconvénients:
o Sauvegarde peu évolué
o Pas de notion de rôles
o Pas de services web, XML… 30
LES BASES DE DONNÉES RELATIONNELLES
DÉMARCHES DE CONSTRUCTION D’UNE BD
Modèle Entité/Association
Déterminer les entités, les associations et les propriétés
Une entité est un élément ou un objet concret ou abstrait d u monde réel
qui existe.
Une association modélise un ensemble de liens logiques entre deux ou
plusieurs occurrences d’entités, ayant intérêt significatif pour le système à
représenter.
Une propriété est une donnée élémentaire qu’on perçoit sur une
entité et sur une association
Calculer les cardinalités
Une cardinalité caractérise la participation d’une entité à une
association. Elle représente le nombre d’occurrences d’une association
pour chaque occurrence d’entité qu’elle relie.
Exemple :
Enseignant Cours
Enseigner 32
nom 0,n 1,n Numéro cours
Titre cours
Prénom
Age
DÉMARCHES DE CONSTRUCTION D’UN BD
Modélisation E/A
Interview
Document… Modélisation E/A
Schéma logique
en E/A
Transformation en
relationnel
33
DÉMARCHES DE CONSTRUCTION D’UN BD
34
BD : CONCEPTS DE BASE
Colonne ouAttribut
Table ou relation
Ligne,
enregistrement
ou tuple
Etudiant CIN Nom Prénom Ville
40013 Salah Atigue Tunis
40302 Ali Toto Sfax
41200 Amina Titi Sousse
Domaine
Les valeurs que peut prendre un attribut est appelé le domaine de cet attribut
Relation
Un sous-ensemble d u produit cartésien d'une liste de domaines
caractérisé par un nom unique
représentée sous forme de table à deux dimensions
Attribut
Une colonne dans une relation caractérisé par un nom et dont les
valeurs appartiennent à un domaine
Tuple 35
Une ligne d'une relation correspondant à un enregistrement
Les nuplets d'une relation sont tous différents
LE LANGAGE SQL
HISTORIQUE
1964 : IBM développe le GUAM pour le projet Apollo (NASA)
1966 : Première BD hiérarchique commerciale d u marché d’IBM
1992 : SQL-2
Exemple :
CREATE TABLE Eleves (Nom CHAR(15) PRIMARY KEY,
Prenom VARCHAR(25) NOT NULL);
31
SQL - DML
Exemple :
SELECT DISTINCT Nom, Prenom
40
etc...
CREATION D'UNE TABLE
34
1. TABLES, COLONNES ET DOMAINES
DÉFINITION DE DONNÉES
35
1. TABLES, COLONNES ET DOMAINES
CRÉATION DE TABLE
OU
Légende :
[option]
mot en capitale : mot clé 44
1. TABLES, COLONNES ET DOMAINES
CRÉATION DE TABLE
o Deux types CREATE TABLE :
37
1. TABLES, COLONNES ET DOMAINES
LES TYPES DE BASE
Pour décrire les colonnes d’une table, Oracle fournit les types
prédéfinis suivants:
38
1. TABLES, COLONNES ET DOMAINES
LES TYPES DE BASE
39
1. TABLES, COLONNES ET DOMAINES
RÈGLES DE CRÉATION
40
1. TABLES, COLONNES ET DOMAINES
LES DOMAINES
Contraintes de colonne
Contraintes de table
Définies après la création de toutes les colonnes
43
2. LES CONTRAINTES D’INTÉGRITÉ
44
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : VALEUR PAR DÉFAUT
DEFAULT
➢Affecte une valeur par défaut à une colonne si on ne spécifie pas de valeur lors
de la création d'une ligne
NOT NULL
➢ Obligation de donner une valeur à cette colonne
46
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES: UNIQUE
UNIQUE
➢ Interdit deux même valeurs pour une colonne (ou un ensemble de
colonnes)
prénom VARCHAR(30) , …
CONSTRAINT UNIQUE (nom, prénom) )
47
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES
CHECK (condition)
➢ S’applique à toutes les lignes de la table
Expression conditionnelle valide évaluant un résultat booléen
salaire NUMERIC ,
commission NUMERIC,
CONSTRAINT checkSalaire 56
PRIMARY KEY
➢ Contrainte de colonne
[CONSTRAINT <nom_contrainte>] PRIMARY KEY
57
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT PRIMAIRE (2)
➢ Contrainte de table
[CONSTRAINT <nom_contrainte>] PRIMARY KEY (<nom_colonne>)
NOT NULL +UNIQUE
Clé primaire d’une table
peut concerner plusieurs colonnes
peut être référencée par une clé étrangère
Il est obligatoire de déclarer une et une seule contrainte PRIMARY KEY
sur chaque table
CREATE TABLE CLIENT ( NCLI char(10) not null,
CLIENT
N OM char(32) not null, NCLI
ADRESSE char(60) not null, NOM
ADRESSE
LOCALITE char(30) not null, LOCALITE
CAT[0-1]
CAT char(2), COMPTE
COMPTE decimal(9,2) not null, id: NCLI
Candidate key
CLIENT
NCLI
NOM
ADRESSE
LOCALITE
CAT[0-1]
COMPTE
id: NCLI
id': NOM
)
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT SECONDAIRE (2)
o Contrainte de table
[CONSTRAINT <nom_contrainte>] FOREIGN KEY <nom_colonne>
REFRENCES <nom_table>(<nom_colonne>)
•Relation de clé étrangère avec une ou plusieurs colonnes déclarées comme
clés primaires ou UNIQUE
Conventions recommandées :
Il n’est pas recommandé de définir des contraintes sans les
nommer (bien que cela soit possible),
Si une contrainte n’est pas nommée, un nom est
automatiquement généré sous la forme suivante :
SYS_Cnnnnnn (n entier).
Préfixer par pk_le nom d’une contrainte clé primaire, fk_
une clé étrangère, ck_ une vérification , un_ une unicité.
Pour une contrainte clé primaire, suffixer du nom de la
table la contrainte (exemple pk_Pilote).
Pour une contrainte clé étrangère, renseignez (ou abrégez)
les noms de la table source, de la clé, et de la table cible.
55
2. LES CONTRAINTES D’INTÉGRITÉ
RESTRICT interdit la destru ction d’u n objet référencé (via une contrainte
d’intégrité, une vue,…) alors que CASCADE propage la destruction.
57
3. MODIFICATION & SUPPRESSION D'UNE TABLE : ALTER TABLE
58
EXEMPLES
60
SELECT
SELECT nomStation
FROM Station
WHERE region = ’Antilles’
Exemple:
Résultat:
SELECT
SELECT élémentaire
SELECT liste_colonnes FROM liste_tables
◼ Les expressions arithmétiques
◼ Les alias
◼ DISTINCT
Exemple:
SELECT élémentaire
SELECT liste_colonnes FROM liste_tables
◼ Les expressions arithmétiques
◼ Les alias
◼ DISTINCT
Exemple: Résultat :
SELECT libelle
FROM Activite
La condition BETWEEN
Permet d'afficher les lignes en fonction d'une plage de valeurs
select NCLI
from CLIENT
where COMPTE between 1000 and 4000;
Conditions plus complexes - in et between (2/2)
La condition IN
Vérifie l'appartenance d'une donnée à une liste de valeurs
select NCLI
from CLIENT
where CAT in ('C1','C2','C3');
select NCLI
from CLIENT
where LOCALITE not in ('Toulouse','Breda');
Conditions plus complexes - Les masques
La condition LIKE
Recherche les chaînes de caractères valides à l'aide de caractères génériques
% représente n'importe quelle séquence de 0 ou plusieurs caractères
select NCLI
from CLIENT
where CAT is null;
NCLI
D063
K729
select NCLI
from CLIENT
where CAT is not null;
Le tri
La clause ORDER BY permet de trier les lignes
SELECT nom
FROM employés WHERE salaire >= 1000
ORDER BY salaire DESC
SELECT nom
FROM employés WHERE salaire >= 1000
ORDER BY salaire ASC
Les fonctions monolignes
Ces fonctions renvoient un résultat par ligne, elles permettent de manipuler des
éléments de données.
Elles acceptent des paramètres et renvoient une seule valeur
Elles peuvent être imbriquées
On distinguent des :
select count(NCLI)
from COMMANDE;
count(NCLI)
5
select count(NCLI) as Numeros,
count(NOM) as Noms,
count(LOCALITE) as Localites,
count(CAT) as Categories
from CLIENT;
16 16 16 16
16 15 7 4
Attention aux ensembles vides
0 <null> <null>
Groupement
Création de groupes
Les groupes sont créés par la clause GROUP BY
idService somme
1 2200
2 3300
idService somme
2 3300
Requêtes sur plusieurs tables
77
Les jointures
Exemple:
Dans quelle station pratique-t-on une activité au même prix qu’à Santalba ?
Quels sont les clients (nom, prénom) qui ont séjourné à Santalba?
SELECT C.nom, C.prenom
FROM Client C
WHERE EXISTS (SELECT * FROM Sejour S
WHERE S.station = ’Santalba’
AND S.idClient = C.id)
Prédicats de dénombrement
Test de ‘TOUS’: Opérateur ALL ou ‘AU MOINS UN’ : Opérateur ANY
L’opérateur ALL permet de tester par rapport à tous les éléments de
la liste, l’opérateur ANY compare par rapport à l’un ou l’autre de ces
éléments.
IMPORTANT :
le prédicat EXISTS est en général plus rapide que le prédicat IN ;
Exemple 1:
Ex: Numéros des clients qui ont commandé tous les produits.
Problème: Il n’existe pas d’opérateur de division en SQL!
Deux stratégies:
Clients tels qu’il n’existe pas de produit tel qu’il n’existe pas de
commande pour ce client et ce produit.
Clients qui ont commandé un nombre distinct de produits égal
au nombre total de produits.
Division : solution « logique »
Ou
SELECT NumCli FROM Commande
GROUP BY NumCli
HAVING COUNT (DISTINCT NumProd)
= ( SELECT COUNT(*) FROM Produit );
Mises-à-jour
90
Insertion, Modification et Suppression
Insertion d’un tuple
INSERT INTO nom_table [(nom_col1 [,nomcol2] ..)]
VALUES (valeur1[,valeur2] ...)
INSERT INTO Client (id, nom, prenom)
VALUES (40, ’Moriarty’, ’Dean’)
Modifications de tuples
UPDATE nom_table
SET nom_col1 = expression1 [, nom_col2 = expression2] ...
[WHERE condition]
UPDATE R SET A1=V1, A2=V2, ... An=Vn
WHERE condition
Suppression de tuples
DELETE FROM nom_table [WHERE condition];
Destruction de tous les clients dont le nom commence par ’M’
DELETE FROM Client WHERE nom LIKE ’M%’
91