Cours SGBD 1
Concepts et langages des
Bases de Données Relationnelles
SUPPORT DE COURS
IUT de Nice – Département INFORMATIQUE
IUT de Nice - Cours SGBD1 1
Chapitre 1 Introduction générale
I. Notions intuitives
II. Objectifs et avantages des SGBD
III. L’architecture ANSI/SPARC
IV. Notion de modélisation des données
V. Survol des différents modèles de données
VI. Bref historique,
principaux SGBD commercialisés
IUT de Nice - Cours SGBD1 3
I Notions intuitives
• Base de données
ensemble structuré de données apparentées qui
modélisent un univers réel
Une BD est faite pour enregistrer des faits, des opérations au
sein d'un organisme
(administration, banque, université, hôpital, ...)
Les BD ont une place essentielle dans l'informatique
• Système de Gestion de Base de Données (SGBD)
DATA BASE MANAGEMENT SYSTEM (DBMS)
système qui permet de gérer une BD partagée par
plusieurs utilisateurs simultanément
IUT de Nice - Cours SGBD1 4
• Des fichiers aux Base de Données
Séparation des données et des programmes
FICHIER BASE DE DONNEES
Les données des fichiers sont Les données de la BD sont
décrites dans les programmes décrites hors des programmes
dans la base elle-même
Description
fichier
Description
unique
Description
fichier
Programmes Programmes
La multiplication des fichiers entraînait la redondance des
données, ce qui rendait difficile les mises à jour.
D'où l'idée d'intégration et de partage des données
IUT de Nice - Cours SGBD1 5
II Objectifs et avantages des SGBD
Que doit permettre un SGBD ?
Décrire les données
indépendamment des applications (de manière
intrinsèque)
⇒ langage de définition des données
DATA DEFINITION LANGUAGE (DDL)
Manipuler les données
interroger et mettre à jour les données
sans préciser d'algorithme d'accès
dire QUOI sans dire COMMENT
langage de requêtes déclaratif
ex.:
quels sont les noms des produits de prix < 100F ?
⇒ langage de manipulation des données
DATA MANIPULATION LANGUAGE (DML)
IUT de Nice - Cours SGBD1 6
Contrôler les données
intégrité
vérification de contraintes d'intégrité
ex.: le salaire doit être compris entre 400F et
20000F
confidentialité
contrôle des droits d'accès, autorisation
⇒ langage de contrôle des données
DATA CONTROL LANGUAGE (DCL)
IUT de Nice - Cours SGBD1 7
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 BD
Sécurité
reprise après panne, journalisation
Performances d'accès
index (hashage, arbres balancés ...)
IUT de Nice - Cours SGBD1 8
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
IUT de Nice - Cours SGBD1 9
III L’architecture ANSI/SPARC
• proposition en 75 de l’ ANSI/SPARC
(Standard Planning And Requirement Comitte)
• 3 niveaux de représentation des données
EXTERNE Vue 1 Vue 2
CONCEPTUEL Schéma logique
DICTIONNAIRE DE DONNEES
Schéma physique
INTERNE STRUCTURE DE DONNEES
SGBD
Niveaux de représentation des données
IUT de Nice - Cours SGBD1 10
Le niveau externe
Le concept de vue permet d'obtenir l'indépendance
logique
La modification du schéma logique n’entraîne pas la
modification des applications
(une modification des vues est cependant nécessaire)
Chaque vue correspond à la perception d’une partie des
données, mais aussi des données qui peuvent être
synthétisées à partir des informations représentées dans
la BD (par ex. statistiques)
Le niveau conceptuel
il contient la description des données et des
contraintes d’intégrité (Dictionnaire de Données)
le schéma logique découle d’une activité de
modélisation
Le niveau interne
il correspond aux structures de stockage et aux
moyens d’accés (index)
IUT de Nice - Cours SGBD1 11
Pour résumer :
Les fonctions des SGBD
• DEFINITION DES DONNEES
⇒ Langage de définition des données (DDL)
(conforme à un modèle de données)
• MANIPULATION DES DONNEES
Interrogation
Mise à jour
insertion, suppression, modification
⇒ Langage de manipulation des données (DML)
(langage de requête déclaratif)
• CONTRÔLE DES DONNEES
Contraintes d'intégrité
Contrôle des droits d'accès
Gestion de transactions
⇒ Langage de contrôle des données (DCL)
IUT de Nice - Cours SGBD1 12
IV Notion de modélisation des données
UNIVERS REEL
Modèles sémantiques
Orientés « conception »
Entité-Association, Merise …
MODELE
CONCEPTUEL
MCD
Modèles de BD
Hiérarchique, Réseau
Relationnel …
SCHEMA
LOGIQUE
• Les modèles de BD sont souvent trop limités pour
pouvoir représenter directement le monde réel
• Méthodologies de conception présentées en ACSI,
SGBD2
IUT de Nice - Cours SGBD1 13
Le modèle Entité-Association
EA en français, ER en anglais (pour Entity Relationship)
Formalisme retenu par l'ISO pour décrire l'aspect
conceptuel des données à l’aide d’entités et
d’associations
Le concept d’entité
Représentation d’un objet matériel ou immatériel
Par exemple un employé, un projet, un bulletin de paie
Nom de l’entité
Liste des propriétés
• Les entités peuvent être regroupées en types
d’entités
Par exemple, on peut considérer que tous les employés
particuliers sont des instances du type d’entité générique
EMPLOYE
Par exemple l’employé nommé DUPONT est une instance ou
occurrence de l’entité EMPLOYE
IUT de Nice - Cours SGBD1 14
Les propriétés
données élémentaires relatives à une entité
Par exemple, un numéro d’employé, une date de début
de projet
• on ne considère que les propriétés qui intéressent un
contexte particulier
• Les propriétés d’une entité sont également appelées
des attributs, ou des caractéristiques de cette entité
L’identifiant
propriété ou groupe de propriétés qui sert à identifier
une entité
L’ideintifiant d’une entité est choisi par l’analyste de
façon à ce que deux occurrences de cette entité ne
puissent pas avoir le même identifiant
Par exemple, le numéro d’employé sera l’identifiant de
l’entité EMPLOYE
IUT de Nice - Cours SGBD1 15
Les associations
Représentation d’un lien entre deux entités ou plus
• une association peut avoir des propriétés particulières
Par exemple, la date d’emprunt d’un livre
adhérent exemplaire
emprunter
date d’emprunt
IUT de Nice - Cours SGBD1 16
Les cardinalités
La cardinalité d’une association pour une entité
constituante est constituée d’une borne minimale et
d’une borne maximale :
• Minimale : nombre minimum de fois qu’une
occurrence de l’entité participe aux occurrences de
l’association, généralement 0 ou 1
• Maximale : nombre maximum de fois qu’une
occurrence de l’entité participe aux occurrences de
l’association, généralement 1 ou n
Par exemple :
adhérent exemplaire
emprunter
0,3 date d’emprunt 0,1
• La cardinalité 0,3 indique qu’un adhérent peut être
associé à 0, 1, 2 ou 3 livres, c’est à dire qu’il peut
emprunter au maximun 3 livres.
• A l’inverse un livre peut être emprunté par un seul
adhérent, ou peut ne pas être emprunté.
IUT de Nice - Cours SGBD1 17
• Les cardinalités maximum sont nécessaires pour
concevoir le schéma de la base de données
• Les cardinalités minimums sont nécessaires pour
exprimer les contraintes d’intégrité
En notant uniquement les cardinalités maximum,
on distingue 3 type de liens :
• Lien fonctionnel 1:n
• Lien hiérarchique n:1
• Lien maillé n:m
IUT de Nice - Cours SGBD1 18
Lien fonctionnel 1:n
A B
1 n
Une instance de A ne peut être associée qu'à une seule
instance de B
Par exemple :
employé département
travaille
1 n
Un employé ne peut travailler que dans un seul
département
IUT de Nice - Cours SGBD1 19
Lien hiérarchique n:1
A B
n 1
Une instance de A peut être associée à plusieurs
instances de B
Inverse d'un lien 1:n
département employé
emploie
n 1
Un département emploie généralement plusieurs
employés
IUT de Nice - Cours SGBD1 20
Lien maillé n:m
A B
n m
Une instance de A peut être associée à plusieurs
instances de B et inversement
Par exemple :
employé projet
participe
n m
De ce schéma, on déduit qu’un employé peut participer
à plusieurs projets.
IUT de Nice - Cours SGBD1 21
Exemple de diagramme Entité Association
1 département
est chef de employé
dirige travaille
n 1
a pour chef
n
n
participe
m
projet
IUT de Nice - Cours SGBD1 22
V Les différents modèles de données
• 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
Hiérarchique
Réseau
Liens 1:N
Liens N:M
Relationnel
Liens N:1
SGBDR
IUT de Nice - Cours SGBD1 23
• Les modèles hiérarchique et réseau sont issus du
modèle GRAPHE
• données organisées sous forme de graphe
• langages d'accès navigationnels
(adressage par liens de chaînage)
• on les appelle "modèles d'accès"
• Le modèle relationnel est fondé sur la notion
mathématique de RELATION
• introduit par Codd (recherche IBM)
• données organisées en tables (adressage relatif)
• stratégie d'accès déterminée par le SGBD
IUT de Nice - Cours SGBD1 24
LE MODÈLE RÉSEAU
• Schéma logique représenté par un GRAPHE
noeud : article (représente une entité)
arc : lien hiérarchique 1:N
• Exemple de shéma réseau
CLIENT PRODUIT
VENTE
Diagramme de Bachman
• Langage navigationnel pour manipuler les données
• Implémentation d'un lien par une liste circulaire :
R r
S s1 s2 ..... sn
IUT de Nice - Cours SGBD1 25
• Exemple de schéma réseau :
CLIENTS PRODUITS
p
x
q
y
r
x, p
p
x x, q
y, p
y
y, r r
Représentation d’une association N:M par 2 liens
CODASYL
IUT de Nice - Cours SGBD1 26
LE MODÈLE HIÉRARCHIQUE
• Schéma logique représenté par un ARBRE
noeud : segment (regroupement de données)
arc : lien hiérarchique 1:N
• Exemple de shéma hiérarchique
CLIENT
CLIENT
PRODUIT
PRODUIT VENTE
VENTE
• Choix possible entre plusieurs arborescences
(le segment racine est choisi en fonction de l'accès souhaité)
• Dissymétrie de traitement pour des requêtes symétriques
En prenant l'ex. précédent, considérer les 2 requêtes :
a) Trouver les no de produits achetés par le client x
b) Trouver les no de clients qui ont acheté le produit p
Elles sont traitées différemment suivant le choix du segment racine
(Client ou Produit)
• Adéquation du modèle pour décrire des organisations à
structure arborescente (ce qui est fréquent en gestion)
IUT de Nice - Cours SGBD1 27
LE MODÈLE RELATIONNEL
• En 1970, CODD présente le modèle relationnel
• Schéma logique représenté par des RELATIONS
LE SCHÉMA RELATIONNEL
Le schéma relationnel est l'ensemble des RELATIONS
qui modélisent le monde réel
• Les relations représentent les entités du monde réel
(comme des personnes, des objets, etc.) ou les
associations entre ces entités
• Passage d'un schéma conceptuel E-A à un schéma
relationnel
- une entité est représentée par la relation :
nom_de_l'entité (liste des attributs de l'entité)
- une association M:N est représentée par la relation :
nom_de_l'association (
liste des identifiants des entités participantes,
liste des attributs de l'association)
IUT de Nice - Cours SGBD1 28
• Ex . :
CLIENT (IdCli, nom, ville)
PRODUIT (IdPro, nom, prix, qstock)
VENTE (IdCli, IdPro, date, qte)
Représentation des données sous forme de tables :
CLIENT IdCli Nom Ville
X Smith Paris
Y Jones Paris
Z Blake Nice
PRODUIT IdPro Nom Prix Qstock
P Auto 100 10
Q Moto 100 10
R Velo 100 10
S Pedalo 100 10
VENTE IdCli IdPro Date Qte
X P 1
X Q 2
X R 3
Y P 4
Y Q 5
Z Q 6
LES AVANTAGES DU MODÈLE RELATIONNEL
IUT de Nice - Cours SGBD1 29
• SIMPLICITE DE PRÉSENTATION
- représentation sous forme de tables
• OPÉRATIONS RELATIONNELLES
- algèbre relationnelle
- langages assertionnels
• INDEPENDANCE PHYSIQUE
- optimisation des accès
- stratégie d'accès déterminée par le système
• INDEPENDANCE LOGIQUE
- concept de VUES
• MAINTIEN DE L’INTEGRITÉ
- contraintes d'intégrité définies au niveau du
schéma
IUT de Nice - Cours SGBD1 30
VI Bref historique, principaux systèmes
Années 60 Premiers développements des BD
• fichiers reliés par des pointeurs
• systèmes IDS 1 et IMS 1 précurseurs des SGBD
modernes
Années 70 Première génération de SGBD
• apparition des premiers SGBD
• séparation de la description des données de la
manipulation de celles-ci par les applications
• modéles hiérarchique et réseau CODASYL
• langages d'accès navigationnels
• SGBD IDMS, IDS 2 et IMS 2
Années 80 Deuxième génération
• modèle relationnel
• les SGBDR représentent l'essentiel du marché BD
(aujourd'hui)
• architecture répartie client-serveur
Années 90 Troisième génération
• modèles de données plus riches
• systèmes à objets
OBJECTSTORE, O2
IUT de Nice - Cours SGBD1 31
Principaux systèmes
• Oracle
• DB2 (IBM)
• Ingres
• Informix
• Sybase
• SQL Server (Microsoft)
• O2
• Gemstone
Sur micro :
• Access
• Paradox
• FoxPro
• 4D
• Windev
Sharewares :
• MySQL
• MSQL
• Postgres
• InstantDB
IUT de Nice - Cours SGBD1 32
Chapitre 2 Le modèle relationnel
I. LES CONCEPTS
II. LES DÉPENDANCES
FONCTIONNELLES
III. LES RÈGLES D'INTÉGRITÉ
IV. LES FORMES NORMALES
IUT de Nice - Cours SGBD1 33
I LES CONCEPTS
• LE DOMAINE
• LA RELATION
• LES N-UPLETS
• LES ATTRIBUTS
• LE SCHÉMA D’UNE RELATION
• LE SCHÉMA D’UNE BDR
• LA REPRÉSENTATION
IUT de Nice - Cours SGBD1 34
LE DOMAINE
ensemble de valeurs atomiques d'un certain type
sémantique
Ex. :
NOM_VILLE = { Nice, Paris, Rome }
• les domaines sont les ensembles de valeurs possibles
dans lesquels sont puisées les données
• deux ensembles peuvent avoir les mêmes valeurs
bien que sémantiquement distincts
Ex. :
NUM_ELV = { 1, 2, … , 2000 }
NUM_ANNEE = { 1, 2, … , 2000 }
IUT de Nice - Cours SGBD1 35
LA RELATION
sous ensemble du produit cartésien de plusieurs
domaines
R ⊂ D1 × D2 × ... × Dn
D1, D2, ... , Dn sont les domaines de R
n est le degré ou l’arité de R
Ex.:
Les domaines :
NOM_ELV = { dupont, durant }
PREN_ELV = { pierre, paul, jacques }
DATE_NAISS = {Date entre 1/1/1990 et 31/12/2020}
NOM_SPORT = { judo, tennis, foot }
La relation ELEVE
ELEVE ⊂ NOM_ELV × PREN_ELV × DATE_NAISS
ELEVE = { (dupont, pierre, 1/1/1992),
(durant, jacques, 2/2/1994) }
La relation INSCRIPT
INSCRIPT ⊂ NOM_ELV × NOM_SPORT
INSCRIPT = { (dupont, judo), (dupont, foot),
(durant, judo) }
IUT de Nice - Cours SGBD1 36
LES N-UPLETS
un élément d'une relation est un n-uplet de valeurs
(tuple en anglais)
• un n-uplet représente un fait
Ex.:
« Dupont pierre est un élève né le 1 janvier1992 »
« dupont est inscrit au judo »
• DEFINITION PRÉDICATIVE D’UNE RELATION
Une relation peut être considérée comme un PRÉDICAT
à n variables
θ(x, y, z) vrai ⇔ (x, y, z) ∈ R
Ex. :
est_inscrit (dupont, judo) ⇔ (dupont, judo) ∈ INSCRIPT
IUT de Nice - Cours SGBD1 37
LES ATTRIBUTS
Chaque composante d'une relation est un attribut
• Le nom donné à un attribut est porteur de sens
• Il est en général différent du nom de domaine
• Plusieurs attributs peuvent avoir le même domaine
Ex. :
La relation TRAJET :
TRAJET ⊂ NOM_VILLE × NOM_VILLE
Dans laquelle la première composante représente la ville de
départ VD, la deuxième composante la ville d’arrivée VA d’un
trajet.
IUT de Nice - Cours SGBD1 38
LE SCHÉMA D’UNE RELATION
Le schéma d'une relation est défini par :
- le nom de la relation
- la liste de ses attributs
on note : R (A1, A2, ... , An)
Ex.:
ELEVE (NOM, PRENOM, NAISS)
INSCRIPT (NOM_ELV, SPORT)
TRAJET (VD, VA)
• Extension et Intension
- L'extension d'une relation correspond à l'ensemble
de ses éléments (n-uplets)
→ le terme RELATION désigne une extension
- L'intention d'une relation correspond à sa
signification
→ le terme SCHÉMA DE RELATION désigne
l'intention d'une relation
IUT de Nice - Cours SGBD1 39
LE SCHÉMA D’UNE BDR
Le schéma d'une base de données est défini par :
- l'ensemble des schémas des relations qui la
composent
Notez la différence entre :
• le schéma de la BDR qui dit comment les données
sont organisées dans la base
• l'ensemble des n-uplets de chaque relation, qui
représentent les données stockées dans la base
• Conception de Schéma Relationnel
- Problème :
Comment choisir un schéma approprié ?
- Méthodologies de conception
→ cours ACSI
→ cours SGBD 2
IUT de Nice - Cours SGBD1 40
LA REPRÉSENTATION
1 RELATION = 1 TABLE
U1 V1 W1 X1 Y1
U2 V2 W2 X2 Y2
U3 V3 W3 X3 Y3
1 ÉLÉMENT ou n-uplet = 1 LIGNE
LIGNE → U1 V1 W1 X1 Y1
1 élément
∗ une relation est un ensemble ⇒ on ne peut pas avoir 2 lignes
identiques
1 ATTRIBUT = 1 COLONNE
U1
U2
U3
↑
COLONNE
1 attribut ou propriété
IUT de Nice - Cours SGBD1 41
Exemples :
- La relation ELEVE
ELEVE : NOM PRENOM NAISS
élément → dupont Pierre 1/1/1992
durant Jacques 2/2/1994
duval Paul 3/03/81
- La relation INSCRIPT
INSCRIPT : NOM_ELV SPORT
élément → Dupont judo
Dupont foot
Durant judo
- La relation TRAJET
TRAJET : VD VA
élément → Nice paris
Paris rome
Rome nice
IUT de Nice - Cours SGBD1 42
II LES DÉPENDANCES
FONCTIONNELLES
Dépendance fonctionnelle
Soit R(A1, A2, ...., An) un schéma de relation
Soit X et Y des sous ensembles de {A1,A2,...An)
On dit que Y dépend fonctionnellement de X (X->Y) si à
chaque valeur de X correspond une valeur unique de Y
on écrit : X→Y
on dit que : X détermine Y
Ex.:
PRODUIT (no_prod, nom, prixUHT)
no_prod → (nom, prixUHT)
NOTE (no_contrôle, no_élève, note)
(no_contrôle, no_élève) → note
• une dépendance fonctionnelle est une propriété
sémantique, elle correspond à une contrainte
supposée toujours vrai du monde réel
D.F. élémentaire
D.F. X -> A mais A est un attribut unique non inclus dans X et il
n’existe pas de X’ inclus dans X tel que X’ -> A
IUT de Nice - Cours SGBD1 44
La clé d’une relation
attribut (ou groupe minimum d'attributs) qui détermine
tous les autres
Ex.:
PRODUIT (no_prod, nom, prixUHT)
no_prod → (nom, prixUHT)
no_prod est une clé
• Une clé détermine un n-uplet de façon unique
• Pour trouver la clé d'une relation, il faut examiner
attentivement les hypothèses sur le monde réel
• Une relation peut posséder plusieurs clés, on les
appelle clés candidates
Ex.:
dans la relation PRODUIT, nom est une clé candidate (à
condition qu'il n'y ait jamais 2 produits de même nom)
IUT de Nice - Cours SGBD1 45
Clé primaire
choix d'une clé parmi les clés candidates
Clé étrangère ou clé secondaire
attribut (ou groupe d'attributs) qui fait référence à la clé
primaire d'une autre relation
Ex.:
CATEG (no_cat, design, tva)
PRODUIT(no_prod, nom, marque, no_cat, prixUHT)
no_cat dans PRODUIT est une clé étrangère
CLÉ ÉTRANGÈRE = CLÉ PRIMAIRE dans une autre
relation
IUT de Nice - Cours SGBD1 46
III LES RÈGLES D'INTÉGRITÉ
Les règles d'intégrité sont les assertions qui
doivent être vérifiées par les données contenues
dans une base
Le modèle relationnel impose les contraintes
structurelles suivantes :
INTÉGRITÉ DE DOMAINE
INTÉGRITÉ DE CLÉ
INTÉGRITÉ RÉFÉRENCIELLE
• La gestion automatique des contraintes d’intégrité
est l’un des outils les plus importants d’une base
de données.
• Elle justifie à elle seule l’usage d’un SGBD.
IUT de Nice - Cours SGBD1 47
INTÉGRITÉ DE DOMAINE
Les valeurs d'une colonne de relation doivent appartenir
au domaine correspondant
• contrôle des valeurs des attributs
• contrôle entre valeurs des attributs
IUT de Nice - Cours SGBD1 48
INTÉGRITÉ DE CLÉ
Les valeurs de clés primaires doivent être :
- uniques
- non NULL
• Unicité de clé
• Unicité des n-uplets
• Valeur NULL
valeur conventionnelle pour représenter une
information inconnue
• dans toute extension possible d'une relation, il ne peut
exister 2 n-uplets ayant même valeur pour les attributs
clés
sinon 2 clés identiques détermineraient 2 lignes identiques
(d'après la définition d’une clé), ce qui est absurde
IUT de Nice - Cours SGBD1 49
INTÉGRITÉ RÉFÉRENCIELLE
Les valeurs de clés étrangères sont 'NULL' ou sont des
valeurs de la clé primaire auxquelles elles font référence
• Relations dépendantes
• LES DÉPENDANCES :
Liaisons de un à plusieurs exprimées par des attributs
particuliers: clés étrangères ou clés secondaires
IUT de Nice - Cours SGBD1 50
Les contraintes de référence ont un impact important
pour les opérations de mises à jour, elles permettent
d’éviter les anomalies de mises à jour
Exemple :
CLIENT (no_client, nom, adresse)
ACHAT (no_produit, no_client, date, qte)
Clé étrangère no_client dans ACHAT
• insertion tuple no_client = X dans ACHAT
Ö vérification si X existe dans CLIENT
• suppression tuple no_client = X dans CLIENT
Ö soit interdire si X existe dans ACHAT
Ö soit supprimer en cascade tuple X dans ACHAT
Ö soit modifier en cascade X = NULL dans ACHAT
• modification tuple no_client = X en X’ dans CLIENT
Ö soit interdire si X existe dans ACHAT
Ö soit modifier en cascade X en X’ dans ACHAT
IUT de Nice - Cours SGBD1 51
IV LES FORMES NORMALES
La théorie de la normalisation
• elle met en évidence les relations "indésirables"
• elle définit les critères des relations "désirables"
appelées formes normales
• Propriétés indésirables des relations
- Redondances
- Valeurs NULL
• elle définit le processus de normalisation permettant
de décomposer une relation non normalisée en un
ensemble équivalent de relations normalisées
IUT de Nice - Cours SGBD1 53
La décomposition
Objectif:
- décomposer les relations du schéma relationnel
sans perte d’informations
- obtenir des relations canoniques ou de base du
monde réel
- aboutir au schéma relationnel normalisé
• Le schéma de départ est le schéma universel de la
base
• Par raffinement successifs ont obtient des sous
relations sans perte d’informations et qui ne seront
pas affectées lors des mises à jour (non redondance)
Les formes normales
5 FN, les critères sont de plus en plus restrictifs
FNj ⇒ FNi (j>i)
• Notion intuitive de FN
une « bonne relation » peut être considérée comme
une fonction de la clé primaire vers les attributs
restants
IUT de Nice - Cours SGBD1 54
1ère Forme Normale 1FN
Une relation est en 1FN si tout attribut est atomique (non
décomposable)
Contre-exemple
ELEVE (no_elv, nom, prenom, liste_notes)
Un attribut ne peut pas être un ensemble de valeurs
Décomposition
ELEVE (no_elv, nom, prenom)
NOTE (no_elv, no_matiere, note)
IUT de Nice - Cours SGBD1 55
2ème Forme Normale 2FN
Une relation est en 2FN si
- elle est en 1FN
- si tout attribut n’appartenant pas à la clé ne dépend
pas d’une partie de la clé
• C’est la phase d’identification des clés
• Cette étape évite certaines redondances
• Tout attribut doit dépendre fonctionnellement de la
totalité de la clé
Contre-exemple
une relation en 1FN qui n'est pas en 2FN
COMMANDE (date, no_cli, no_pro, qte, prixUHT)
elle n'est pas en 2FN car la clé = (date, no_cli,
no_pro), et le prixUHT ne dépend que de no_pro
Décomposition
COMMANDE (date, no_cli, no_pro, qte)
PRODUIT (no_pro, prixUHT)
IUT de Nice - Cours SGBD1 56
3ème Forme Normale 3FN
Une relation est en 3FN si
- elle est en 2FN
- si tout attribut n’appartenant pas à la clé ne dépend
pas d’un attribut non clé
Ceci correspond à la non transitivité des D.F. ce qui
évite les redondances.
En 3FN une relation préserve les D.F. et est sans perte.
Contre-exemple
une relation en 2FN qui n'est pas en 3FN
VOITURE (matricule, marque, modèle, puissance)
on vérifie qu'elle est en 2FN ; elle n'est pas en 3FN car la clé =
matricule, et la puissance dépend de (marque, modèle)
Décomposition
VOITURE (matricule, marque, modèle)
MODELE (marque, modèle, puissance)
IUT de Nice - Cours SGBD1 57
3ème Forme Normale de BOYCE-CODD BCNF
Une relation est en BCFN :
- elle est en 1FN et
- ssi les seules D.F. élémentaires sont celles dans
lesquelles une clé détermine un attribut
• BCNF signifie que l'on ne peut pas avoir un attribut
(ou groupe d'attributs) déterminant un autre attribut et
distinct de la clé
• Ceci évite les redondances dans l’extension de la
relation: mêmes valeurs pour certains attributs de n-
uplets différents
• BCNF est plus fin que FN3 : BCNF ⇒ FN3
Contre-exemple
une relation en 3FN qui n'est pas BCNF
CODEPOSTAL (ville, rue, code)
on vérifie qu'elle est FN3, elle n'est pas BCNF car la clé = (ville,
rue) (ou (code, ville) ou (code, rue)), et code → ville
IUT de Nice - Cours SGBD1 58
Chapitre 4 L’algèbre relationnelle
I. Les opérations
II. Le langage algébrique
IUT de Nice - Cours SGBD1 69
I Les opérations
L’Algèbre relationnelle est une collection d’opérations
OPÉRATIONS
- opérandes : 1 ou 2 relations
- résultat : une relation
DEUX TYPES D’OPÉRATIONS
Î OPÉRATIONS ENSEMBLISTES
UNION
INTERSECTION
DIFFÉRENCE
Î OPÉRATIONS SPÉCIFIQUES
PROJECTION
RESTRICTION
JOINTURE
DIVISION
IUT de Nice - Cours SGBD1 70
UNION
L'union de deux relations R1 et R2 de même schéma est
une relation R3 de schéma identique qui a pour n-uplets
les n-uplets de R1 et/ou R2
On notera :
R3 = R1 ∪ R2
R1 R2
A B ∪ A B
0 1 0 1
2 3 4 5
R3 = R1 ∪ R2
R3
A B
0 1
2 3
4 5
IUT de Nice - Cours SGBD1 71
INTERSECTION
L’intersection entre deux relations R1 et R2 de même
schéma est une relation R3 de schéma identique ayant
pour n-uplets les n-uplets communs à R1 et R2
On notera :
R3 = R1 ∩ R2
R1 R2
A B ∩ A B
0 1 0 1
2 3 4 5
R3 = R1 ∩ R2
R3
A B
0 1
IUT de Nice - Cours SGBD1 72
DIFFÉRENCE
La différence entre deux relations R1 et R2 de même
schéma est une relation R3 de schéma identique ayant
pour n-uplets les n-uplets de R1 n'appartenant pas à R2
On notera :
R3 = R1 − R2
R1 R2
A B − A B
0 1 0 1
2 3 4 5
R3 = R1 − R2
R3
A B
2 3
IUT de Nice - Cours SGBD1 73
PROJECTION
La projection d'une relation R1 est la relation R2
obtenue en supprimant les attributs de R1 non
mentionnés puis en éliminant éventuellement les n-
uplets identiques
On notera :
R2 = πR1 (Ai, Aj, ... , Am)
la projection d'une relation R1 sur les attributs
Ai, Aj, … , Am
Î La projection permet d’éliminer des attributs d’une
relation
• Elle correspond à un découpage vertical :
A1 A2 A3 A4
IUT de Nice - Cours SGBD1 74
Requête 1 :
« Quels sont les références et les prix des produits ? »
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
πPRODUIT (IdPro, Prix)
IdPro Prix
P 1000
Q 2000
R 3000
S 4000
IUT de Nice - Cours SGBD1 75
Requête 2 :
« Quelles sont les marques des produits ? »
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
πPRODUIT (Marque)
Marque
IBM
Apple
Microsoft
Notez l’élimination des doublons..
IUT de Nice - Cours SGBD1 76
RESTRICTION
La restriction d'une relation R1 est une relation R2 de
même schéma n'ayant que les n-uplets de R1 répondant
à la condition énoncée
On notera :
R2 = σR1 (condition)
la restriction d'une relation R1 suivant le critère
"condition"
où "condition" est une relation d'égalité ou d'inégalité
entre 2 attributs ou entre un attribut et une valeur
Î La restriction permet d'extraire les n-uplets qui
satisfont une condition
• Elle correspond à un découpage horizontal :
A1 A2 A3 A4
IUT de Nice - Cours SGBD1 77
Requête 3 :
« Quelles sont les produits de marque ‘IBM’ ? »
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
σPRODUIT (Marque = ’IBM’)
IdPro Nom Marque Prix
P PS1 IBM 1000
R PS2 IBM 3000
IUT de Nice - Cours SGBD1 78
JOINTURE
La jointure de deux relations R1 et R2 est une relation
R3 dont les n-uplets sont obtenus en concaténant les n-
uplets de R1 avec ceux de R2 et en ne gardant que
ceux qui vérifient la condition de liaison
On notera :
R3 = R1 × R2 (condition)
la jointure de R1 avec R2 suivant le critère condition
• Le schéma de la relation résultat de la jointure est la
concaténation des schémas des opérandes (s'il y a
des attributs de même nom, il faut les renommer)
• Les n-uplets de R1 × R2 (condition) sont tous les
couples (u1,u2) d'un n-uplet de R1 avec un n-uplet de
R2 qui satisfont "condition"
• La jointure de deux relations R1 et R2 est le produit
cartésien des deux relations suivi d'une restriction
• La condition de liaison doit être du type :
<attribut1> :: <attribut2>
où : attribut1 ∈ 1ère relation et attribut2 ∈ 2ème relation
:: est un opérateur de comparaison (égalité ou inégalité)
IUT de Nice - Cours SGBD1 79
Î La jointure permet de composer 2 relations à l'aide
d'un critère de liaison
R1(A, B, C) R2(U, V)
A B C U V
A1 B1 10 10 V1
A2 B2 10 20 V2
A3 B3 20 30 V3
A4 B4 30
R1 × R2 (R1.C = R2.U)
A B C U V
A1 B1 10 10 V1
A1 B2 10 10 V1
A3 B3 20 20 V2
A4 B4 30 30 V3
IUT de Nice - Cours SGBD1 80
Jointure naturelle
Jointure où l'opérateur de comparaison est l'égalité
dans le résultat on fusionne les 2 colonnes dont les valeurs sont
égales
Î La jointure permet d'enrichir une relation
Requête 5 :
« Donnez pour chaque vente la référence du produit, sa
désignation, son prix, le numéro de client, la date et la
quantité vendue »
VENTE As V PRODUIT As P
IdCli IdPro Date Qte IdPro Désignation Prix
X P 1/1/98 1 P PS 100
Y Q 2/1/98 1 Q Mac 100
Z P 3/1/98 1
VENTE × PRODUIT ([Link]=[Link])
Idcli IdPro Date Qte Désignation Prix
X P 1/1/98 1 PS 100
Y Q 2/1/98 1 Mac 100
Z P 3/1/98 1 PS 100
• La normalisation conduit à décomposer ; la jointure
permet de recomposer
IUT de Nice - Cours SGBD1 81
Auto-jointure
jointure d'une relation par elle-même
Requête 6 :
« Quels sont les noms des clients qui habitent la même
ville que John ?»
CLIENT As C1 CLIENT As C2
IdCli Nom Ville IdCli Nom Ville
X Smith Nice X Smith Nice
Y Blake Paris Y Blake Paris
Z John Nice Z John Nice
R1 = CLIENT × CLIENT ([Link] = [Link])
R1
[Link] [Link] Ville [Link] [Link]
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John
IUT de Nice - Cours SGBD1 82
R1
[Link] [Link] Ville [Link] [Link]
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John
R2 = σR1 ([Link] = ’John’)
R2
[Link] [Link] Ville [Link] [Link]
X Smith Nice Z John
Z John Nice Z John
R3 = πR2 ([Link])
R3
[Link]
Smith
John
IUT de Nice - Cours SGBD1 83
DIVISION
Soit deux relations
R1 (A1, A2, … , An, B1, B2, … , Bm)
R2 (B1, B2, … , Bm)
Si le schéma de R2 est un sous-schéma de R1.
La division de R1 par R2 est une relation R3 dont :
- le schéma est le sous-schéma complémentaire de R2
par rapport à R1
- un n-uplet (a1, a2, … , an) appartient à R3 si
(a1, a2, … , an, b1, b2, … , bm) appartient à R1
pour tous (b1, b2, … , bm) ∈ R2.
On notera :
R3 = R1 ÷ R2
la division de R1 par R2
IUT de Nice - Cours SGBD1 84
Î la division permet de rechercher dans une relation les
sous n-uplets qui sont complétés par tous ceux d'une
autre relation
Elle permet de répondre à des questions qui sont
formulées avec le quantificateur universel :
"pour tout ..."
Requête 6 :
« Quels sont les élèves qui sont inscrits à tous les sports ? »
INSCRIPT SPORT
Elève Sport ÷ Sport
toto judo judo
tata danse foot
toto foot danse
toto danse
RES = INSCRIPT ÷ SPORT
RES
Elève
toto
IUT de Nice - Cours SGBD1 85
II Le langage algébrique
Le langage algébrique permet de formuler une question
par une suite d'opérations de l'algèbre relationnelle
Requêtes sur le schéma CLIENT, PRODUIT, VENTE
CLIENT (IdCli, nom, ville)
PRODUIT (IdPro, désignation, marque, prix)
VENTE (IdCli, IdPro, date, qte)
Requête 8 :
« Donner les no des produits de marque Apple et de prix <
5000 F »
R1 = σPRODUIT (marque = Apple')
R2 = σPRODUIT (prix < 5000)
R3 = R1∩R2
RESUL = πR3 (IdPro)
IUT de Nice - Cours SGBD1 86
Requête 9 :
« Donner les no des clients ayant acheté un produit de marque
Apple »
R1 = σPRODUIT (marque = 'Apple')
R2 = R1×VENTE ([Link] = [Link])
RESUL = πR2 (IdCli)
IUT de Nice - Cours SGBD1 87
Requête 10 :
« Donner les no des clients n'ayant acheté que des produits de
marque Apple »
R1 = VENTE×PRODUIT ([Link] = [Link])
R2 = σR1 (marque = 'Apple')
R3 = πR2 (IdCli)
R4 = σR1 (marque ≠ 'Apple')
R5 = πR4 (IdCli)
RESUL = R3 − R5
IUT de Nice - Cours SGBD1 88
Requête 11 :
« Donner les no des clients ayant acheté tous les produits de
marque Apple »
R1 = σPRODUIT (marque = 'Apple')
R2 = πR1 (IdPro)
R3 = πVENTE (IdCli, IdPro)
R4 = R3 ÷ R2
IUT de Nice - Cours SGBD1 89
Arbre algébrique
une question peut être représentée par un arbre
« Quels sont les clients de Nice ayant acheté un produit de
marque 'Apple' ? »
π (no-cli)
σ (marque='Apple')
x ([Link]-pro=[Link]-pro)
σ (ville='Nice') PRODUIT P
CLIENT C
Optimisation de requêtes
Plusieurs arbres équivalents peuvent être déduits d'un arbre
donné à l'aide de règles de transformation simples, telles que
permutation des jointures et restrictions, permutation des
projections et des jointures, etc.
Ces transformations sont à la base des techniques
d'optimisation de requêtes
IUT de Nice - Cours SGBD1 90
III SQL (Structured Query Language)
• Introduit par IBM, évolution du langage SEQUEL,
commercialisé tout d'abord par ORACLE
• SQL est devenu le langage standard pour décrire et
manipuler les BDR
• Les commandes SQL :
- De définition des données :
CREATE
DROP
ALTER
- De manipulation des données :
SELECT
INSERT
UPDATE
DELETE
- De contrôle des données :
Î Contrôle des accès concurrents
COMMIT
ROLLBACK
Î Contrôle des droits d’accès
GRANT
REVOKE
IUT de Nice - Cours SGBD1 108
• SQL peut être utilisé de 2 manières :
- en mode interactif
Î pour apprendre le langage
SQL est un langage pour les développeurs
n'est pas destiné à un utilisateur final
Les requêtes sont envoyées à partir d'un terminal interactif
auquel les résultats sont retournés
Ex. :
SELECT [Link]
FROM client C
WHERE [Link] = 'c1'
- en mode intégré dans un L3G hôte
(COBOL, ADA, C, FORTRAN …)
Î pour développer des applications
Les constantes dans les requêtes SQL peuvent être
remplacées par des variables du programme hôte ; les
résultats doivent être transmis dans des variables
Ex. : SQL danc C
EXEC SQL SELECT [Link] INTO :laVille
FROM client C
WHERE [Link] = :unIdCli ;
les variables du programme sont précédées par (:)
• La notion de curseur permet d'exploiter les résultats
d'une requête ligne à ligne
• Un programme intégrant SQL doit être précompilé par
un précompilateur SQL
IUT de Nice - Cours SGBD1 109
1 Importance du langage SQL
• Standard d'accès aux serveurs de données
relationnels, norme ISO
• SQL est le langage commun de nombreux systèmes
commercialisés
• SQL est l'interface logiciel/logiciel entre les
applications et les BDR
Applications
SQL
ORACLE DB2 INGRES
SYBASE INFORMIX
IUT de Nice - Cours SGBD1 110
• Plusieurs niveaux de normalisation
- SQL1 : norme de base
- SQL2 : extension de SQL1
meilleur support des règles du relationnel
types de données plus variés
- SQL3 : intégration du modèle objet
• Quels sont les avantages de la normalisation ?
Î Réduction des coûts de formation
Î Portabilité des applications
Î Pérennité des applications
Î Communication facilitée entre systèmes
IUT de Nice - Cours SGBD1 111
2 Définition des données
CRÉATION DE TABLES
La commande CREATE TABLE crée la définition d'une
table
Syntaxe :
CREATE TABLE table
(
-- définition des colonnes
colonne type [ NOT NULL [UNIQUE] ]
[ DEFAULT valeur ]
[ PRIMARY KEY ]
[ REFERENCES table ]
[ CHECK condition ] ,
... ,
-- contraintes de table
[ PRIMARY KEY (liste de colonnes) ],
[ UNIQUE (liste de colonnes) ] ,
... ,
[ FOREIGN KEY (liste de colonnes) REFERENCES
table
[ ON DELETE {RESTRICT | CASCADE | SET NULL} ]
[ ON UPDATE {RESTRICT | CASCADE | SET NULL} ] ,
... ,
[ CHECK condition ] ,
...
)
IUT de Nice - Cours SGBD1 112
Principaux types de données
CHAR(n)
SMALLINT
INTEGER
DECIMAL(n,m)
DATE
Contraintes d'intégrité
NOT NULL valeur null impossible
UNIQUE unicité d'un attribut
PRIMARY KEY clé primaire
FOREIGN KEY clé étrangère
CHECK plage ou liste de valeurs
Une contrainte qui ne fait référence qu'à une seule colonne
de la table peut faire partie intégrante de la définition de
colonne
IUT de Nice - Cours SGBD1 113
• Toute opération de mise à jour violant une des
contraintes spécifiées sera rejetée
Le système garantit l'intégrité des données
• SQL2 permet de spécifier les actions à entreprendre
pour le maintien de l'intégrité référentielle, lors d'une
suppression ou d'une modification d'un tuple référencé
CASCADE cascader les suppressions ou
modifications
par ex. si on supprime un produit dans la table
PRODUIT, toutes les ventes correspondantes
seront supprimées dans la table VENTE
SET NULL rendre nul les attributs référençant
par ex. si on modifie la référence d'un produit
dans la table PRODUIT, toutes les références
correspondantes seront modifiées dans la table
VENTE
RESTRICT rejet de la mise à jour
c’est l’option par défaut
IUT de Nice - Cours SGBD1 114
• Exemple
CREATE TABLE client
(
IdCli CHAR(4) PRIMARY KEY ,
nom CHAR(20) ,
ville CHAR(30)
CHECK (ville IN ('Nice', 'Paris', 'Rome') ,
)
CREATE TABLE produit
(
IdPro CHAR(6) PRIMARY KEY ,
nom CHAR(30) NOT NULL UNIQUE ,
marque CHAR(30) ,
prix DEC(6,2) ,
qstock SMALLINT
CHECK (qstock BETWEEN 0 AND 100) ,
-- contrainte de table
CHECK (marque <> 'IBM' OR qstock < 10)
)
CREATE TABLE vente
(
IdCli CHAR(4) NOT NULL
REFERENCES client ,
IdPro CHAR(6) NOT NULL ,
date DATE NOT NULL ,
qte SMALLINT
CHECK (qte BETWEEN 1 AND 10) ,
-- contrainte de table
PRIMARY KEY (IdCli, IdPro, date) ,
FOREIGN KEY (IdPro) REFERENCES produit
ON DELETE CASCADE ON UPDATE CASCADE
)
IUT de Nice - Cours SGBD1 115
CRÉATION D'INDEX
La commande CREATE INDEX permet de créer des
index multi-colonne
Syntaxe :
CREATE [UNIQUE] INDEX index
ON table (colonne [ASC|DESC], ...)
L'option UNIQUE permet d'assurer l'unicité d'une clé
Ex.: CREATE UNIQUE INDEX index1 ON client(Nom)
Les index permettent d'accélérer les recherches
Le système détermine sa stratégie d'accès en fonction
des index existants
Les index sont automatiquement mis à jour
Il est indispensable de créer les index appropriés pour
accélérer le traitement des requêtes
Il ne faut cependant pas créer des index sur n'importe
quel colonne ou groupe de colonnes, car les mises à
jour seraient ralenties inutilement par la maintenance
de ces index
Un index est supprimé par la commande DROP
INDEX
IUT de Nice - Cours SGBD1 116
MODIFICATION DU SCHÉMA
La modification du schéma n'est pas prévue dans SQL1
; cependant la plupart des systèmes permettent la
suppression ou la modification d'une table à l'aide des
commandes :
DROP TABLE
ALTER TABLE
Ex.:
ALTER TABLE client
ADD COLUMN teleph CHAR(16)
IUT de Nice - Cours SGBD1 117
DICTIONNAIRE DE DONNÉES
Le dictionnaire de données contient la description de
tous les objets (relations, index, ...) de la BD
Le DD est décrit sous forme de tables systèmes
Par exemple, on peut citer dans DB2 :
SYSTABLES (NAME, CREATOR, COLCOUNT, ...)
description des tables
SYSCOLUMNS (NAME, TBNAME, COLTYPE, ...)
description des colonnes
Le DD peut être consulté de la même manière que les
tables de base avec le langage d'interrogation
il faut toutefois connaître les noms et les schémas des
tables systèmes
IUT de Nice - Cours SGBD1 118
3 Manipulation des données
SELECT, INSERT, UPDATE et DELETE sont les 4
commandes de manipulation des données en SQL
Ex. :
Recherche SELECT
SELECT [Link]
FROM produit P
WHERE [Link] = 'p1'
Ajout INSERT
INSERT
INTO client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')
Mise à jour UPDATE
UPDATE produit P
SET [Link] = [Link] * 1.20
WHERE [Link] = 'p2'
Suppression DELETE
DELETE
FROM produit P
WHERE [Link] = 'p4'
IUT de Nice - Cours SGBD1 119
LA COMMANDE SELECT
La commande SELECT permet de rechercher des
données à partir de plusieurs tables ; le résultat est
présenté sous forme d'une table réponse
• Expression des projections
Q1 Donner les noms, marques et prix des produits
SELECT [Link], [Link], [Link]
FROM produit P
Synonyme de nom de table (ou alias)
• On peut introduire dans la clause FROM un synonyme
(alias) à un nom de table en le plaçant immédiatement
après le nom de la table
• Les noms de table ou les synonymes peuvent être
utilisés pour préfixer les noms de colonnes dans le
SELECT
• Les préfixes ne sont obligatoires que dans des cas
particuliers (par ex. pour une auto-jointure) ; leur emploi
est cependant conseillé pour la clarté
• Un alias est utilisé par SQL comme une variable de
parcours de table (dite variable de corrélation) désignant
à tout instant une ligne de la table
IUT de Nice - Cours SGBD1 120
Q2 Donner les différentes marques de produit
SELECT DISTINCT [Link]
FROM produit P
Contrairement à l’algèbre relationnelle, SQL n'élimine
pas les doublons
Pour éliminer les doublons il faut spécifier DISTINCT
Q3 Donner les références des produits et leurs prix majorés
de 20%
SELECT [Link], [Link] * 1.20
FROM produit P
Il est possible d'effectuer des opérations arithmétiques
(+, -, *, /) sur les colonnes extraites
Q4 Donner tous les renseignements sur les clients
SELECT *
FROM client
Une étoile (*) permet de lister tous les attributs
IUT de Nice - Cours SGBD1 121
• Expression des restrictions
Q5 Donner les noms des produits de marque IBM
SELECT [Link]
FROM produit P
WHERE [Link] = 'IBM'
La condition de recherche (qualification) est spécifiée
après la clause WHERE par un prédicat
Un prédicat simple peut-être :
- un prédicat d’égalité ou d’inégalité (=, <>, <, >, <=, >=)
- un prédicat LIKE
- un prédicat BETWEEN
- un prédicat IN
- un test de valeur NULL
- un prédicat EXISTS
- un prédicat ALL ou ANY
Un prédicat composé est construit à l’aide des
connecteurs AND, OR et NOT
IUT de Nice - Cours SGBD1 122
Exemples
Q6 Lister les clients dont le nom comporte la lettre A en 2ième
position
SELECT *
FROM client C
WHERE [Link] LIKE '_A%'
Le prédicat LIKE compare une chaîne avec un modèle
(_) remplace n'importe quel caractère
(%) remplace n'importe quelle suite de caractères
Q7 Lister les produits dont le prix est compris entre 5000F et
12000F
SELECT *
FROM produit P
WHERE [Link] BETWEEN 5000 AND 12000
Le prédicat BETWEEN teste l'appartenance à un intervalle
Q8 Lister les produits de marque IBM, Apple ou Dec
SELECT *
FROM produit P
WHERE [Link] IN ('IBM', 'Apple', 'Dec')
Le prédicat IN teste l'appartenance à une liste de valeurs
Q9 Lister les produits dont le prix est inconnu
SELECT *
FROM produit P
WHERE [Link] IS NULL
IUT de Nice - Cours SGBD1 123
La valeur NULL signifie qu'une donnée est inconnue
IUT de Nice - Cours SGBD1 124
Q10 Lister les produits de marque IBM dont le prix est inférieur
à 12000F
SELECT *
FROM produit P
WHERE [Link] = 'IBM' AND [Link] < 12000
Le connecteur AND relie les 2 prédicats de comparaison
• USER
Le mot réservé USER désigne l'usager courant
• Valeurs nulles
La valeur NULL est une valeur particulière signifiant
qu'une donnée est manquante, sa valeur est inconnue
• Dans une expression arithmétique, si l'un des
termes est null, alors l'expression entière prend la
valeur NULL
• Un prédicat de comparaison (=, <>, <, <=, >, >=)
prend la valeur logique "inconnu" si l'un des
termes de la comparaison est NULL
AND F V ? OR F V ? NOT
F F F F F F V ? F V
V F V ? V V V V V F
? F ? ? ? ? V ? ? ?
V = vrai, F = faux, ? = inconnu
IUT de Nice - Cours SGBD1 125
• Tri du résultat d'un SELECT
La clause ORDER BY permet de spécifier les colonnes
définissant les critères de tri
Le tri se fera d'abord selon la première colonne
spécifiée, puis selon la deuxième colonne etc...
Exemple
Q11 Lister les produits en les triant par marques et à l'intérieur
d'une marque par prix décroissants
SELECT *
FROM produit P
ORDER BY [Link], [Link] DESC
L'ordre de tri est précisé par ASC (croissant) ou DESC
(décroissant) ; par défaut ASC
IUT de Nice - Cours SGBD1 126
• Expression des jointures
Le produit cartésien s'exprime simplement en incluant
plusieurs tables après la clause FROM
La condition de jointure est exprimée après WHERE
Exemples :
Q12 Donner les références et les noms des produits vendus
SELECT [Link], [Link]
FROM produit P , vente V
WHERE [Link] = [Link]
Q13 Donner les noms des clients qui ont acheté le produit de
nom 'PS1'
SELECT [Link]
FROM client C , produit P, vente V
WHERE [Link] = [Link]
AND [Link] = [Link]
AND [Link] = 'PS1'
IUT de Nice - Cours SGBD1 127
• Auto-jointure
Q14 Donner les noms des clients de la même ville que John
SELECT [Link]
FROM client C1 , client C2
WHERE [Link] = [Link]
AND [Link] = 'John'
AND [Link] <> 'John'
• Cet exemple utilise, pour le couplage des villes, la
jointure de la table Client avec elle-même (auto-jointure)
• Pour pouvoir distinguer les références ville dans les 2
copies, il faut introduire 2 alias différents C1 et C2 de la
table client
IUT de Nice - Cours SGBD1 128
• Jointures externes
La jointure externe permet de retenir lors d'une jointure
les lignes d'une table qui n'ont pas de correspondant
dans l'autre table, avec des valeurs nulles associées
On distingue jointure externe gauche, droite et complète
selon que l'on retient les lignes sans correspondant des
2 tables ou seulement d'une
SQL2 offre la possibilité de spécifier les jointures
externes au niveau de la clause FROM selon la syntaxe
suivante :
FROM table1 [NATURAL] [{LEFT|RIGHT}] JOIN table2
[ON ( liste de colonnes = liste de colonnes) ]
NATURAL signifie jointure naturelle, c.a.d l'égalité des
attributs de même nom
Q15 Lister tous les clients avec le cas échéant leurs achats
SELECT [Link], [Link], [Link]
[Link], [Link], [Link]
FROM client C NATURAL LEFT JOIN vente V
IUT de Nice - Cours SGBD1 129
• Sous-requêtes
SQL permet l'imbrication de sous-requêtes au niveau de
la clause WHERE
d'où le terme "structuré" dans Structured Query Language
Les sous-requêtes sont utilisées :
• dans des prédicats de comparaison
(=, <>, <, <=, >, >=)
• dans des prédicats IN
• dans des prédicats EXISTS
• dans des prédicats ALL ou ANY
Une sous-requête dans un prédicat de comparaison
doit se réduire à une seule valeur ("singleton select" )
Une sous-requête dans un prédicat IN, ALL ou ANY
doit représenter une table à colonne unique
L'utilisation de constructions du type "IN sous-requête"
permet d'exprimer des jointures de manière
procédurale ... ce qui est déconseillé !!
IUT de Nice - Cours SGBD1 130
Exemple
Q16 Donner les noms des clients qui ont acheté le produit 'p1'
• Avec sous-requête
SELECT [Link]
FROM client C
WHERE IdCli IN
(
SELECT [Link]
FROM vente V
WHERE [Link] = 'p1'
)
• Avec jointure
SELECT [Link]
FROM client C , vente V
WHERE [Link] = [Link]
AND [Link] = 'p1'
♥ De préférence, utiliser la jointure
IUT de Nice - Cours SGBD1 131
• Requêtes quantifiées
• Le prédicat EXISTS
Il permet de tester si le résultat d'une sous-requête est
vide ou non
Q17 Donner les noms des produits qui n'ont pas été acheté
SELECT [Link]
FROM produit P
WHERE NOT EXISTS
( SELECT *
FROM vente V
WHERE [Link] = [Link] )
Il permet de répondre à des questions quantifiées par
"pour tout..." : ∀x | P(x) ⇔ ¬ ( ∃x | ¬P(x) )
Q18 Donner les noms des produits qui ont été achetés par tous
les clients de Nice
SELECT [Link]
FROM produit P
WHERE NOT EXISTS
(
SELECT *
FROM client C
WHERE [Link] = 'Nice'
AND NOT EXISTS
(
SELECT *
FROM vente V
WHERE [Link] = [Link]
AND [Link] = [Link]
)
)
IUT de Nice - Cours SGBD1 132
• Le prédicat ALL ou ANY
Ils permettent de tester si un prédicat de comparaison
est vrai pour tous (ALL) ou au moins un (ANY) des
résultats d'une sous-requête
Q19 Donner les nos des clients ayant acheté un produit en
quantité supérieure à chacune des quantités de produits
achetées par le client 'c1'
SELECT [Link]
FROM vente V
WHERE [Link] >= ALL
(
SELECT [Link]
FROM vente W
WHERE [Link] = 'c1'
)
Q20 Donner les nos des clients ayant acheté un produit en
quantité supérieure à au moins l'une des quantités de
produits achetées par le client 'c1'
SELECT [Link]
FROM vente V
WHERE [Link] >= ANY
(
SELECT [Link]
FROM vente W
WHERE [Link] = 'c1'
)
IUT de Nice - Cours SGBD1 133
Les prédicats ALL et ANY sont redondants, ils peuvent
s'exprimer avec EXISTS
x ∆ ANY
( SELECT y
FROM t
WHERE p )
⇔
EXISTS
( SELECT *
FROM t
WHERE p AND x ∆ t.y )
x ∆ ALL
( SELECT y
FROM t
WHERE p )
⇔
NOT EXISTS
( SELECT *
FROM t
WHERE p AND NOT ( x ∆ t.y ) )
Où ∆ est un prédicat de comparaison (=, <>, <, <=, >, >=)
IUT de Nice - Cours SGBD1 134
• Expression des unions
SQL1 permet d'exprimer l'opération d'union en
connectant des SELECT par des UNION
Q21 Donner les nos des produits de marque IBM ou ceux
achetés par le client no 'c1'
SELECT [Link]
FROM produit P
WHERE [Link] = 'IBM'
UNION
SELECT [Link]
FROM vente V
WHERE [Link] = 'c1'
L'union élimine les doublons, pour obtenir les
doublons il faut spécifier ALL après UNION
UNION est une opération binaire, on peut écrire :
(x UNION y) UNION z ou x UNION (y UNION z)
Les parenthèses sont nécessaires dans certains cas,
par ex. :
(x UNION ALL y) UNION z
n'est pas équivalent à
x UNION ALL (y UNION z)
IUT de Nice - Cours SGBD1 135
• Fonctions de calculs
SQL fournit des fonctions de calcul opérant sur
l'ensemble des valeurs d'une colonne de table
COUNT nombre de valeurs
SUM somme des valeurs
AVG moyenne des valeurs
MAX plus grande valeur
MIN plus petite valeur
Q22 Donner le nombre total de clients
SELECT COUNT ( IdCli )
FROM client
Q23 Donner le nombre total de clients ayant acheté des
produits
SELECT COUNT ( DISTINCT IdCli )
FROM vente
On peut faire précéder l'argument du mot clé
DISTINCT pour indiquer que les valeurs redondantes
doivent être éliminées avant application de la fonction
IUT de Nice - Cours SGBD1 136
La fonction spéciale COUNT (*) compte toutes les
lignes dans une table
Les valeurs nulles ne sont pas prises en compte, sauf
pour COUNT(*)
Si l'argument est un ensemble vide, COUNT renvoie
la valeur 0, les autres fonctions renvoyant la valeur
NULL
Exemples :
Q24 Donner le nombre total de 'PS1' vendus
SELECT SUM ( [Link] )
FROM vente V , produit P
WHERE [Link] = [Link]
AND [Link] = 'PS1'
Q25 Donner les noms des produits moins chers que la
moyenne des prix de tous les produits
SELECT [Link]
FROM produit P1
WHERE [Link] <
(
SELECT AVG ( [Link] )
FROM produit P2
)
Cet exemple montre un "singleton select " pour
calculer la moyenne des prix
IUT de Nice - Cours SGBD1 137
• La clause GROUP BY
La clause GROUP BY permet de partitionner une table
en plusieurs groupes
Toutes les lignes d'un même groupe ont la même
valeur pour la liste des attributs de partitionnement
spécifiés après GROUP BY
Les fonctions de calcul opèrent sur chaque groupe de
valeurs
Exemples :
Q26 Donner pour chaque référence de produit la quantité totale
vendue
SELECT [Link], SUM ( [Link] )
FROM vente V
GROUP BY [Link]
Q27 Donner la quantité totale achetée par chaque client (0 pour
ceux qui n'ont rien acheté)
SELECT [Link], SUM ( [Link] )
FROM client C NATURAL LEFT JOIN vente V
GROUP BY [Link]
IUT de Nice - Cours SGBD1 138
• La clause HAVING
La clause HAVING permet de spécifier une condition de
restriction des groupes
Elle sert à éliminer certains groupes, comme WHERE
sert à éliminer des lignes
Exemples
Q28 Donner les noms des marques dont le prix moyen des
produits est < 5000F
SELECT [Link], AVG ( [Link] )
FROM produit P
GROUP BY [Link]
HAVING AVG ( [Link] ) < 5000
Q29 Donner les références des produits achetés en qte > 10
par plus de 50 clients
SELECT [Link], AVG ( [Link] )
FROM vente V
WHERE [Link] > 10
GROUP BY [Link]
HAVING COUNT (*) > 50
IUT de Nice - Cours SGBD1 139
• La forme générale de SELECT
SELECT [DISTINCT] liste d'attributs, expressions
FROM liste de tables ou vues
WHERE qualification
GROUP BY attributs de partitionnement
HAVING qualification de groupe
ORDER BY liste de colonnes [ ASC | DESC ]
Exemple
Q30 Donner les nos, les prix, les marques et la quantité
maximum vendue de tous les produits IBM, Apple ou Dec
dont la quantité totale vendue est supérieure à 500 et dont
les quantités vendues sont > 10
SELECT [Link], [Link], [Link],
'Qte max vendue = ', MAX ( [Link])
FROM produit P , vente V
WHERE [Link] = [Link]
AND [Link] IN ('IBM', 'Apple', 'Dec')
AND [Link] > 10
GROUP BY [Link], [Link], [Link]
HAVING SUM ( V;qte ) > 500
IUT de Nice - Cours SGBD1 140
Du seul point de vue logique, on peut considérer que le
résultat d'un SELECT est construit suivant les étapes :
1. FROM
la clause FROM est évaluée de manière à produire
une nouvelle table, produit cartésien des tables dont
le nom figure après FROM
2. WHERE
le résultat de l'étape 1 est réduit par élimination de
toutes les lignes qui ne satisfont pas à la clause
WHERE
3. GROUP BY
le résultat de l'étape 2 est partitionné selon les
valeurs des colonnes dont le nom figure dans la
clause GROUP BY
dans l'exemple ci-dessus, les colonnes sont [Link], P;prix et
[Link] ; en théorie il suffirait de prendre uniquement
[Link] comme colonne définissant les groupes (puisque le
prix et la marque sont déterminés par le no de produit)
SQL oblige de faire apparaître dans la clause
GROUP BY toutes les colonnes qui sont mentionnées
dans la clause SELECT
4. HAVING
les groupes ne satisfaisant pas la condition HAVING
sont éliminés du résultat de l'étape 3
5. SELECT
chacun des groupes génère une seule ligne du
résultat
IUT de Nice - Cours SGBD1 141
La commande INSERT
La commande INSERT permet d'ajouter de nouvelles
lignes à une table
INSERT
INTO table [ (liste de colonnes) ]
{VALUES (liste de valeurs) | requête}
Dans le cas où la liste de colonnes n'est pas spécifiée
tous les attributs de la table cible doivent être fournis
dans l'ordre de déclaration
Si seulement certaines colonnes sont spécifiées, les
autres sont insérées avec la valeur NULL
Une insertion à partir d'une requête permet d'insérer
plusieurs lignes dans la table cible à partir d'une autre
table
IUT de Nice - Cours SGBD1 142
• Insertion d'une seule ligne
Q31 Ajouter le client ('c100', 'Duduche', 'Nice') dans la table
client
INSERT
INTO client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')
• Insertion de plusieurs lignes
Q32 Ajouter dans une table « temp » de même schéma que la
table Vente, toutes les ventes qui sont antérieures au 01-
Jan-1994
INSERT
INTO temp (IdCli, IdPro, date, qte)
SELECT V.no_cli, [Link], [Link], [Link]
FROM vente V
WHERE [Link] < '01-jan-1994'
IUT de Nice - Cours SGBD1 143
La commande UPDATE
La commande UPDATE permet de changer des valeurs
d'attributs de lignes existantes
UPDATE table
SET liste d'affectations
[ WHERE qualification ]
L'absence de clause WHERE signifie que les
changements doivent être appliqués à toutes les
lignes de la table cible
Exemples
Q33 Augmenter de 20% les prix de tous les produits
UPDATE produit
SET prix = prix * 1.2
Q34 Augmenter de 50% les prix des produits achetés par des
clients de Nice
UPDATE produit
SET prix = prix * 1.5
WHERE EXISTS
(
SELECT *
FROM vente V , client C
WHERE [Link] = [Link]
AND [Link] = 'Nice'
)
IUT de Nice - Cours SGBD1 144
La commande DELETE
La commande DELETE permet d'enlever des lignes
dans une table
DELETE
FROM table
[ WHERE qualification ]
L'absence de clause WHERE signifie que toutes les
lignes de la table cible sont enlevées
Exemples
Q35 Supprimer les ventes antérieures au 01-jan-1994
DELETE
FROM vente
WHERE date < '01-jan-1994'
Q36 Supprimer les ventes des clients de Nice antérieures au
01-mar-1994
DELETE
FROM vente
WHERE date < '01-mar-1994'
AND IdCli IN
(
SELECT [Link]
FROM client C
WHERE [Link] = 'Nice'
)
IUT de Nice - Cours SGBD1 145
4 Contrôle des données
Contrôle des accès concurrents
La notion de transaction
Une transaction est une unité logique de traitement qui
est soit complètement exécutée, soit complètement
abandonnée
Une transaction fait passer la BD d'un état cohérent à
un autre état cohérent
Une transaction est terminée
- soit par COMMIT
- soit par ROLLBACK
IUT de Nice - Cours SGBD1 146
La commande COMMIT
La commande COMMIT termine une transaction avec
succès ; toutes les mises à jour de la transaction sont
validées
On dit que la transaction est validée
Tous ses effets sont alors connus des autres
transactions s'exécutant concurremment
La commande ROLLBACK
La commande ROLLBACK termine une transaction
avec échec ; toutes les mises à jour de la transaction
sont annulées (tout se passe comme si la transaction
n'avait jamais existé)
On dit que la transaction est annulée
Aucune des opérations effectuées par cette
transaction n'est connue des autres transactions
IUT de Nice - Cours SGBD1 147
Contrôle des droits d'accès
Chaque créateur d'une table est propriétaire de cette
table et obtient tous les droits d'accès à cette table
(i.e. les droits d'effectuer les opérations SELECT,
INSERT, UPDATE, DELETE)
Le propriétaire d'une table peut passer ses privilèges
sélectivement à d'autres utilisateurs ou à tout le
monde (PUBLIC)
La commande GRANT
La commande GRANT permet de passer des droits
d'accès à un utilisateur ou un groupe d'utilisateurs
GRANT privilèges ON table TO bénéficiaire
[WITH GRANT OPTION]
Les privilèges qui peuvent être passés sont :
• soit ALL (tous les privilèges)
• soit une liste de privilèges parmi :
• SELECT
• INSERT
• UPDATE [(liste de colonnes)]
l'omission de la liste de colonnes signifie toutes les
colonnes
• DELETE
IUT de Nice - Cours SGBD1 148
Le bénéficiaire peut être :
• soit PUBLIC (tous les utilsateurs)
• soit un utilisateur ou un groupe d'utilisateurs
L'option WITH GRANT OPTION permet de passer un
privilèges avec le droit de le transmettre
Exemples
GRANT SELECT ON produit TO PUBLIC
GRANT INSERT, UPDATE ON produit TO toto
Aucun utilisateur ne peut passer un privilège qu'il ne
détient pas
La commande REVOKE
La commande REVOKE permet de retirer des droits à
un utilisateur ou groupe d'utilisateurs
REVOKE privilèges ON table FROM bénéficiaire
IUT de Nice - Cours SGBD1 149
5 Les vues
Une vue est une table virtuelle calculée à partir des
tables de base par une requête
Une vue apparaît à l'utilisateur comme une table
réelle, cependant les lignes d'une vue ne sont pas
stockées dans la BD (uniquement sa définition est
enregistrée dans le DD)
Les vues assurent l'indépendance logique
Elles peuvent être utilisées pour cacher des données
sensibles, ou pour montrer des données statistiques
Ex.:
CREATE VIEW prix-caché AS
SELECT [Link], [Link], [Link]
FROM produit P
CREATE VIEW stat-vente ( IdPro, tot-qte )
AS SELECT [Link], SUM ( [Link] )
FROM vente V
GROUP BY [Link]
IUT de Nice - Cours SGBD1 150
La commande CREATE VIEW
La commande CREATE VIEW crée la définition d'une
vue
CREATE VIEW vue [(liste de colonnes)]
AS requête [ WITH CHECK OPTION ]
Ex.:
CREATE VIEW produitIBM ( no, nom, prx )
AS SELECT [Link], [Link], [Link]
FROM produit P
WHERE [Link] = 'IBM'
Les données des tables de bases peuvent être
modifiées dans certains cas au travers d’une vue,
mais cela n’est pas toujours possible
L'option WITH CHECK OPTION permet de vérifier que
les lignes insérées dans une table de base au-travers
d'une vue vérifient les conditions exprimées dans la
requête. Cela permet d'imposer des contraintes
d'intégrité lors des mises à jour au travers de la vue
IUT de Nice - Cours SGBD1 151
Intérêt des vues
Indépendance logique
Le concept de vue permet d'assurer une indépendance des
applications vis-à-vis des modifications du schéma
Simplification d'accès
Les vues simplifient l'accès aux données en
permettant par exemple une pré-définition des
jointures et en masquant ainsi à l'utilisateur l'existence
de plusieurs tables
Ex. :
La vue qui calcule les moyennes générales pourra
être consulté par la requête :
SELECT * FROM Moyennes
Confidentialité des données
Une vue permet d'éliminer des lignes sensibles et/ou
des colonnes sensibles dans une table de base
IUT de Nice - Cours SGBD1 152
IUT de Nice - Cours SGBD1 153
III Sécurité
Protection des données contre les accès non autorisés
Contrôle d'accès ou autorisation
Les contrôles d'accès vérifient l'identité des usagers qui
se présentent et en conséquence leur assignent des
droits d'accès sur tel ou tel ensemble de données.
Autorisation (GRANT en SQL)
Tout usager qui a le droit de transmettre des privilèges
sur un objet peut utiliser la commande GRANT pour
transmettre ce privilège :
GRANT privilèges ON objet TO liste d'usagers
[WITH GRANT OPTION]
• Les privilèges peuvent être :
- lire (SELECT),
- insérer de nouveaux n-uplets (INSERT),
- modifier des valeurs (UPDATE),
- supprimer la totalité d'une relation (DROP),
- créer de nouvelles relations (CREATE).
• L'option facultative WITH GRANT OPTION permet au
donneur d'autoriser le receveur à transmettre à d'autres les
privilèges qu'il reçoit.
• Un usager peut recevoir un privilège de plusieurs sources
différentes.
IUT de Nice - Cours SGBD1 174
Révocation (REVOKE en SQL)
Tout usager ayant donné un privilège peut à tout
moment retirer ce privilège grâce à la commande
REVOKE :
REVOKE privilèges ON objet FROM liste d'usagers
• Les privilèges sur l'objet mentionné sont retirés au receveur à
moins que ce dernier ne les ait reçus d'une autre source,
indépendante.
• Cette procédure de révocation complique le mécanisme
d'autorisation car il faut appliquer recursivement les
procédures de révocation puisqu'un usager auquel on retire
un privilège a pu le transmettre à d'autres.
IUT de Nice - Cours SGBD1 175
Cryptographie
La cryptographie a pour but de stocker ou de transporter
l'information sous une forme telle que seuls les usagers
en possession de la clé de décryptage sont susceptibles
de la comprendre.
Texte cryptage décryptage Texte
en clair en clair
Texte chiffré
ou cryptogramme
clé de cryptage clé de décryptage
Cryptographie à clé publique
Elle fait appel à 2 clés
• une clé privée (gardée secrète par son détenteur) qui ne
sert qu'au décryptage
• une clé publique qui n'est utilisée que pour crypter
L'algorithme de cryptage C et l'algorithme de décryptage
sont choisis de telle sorte que le calcul de D soit très
complexe même si l'on connaît complètement C
Ex.: Paul souhaite envoyer le message M à Jacques.
• Paul utilise la clé publique Cjacques de Jacques pour
crypter le message qu'il transmet à Jacques.
• Jacques déchiffre le message reçu en lui appliquant
Djacques(Cjacques(M)) , personne d'autre n'est capable
de déchiffrer le message Cjacques(M).
IUT de Nice - Cours SGBD1 176
L'algorithme du MIT
1. choisir 2 nombres premiers, p et q, chacun plus grands que
10100
2. calculer n=p.q et z=(p-1)(q-1)
3. choisir un nombre d premier avec z
4. chercher un nombre e tel que e.d=1(modz)
Découper le texte en une suite de blocs de telle sorte que chaque bloc
de texte en clair M soit un nombre tel que 0<=M<n
pour crypter : C = Me(mod n) la clé publique = (e,n)
pour déchiffrer : D = Cd (mod n) la clé privée = d
La sécurité de la méthode réside dans la difficulté à décomposer de très
grands nombres en facteurs premiers.
Ex.:
p=3, q=11, n=33, z=20, d=7, e=3
Texte en clair N I C E
M 14 9 3 5
M3 2744 729 27 125
Texte chiffré C=M3(mod 33) 5 3 27 26
C7 78125 2187 - -
C7(mod 33) 14 9 3 5
Texte en clair N I C E
IUT de Nice - Cours SGBD1 177
IV Intégrité
Contrôle de la validité des données
Contrainte d’intégrité
Une contrainte d'intégrité est une assertion qui doit être
vérifiée par des données à des instants déterminés.
• Les contraintes d'intégrité permettent de préciser
davantage la partie intentionnelle (sémantique) de la
base de données.
• Une base de données est cohérente vis à vis des
contraintes qui sont exprimées, si ces contraintes sont
respectées par les données de la base.
IUT de Nice - Cours SGBD1 178
Gestion des contraintes d'intégrité
Expression des contraintes
L'écriture des différents types de CI est prévue dans
de nombreux langages
Par exemple la clause CHECK de SQL/ORACLE
Vérification des contraintes
Les CI sont vérifiées lors des mises à jour (en fin de
transaction)
C'est très coûteux en temps machine, il est
essentiel de pouvoir vérifier ces contraintes de
manière efficace
Violation des contraintes
Une mise à jour qui provoque la violation d'une CI
est refusée
L'intégrité de la base de données est préservée par
le SGBD
IUT de Nice - Cours SGBD1 179
Utilisation des déclencheurs (trigger)
Un déclencheur (trigger) permet de définir un ensemble
d’actions qui sont déclenchées automatiquement par le
SGBD lorsque des mises à jour sont effectuées.
• Les actions sont enregistrées dans la base et plus
dans les programmes d’application
• Cette notion n’est pas encore spécifiée dans SQL 2
• Elle est présente dans les principaux SGBD (Oracle,
Sybase, DB2, SQL Server)
IUT de Nice - Cours SGBD1 180