Vous êtes sur la page 1sur 98

SYSTEMES D’INFORMATION

Système de Gestion de Base de Données

  
Dr. Saïd ECH CHADI

1
Introduction aux Base de données

2
Dès le début de l'informatique,on Aujourd’hui, la tendance actuelle
a voulu construire des systèmes est la gestion de grandes
pour effectuer des calculs quantités d'informations. Cela
(équations différentielles, calcul revient à stocker des données et
matriciel, ... ). manipuler ces données.

3
Fonctionnalités d'un SGBD

Stocker les données (BD) - manipuler les données


(SGBD).

 Gestion du stockage : faire face à des tailles énormes de données.


 Persistance:: Les données «survivent» aux programmes qui les
Persistance
créent.
 Fiabilité : Mécanismes de reprise sur pannes (logiciel ou matériel)
 Sécurité - Confidentialité : Droits d'accès aux données
 Cohérence : Contraintes d'intégrité contrôle de concurrence: Conflits
d'accès. Répercussions sur la cohérence
 Interfaces homme – machine : Convivialité + différents types
d'utilisateurs
 Distribution : Données stockées sur différents sites
 Optimisation : Transferts MC
MC--MS

4
Architecture fonctionnelle d'un
SGBD
Niveau physique
Gestion de MS, de concurrence, de la fiabilité, transferts
MG--MS, structure d'index, exécution des programmes
MG
objet, optimiseur de requêtes

Niveau logique
Sécurité (confidentialité), Intégrité (en partie)

Niveau externe
Environnement de programmation, Interfaces graphiques
5
Instance et schéma

Schéma: C’est la structure logique de la


base de données.
Exemples : Ensembles de clients, de produits et de
fournisseurs.

Instance : C’est le contenu effectif de la


base de données à un instant donné.

6
Principes de base

Indépendance physique: Les


applications manipulant la base au niveau
logique ne doivent pas être réécrites si la
structure physique est modifiée.

Indépendance logique : Une


modification au niveau logique n’implique
pas forcement une modification des
applications utilisant le niveau externe.

7
Utilisateurs d'un SGBD

Le SGBD offre deux types de langages :

 LDD: Définition des données (schéma)

 LMD: Manipulation des données (requête


et mise à jour)

8
Utilisateurs d'un SGBD

 Administrateur:
Définition du schéma logique, définition des structures
de stockage et des méthodes d'accès, autorisations,
spécifications des contraintes, maintenance de la
performance…
 Concepteur et programmeur d'applications
Généralement, il est informaticien, il connaît bien le
SGBD et il connaît au moins le LMD et un ou
plusieurs langages de programmation.
 Utilisateur "naïf"
Secrétaire, caissière, ...
9
Conception d'une BD

On peut la découper en plusieurs étapes :

1. Analyse des besoins


2. Description conceptuelle
3. Conception logique (schéma logique)
4. Conception physique

10
Architecture d'un SGBD

Requêtes

Optimisation et exécution
des requêtes

Opérateurs relationnel
Fichiers et méthodes
d'accès Ces 3 modules tiennent
Gestionnaire du tampon compte de la concurrence et
de la reprise sur panne
Gestionnaires des disques

BD

11
INTRODUCTION
AU
MODELE
RELATIONNEL

12
Structure d’une B.D.
Relationnelle
Une relation est un ensemble de n-n-uplets (ou tuples) de la
forme <a1,... an> avec ai ∈ Ai.

Exemple : On a trois ensembles : Nom, Num_Cte et Rue avec


Nom = {Ahmed, Rachid, Ali}
Num_Cte = {123, 124, 235 , 226}
Rue = {Neuve, vieille, Courte }
Alors
{<Rachid, 123, Neuve >, <Rachid, 124, Neuve>, <Ali, 235, Neuve >,
<Ahmed, 123, Vieille> }
est une relation sur Nom x Num_Cte x Rue

13
Schéma de relation

 Une table est une relation (au sens mathématique) qui a un


nom

 A1,,…. ,An sont des attributs

 R(A1,,... ,An) est un schéma de relation.


relation.

 On note Att (R) pour désigner l'ensemble des attributs de R.

L'arité
L'arité de R est la cardinalité de Att(R).

Le domaine de Ai (noté dom(Ai)


dom(Ai))) est l'ensemble des valeurs
associées à Ai. Cet ensemble peut être fini ou non

14
Instance de relation

Emp Nom Num_Cte Rue


Ahmed 124 Neuve
Rachid 235 Neuve
Ali 123 Vieille

Att(Emp) = {Nom, Num_Cte Rue}


Arité(Emp) = 3
Dom(Num_Cte) = les entiers naturels (infini)
Dom(Nom) = chaînes de moins de 20 caractères (fini)

15
Langages de requête
Ce sont les langages qui permettent « d'interroger »
la BD.

Langages relationnels "purs"


 Algèbre relationnelle
 Calcul relationnel par n-
n-uplet
 Calcul relationnel par domaine

Langages pratiques
 SQL (Structured Query Language)
 QUEL (Query Language)
 SEQUEL (Structured English as a Query Language)
 QBE (Query By Example)
16
ALGEBRE RELATIONNELLE

17
On peut la définir en six opérations de base dont certaines
sont unaires, d'autres sont binaires :

 Projection
 Sélection
 Union
 Différence
 Produit cartésien
 Renommage
18
Projection
πA1 ,...,Ak (r) où r est le nom de relation et ∀1 ≤ i ≤ k Ai ∈ Att(r).

Exemple de projection :
On veut extraire les noms des employés de la relation «Emp» ci-dessous :

Emp Nom Num_Cte Rue


Ahmed 124 Neuve
Rachid 235 Neuve
Ali 123 Vieille

π Nom (Emp) = Ahmed, Rachid, Ali

19
Sélection

σ Cond (r) où r est le nom d'une relation et Cond est une


condition de la forme

1. Atti θ Attj ou Atti θ constante avec θ ∈ {< , ≤ , =, ≥ , >, ≠ }, ou


bien
2. une conjonction (∧) ou une disjonction (V) de conditions

Le résultat = une relation qui contient tous les n-uplets de r qui satisfont
la condition Cond

20
Exemple de sélection :
On veut avoir les informations concernant les employés
dont le nom est Dupont

Emp Nom Num_Cte Rue


Ahmed 124 Neuve
Ahmed 235 Neuve
Ali 123 Vieille

σ (Nom=Ahmed) = Nom Num_Cte Rue


Ahmed 124 Neuve
Ahmed 235 Neuve

21
Union, Différence et Intersection

Opérations ensemblistes classiques


Notation : r U s; r - s; r ∩ s
r U s = {t | t ∈ r ou t ∈ s}
r - s = {t | t ∈ r et t ∉ s}
r ∩ s = {t | t ∈ r et t ∈ s}
Opérations binaires
Il faut que Att(r) = Att(s)

22
Exemple

r A B s A B
α 1 α 2
α 2 β 3
β 1

r-s= A B r∪s= A B r∩s= A B


α 1 α 1 α 2
β 1 α 2
β 1
β 3

23
Produit cartésien

rxs avec r x s = { tv | t ∈ r et v ∈ s }
Où tv est la concaténation des tuples t et v.
Cette opération n'est pas définie si Att(r) ∩ Att(s) ≠ 0.
Att(r x s) = Att(r) U Att(s)

24
Exemple de Produit cartésien
A B C D E
r s
α 1 α 10 +
β 2 β 10 -

A B C D E
rxs
α 1 α 10 +
α 1 β 10 -
β 2 α 10 +
β 2 β 10 -

25
Renommage

ρ Atti → Att'i (r) .

Ceci permet de renommer l'attribut Atti par


Att’i.
Le résultat est la relation r avec un nouveau
schéma

26
Exemple de Renommage

r A
10

20

ρ A→
→B (r) = r
B
10

20

27
Composition des opérateurs

On peut appliquer un opérateur de l'algèbre au


résultat d'une autre opération.

Exemple : πA (σ B= 20(r)).
B=20

On dit que l'algèbre relationnelle est un langage


fermé car chaque opération prend une ou deux
relations et retourne une relation.

28
Soient les schémas de relation Tit(Id, Nom, Adresse) et Cte(Num, Solde,
Id_Tit). Le compte de numéro Num appartient au client identifié par
Id_Tit. On veut avoir (1
(1) le numéro, ((2
2) le solde et ((3
3) le nom du
titulaire de chaque compte débiteur.

Id Nom Adresse Num Solde Id_Tit


A25 Ahmed Rue neuve 120 25234.24 A25
B212 Ali Rue vieille 135 -100 A25
275 230 B212

1. Cte x Tit retourne une relation qui associe à chaque tuple de Cte, tous les tuples de Tit.

2. σ Id=Id_Tit
Id=Id_Tit (Cte x Tit) élimine les tuples où le compte n'est pas associé au bon titulaire.

3. σ So1de < 0 (σ Id=Id_Tit(Cte x Tit)) retient les comptes débiteurs


Id=Id_Tit

4. π Nom, Num
Num,, Solde (σ Solde<0 (σ Id=Id_Tit (Cte x Tit))) élimine les attributs non demandés
Id=Id_Tit

29
Jointure

r ixi s Att(
Att(rr ixi s) = Att(r) U Att(s)
Résultat :
Soient tr ∈ r et ts ∈ s. trts ∈ r ixi s SSI ∀A ∈

Att(r) ∩ Att(s) tr.A = ts.A

30
Exemple de Jointure
r A B s B C r ixi s = A B C
α 10 10 + α 10 +
α 15 1 - β 1 -
β 1

le même résultat peut être obtenu comme suit

1. temp1 :=ρ B→B1(s)


2. temp2 := r x temp1
3. temp3 := σ B=B1 (temp2)
4. res := π A,B,C(temp3)

 La jointure n'est pas une opération de base de l'algèbre relationnelle

31
CALCUL RELATIONNEL
par n-
n-uplet

32
 Les requêtes sont de la forme {t | P(t)} .

 C'est l'ensemble des n-


n-uplets tels que le prêdicat P(t) est
vrai pour t.

 t est une variable n-


n-uplet et t [A] désigne la valeur de
l'attribut A dans t

 t ∈ r signifie que t est un n-


n-uplet de r

 P est une formule de la logique de premier ordre

33
Rappel sur le calcul des prédicats

 Des ensembles d'attributs, de constantes, de


comparateurs {<, … }

 Les connecteurs logiques 'et' ∧, ''ou'


ou' V et la
négation ¬

 Les quantificateurs ∃ et ∀
 ∃ t ∈ r (Q(t)) : Il existe un tuple t de r tel que Q est vrai

 ∀t ∈ r(Q(t)) : Q est vrai pour tout t de r

34
Exemples de requêtes
Film (Titre, Réalisateur, Acteur) instance f
Programme (Nomciné, Titre, Horaire) instance p
f contient des infos sur tous les films et p concerne le programme à Casablanca

Les films réalisés par Spielberg


{t | t ∈ f ∧ t [Réalisateur] = " Spielberg " }

Les films où Cage et Travolta jouent ensembles


{ t | t ∈ f ∧ ∃ s ∈ f (t[Titre] = s[Titre] ∧ t[Acteur] = « Cage » ∧ s[Acteur] = «Travolta ») }

Les titres des films programmés à Casablanca


{t | ∃ s ∈ p (t[Titre] = s[Titre]) }

Les films programmés à Megarama mais pas au rif


{t | ∃ s ∈ p ( s[Titre] = t[Titre] ∧ s[NomCiné] = « Megarama » ∧
¬ ∃ u ∈ p ( u[NomCiné] = « Rif" ∧ u[Titre] = t[Titre] )) }

Les titres de films qui passent à Megarama ainsi que leurs réalisateurs
{ t | ∃ s ∈ p (∃ u ∈ f (s[NomCiné] = « Megarama » ∧
s[Titre] = u[Titre] = t[Titre] ∧ t[Réal] = u[Réal])) }

35
Expressions "non saines"

Il est possible d'écrire des requêtes en calcul qui retournent


une relation infinie.

Exemple :
Soit NumCte(Num) avec l'instance n et la requête {t | ¬t ∈ n} i.e les
numéros de compte non recensés.
Si on considère que le Dom(Num) = N, alors la réponse à cette
requête est infinie.
Une requête est saine si quelle que soit l'instance de la base dans
laquelle on l'évalue, elle retourne une réponse finie. Dépendance du
domaine.
36
Calcul relationnel par domaine

Les requêtes sont de la forme : { < x1,…,


,…,x
xn > | P(x
P(x11,,..., xxn
n )}

Les xi représentent des variables de domaine.


P(x1 ,... , xn)
xn) est une formule similaire à celles qu'on trouve dans la
logique des prédicats.

Exemple : Les titres de films programmés à Megarama de Casablanca


{<t> | ∃ <nc, t, h> ∈ p( nc = "UGC") }

37
Relation entre les 3 langages

 Toute requête exprimée en algèbre peut être exprimée


par le calcul.

 Toute requête "saine" du calcul peut être exprimée par


une requête de l'algèbre.

 Les 3 langages sont donc équivalents d'un point de vue


puissance d'expression.

 L'algèbre est un langage procédurale (quoi et comment)


alors que le calcul ne l'est pas (seulement quoi).

38
Arbres relationnels
Sélection Projection Produit cartésien

Jointure Union Différence

u -

39
LE LANGAGE SQL

40
 langage fourni avec tout SGBD relationnel
commercialisé. C'est un standard reconnu par
l'IS0
l'IS0 depuis 87 (standard donc portabilité).

 On en est à la version 2 (SQL


(SQL92
92)) et la version 3
est annoncée pour bientôt.

 SQL est un LDD et un LMD. Il est aussi utilisé


pour définir des vues, les droits d'accès,
manipulation de schéma physique…

41
Structure de base

Une requête SQL typique est de la forme


SELECT A1,, ... , An
FROM r1,... ,rm
WHERE P

Les Ai sont des attributs, les rj sont des noms de relations et P est un prédicat.
Cette requête est équivalente à π A1 ,…, An (σ P(r1 x … x rm))

42
La clause SELECT
La clause SELECT correspond à la projection de l'algèbre.
Les titres des films :
SELECT Titre
FROM film

L'utilisation de l'astérisque permet de sélectionner tous les attributs :


SELECT *
FROM film

SQL autorise par défaut les doublons. Pour le forcer à les éliminer, on
utilise la clause DISTINCT :
SELECT DISTINCT Titre
FROM film

SELECT peut contenir des expressions arithmétiques ainsi que le


renommage d'attributs :
SELECT Prix_HT * 1.206 AS Prix TTC
FROM produit
43
La clause WHERE

Elle correspond au prédicat de sélection dans l'algèbre. La condition porte sur


des attributs des relations qui apparaissent dans la clause SELECT

SELECT DISTINCT Titre


FROM film
WHERE Réalisateur = "Bergman" AND Acteur = "Stewart"

SQL utilise les connecteurs AND, OR et NOT


NOT.. Pour simplifier la clause
WHERE, on peut utiliser la clause BETWEEN.

SELECT Num
FROM compte
WHERE Solde BETWEEN 0 AND 10000

44
La clause FROM

Elle correspond au produit cartésien de l'algèbre.


Le titre et le réalisateur des films programmés à MegaRama de
Casablanca.

SELECT Titre, Réalisateur


FROM film, programme
WHERE film.titre = programme.titre AND programme.NomCiné =
« MegaRama »

La clause ORDER BY
SQL permet de trier les résultats de requête
SELECT *
FROM programme
WHERE NomCiné=“MegaRama"
ORDER BY Horaire ASC, Titre DESC

45
Les variables n-
n-uplets

Elles sont définies dans la clause FROM

SELECT Titre, Réalisateur


FROM film AS f, programme AS p
WHERE f.titre = p.titre AND p.NomCiné = « MegaRama"

Soit Emp (Id, Nom, Id_chef)


SELECT el.Nom, e2
e2.Nom AS Nom_Chef
FROM emp el, emp e2 e2
WHERE el.Id_chef = e2
e2.Id

46
Opérateurs ensemblistes
SELECT ...

UNION/ INTERSECT/ EXCEPT
SELECT ...

éliminent les doublons,


pour pouvoir les garder, utiliser à la place INTERSECT ALL...
ALL...

Si t apparaît m fois dans r et n fois dans s alors il apparaît :

 m + n fois dans r UNION ALL s


 min(m,
min( m, n) fois dans r INTERSECT ALL s
 max(0
max( 0, m - n) fois dans r EXCEPT ALL s

47
Les fonctions d’agrégats
AVG : la valeur moyenne de l'ensemble
MIN : la valeur minimale
MAX : la valeur maximale
SUM : le total des valeurs de l'ensemble
COUNT : le nombre de valeur dans l'ensemble

SELECT COUNT(Titre)
COUNT(Titre) FROM Programme

Cette requête retourne le nombre de films programmés à Casablanca.


Attention : Un même titre peut être compté plusieurs fois s'il est
programmé à des heures différentes et dans des salles différentes.

SELECT COUNT(
COUNT( DISTINCT Titre
Titre)) FROM Programme

48
Agrégats et GROUP BY
Le nombre de films programmés dans chaque salle :

SELECT NomCiné, COUNT (DISTINCT Titre


SELECTNomCiné, Titre))
FROM Programme
GROUP BY NomCiné

Les attributs qui apparaissant dans la clause SELECT en dehors des agrégats
doivent être associés à la clause GROUP BY

Agrégats et la clause HAVING


Les salles où sont programmés plus de 3 films :

SELECT NomCiné, COUNT(DISTINCT Titre)


FROM Programme
GROUP BY NomCiné
HAVING COUNT (DISTINCT Titre) > 3

Le prédicat associé à la clause HAVING est testé après la formation des


groupes définis dans la clause GROUP BY.

49
Requêtes imbriquées

SELECT--FROM
SELECT FROM--WHERE ≡ sous requête

L’imbrication apparaît au niveau de la clause WHERE de la première requête.

Les films programmés à MegaRama non programmés au Rif

SELECT Titre
FROM Programme
WHERE NomCiné=“MegaRama" and Titre NOT IN (
SELECT Titre
FROM Programme
WHERE NomCiné =“Rif" )

50
Trouver les comptes dont les soldes sont supérieurs aux soldes des
comptes de Ahmed :

Compte (Num, Solde, NomTit)


SELECT *
FROM Compte
WHERE Solde > ALL (
SELECT Solde
FROM Compte
WHERE NomTit = « Ahmed" )

En remplaçant ALL par SOME


SOME,, on obtient les comptes dont les soldes
sont supérieur au solde d'au moins un compte de Ahmed.

51
Les cinémas qui passent tous les films programmés à
MegaRama

SELECT NomCiné
FROM programme pi
WHERE NOT EXISTS (
(SELECT DISTINCT Titre
FROM programme
WHERE NomCiné = “MegaRama")
“MegaRama")
EXCEPT
(SELECT DISTINCT Titre
FROM programme p2p2
WHERE pl.NomCiné = p2
p2.NomCiné
.NomCiné))
))

52
Test d'absence de doublons

La clause UNIQUE permet de tester Si une sous requête


contient des doublons.
Les titres de films programmés dans une seule salle et un
seul horaire :

SELECT p.Titre
FROM programme p
WHERE UNIQUE (
SELECT pl.Titre
FROM programme p1 p1
WHERE p.Titre = pl Titre)
Titre)

53
Les relations dérivées
Titulaire (Nom, Adresse)
Compte (Num, Solde, NomTit)

Donner le solde moyen des comptes de chaque personne ayant un


solde moyen > à 1000

SELECT NomTit, SoldeMoyen


FROM (
SELECT NomTit, AVG
AVG(Solde)
(Solde)
FROM Compte
GROUP BY NomTit )
AS Result (NomTit, SoldeMoyen)
WHERE SoldeMoyen > 1000

Noter qu'on aurait pu exprimer cette requête en utilisant la clause


HAVING
54
Sous--requêtes renvoyant plusieurs lignes
Sous
Opérateurs permettant d’utiliser de telles sous-
sous-requêtes :
 a IN (sous requete
requete))
vrai si a apparaît dans le résultat de sous requete.
requete.

 a ?? ANY (sous requete


requete))
Où ?? peut être {=, <,>,<=,>=}
vrai si il existe un b parmi les lignes renvoyées par sous requete tel que a ?? b soit
vrai.

 a ?? ALL (sous requete


requete))
 o`u ?? peut être {=, <,>,<=,>=}
 vrai si pour toutes les lignes b renvoyées par sous requete,
requete,
 a?? b est vrai.

 EXISTS (sous requete


requete))
 vrai si le résultat de sous requete n’est pas vide.

55
Exemple 1
Schéma :
Employe(Nom,
Employe (Nom, Num,
Num, Fonction, Num sup, Embauche, Salaire, Num
Dept))
Dept
Quels sont les employés, donnés avec leur salaire, gagnant plus que
tous les employés du département 20 ?

SELECT Nom, Salaire


FROM Employe
WHERE Salaire > ALL (SELECT Salaire
FROM Employe
WHERE Num dept = 20)
20) ;

56
Exemple 2
 Schéma :
Employe(Nom, Num,
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept
Dept))
Quels sont les employés qui ont un subalterne ?

SELECT Nom
FROM Employe Chef
WHERE EXISTS (SELECT Nom
FROM Employe
WHERE Employe.Num sup = Chef.Num
Chef.Num)) ;

57
Sous--requête avec un résultat à plusieurs colonnes
Sous

On peut utiliser la notation (a, b, . . .) pour former un n-


n-uplet à comparer
avec le résultat de la sous-
sous-requête :
Schéma :
Employe(Nom,
Employe (Nom, Num,
Num, Fonction, Num sup, Embauche, Salaire, Num Dept Dept))
Quels sont les employés ayant même fonction et même supérieur
que ’Sadik’ ?

SELECT Nom
FROM Employe
WHERE (Fonction, Num sup) = (SELECT Fonction, Num sup
FROM Employe
WHERE Nom=’Sadik’) ;

58
Sous--requête imbriquées
Sous

Il est possible d’imbriquer les sous-


sous-requêtes :
Employe(Nom,
Employe (Nom, Num,
Num, Fonction, Num sup, Embauche, Salaire, Num Dept
Dept))
Donner le nom et la fonction des employés du département 20 ayant même
fonction qu’une personne du département de ’Fellahi
’Fellahi’.’.

SELECT Nom, Fonction


FROM Employe
WHERE Num dept = 20
AND fonction IN
(SELECT Fonction
FROM Employe
WHERE Num dept = (SELECT Num dept
FROM Employe
WHERE Nom = ’’Fellahi
Fellahi’))
’)) ;

59
Déclaration de tables et
contraintes

60
Déclaration de tables
Pour créer une table on utilise la commande CREATE TABLE. Voici sa
syntaxe :
Create table < nom de table > ( { < element de table > } ) ;
la définition des éléments de table :

< élément de table > : = < définition attribut > / < contrainte de
table >

Create table < nom de table >


(< nom_attribut1 > < type attribut1 > < contrainte attribut1 ,<
>nom_attribut2 > < type attribut2 > < contrainte attribut >,….. )
< contrainte de table <
Il y a des règles à respecter :
· Chaque table de la base de donnée
possède un nom unique
· Une table est composée d'au moins un
attribut
· Chaque attribut au sein d'une table
possède un nom unique
· On peut mettre des contraintes sur les
attributs lors de la création de table
Exemple :
Create table Commande ( numcom
NUMERIC (5), datecomm DATE)
Déclaration d'un attribut
< nom attribut > < type_données >
[default <valeur> ] [contrainte_attribut]
Type de donnée Syntaxe Commentaires
Alphanumérique (CHAR(n Chaîne de caractères de longueur fixe n
Alphanumérique (VARCHAR(n Chaîne de n caractères maximums
Numérique ([NUMERIC(n,[d .Nombre de n chiffres avec en option le nombre de décimales
Numérique INTEGER Entier signé de 32 bits
Numérique SMALLINT Entier signé de 16 bits
Numérique FLOAT (Nombre réel (avec virgule
Temps DATE Date au format : JJ/MM/AA
Temps TIME Heure au format : hh : mm :ss.ml
Temps TIMESTAMP Date et heure
La valeur par défaut : default
La clause DEFAULT doit être suivie par la valeur à
affecter. Cette valeur peut être un des types suivants:
 constante numérique
 constante alphanumérique (chaîne de caractères)
 le mot clé USER (nom de l'utilisateur)
 le mot clé NULL
 le mot clé CURRENT_DATE (date de saisie)
 le mot clé CURRENT_TIME (heure de saisie)
 le mot clé CURRENT_TIMESTAMP (date et heure de
saisie)
Les contraintes d'attribut
Il est possible d'exiger des contraintes sur les attributs d'une
table. Voici la liste de ces contraintes :
· La valeur nulle impossible : NOT NULL
· L'unicité : UNIQUE . Il existe aussi PRIMARY KEY qui
équivaut à l'association de NOT NULL+ UNIQUE mais on
ne peut mettre qu'une clé primaire (PRIMARY KEY) par
table.
· La contrainte référentielle qui pose la contrainte sur le fait
qu'un attribut doit exister dans une autre table. La syntaxe
est donc :
REFERENCES <table référencée> [ <attribut référencé > ]
· La contrainte générale : sa syntaxe est : CHECK
<condition > . La condition peut être simple (exemple :
CHECK BETWEEN 1 and 10) ou alors on peut être une
condition avec un ordre SELECT.
Exemple :
On veut créer la table des commandes comportant
3 attributs : le numéro de commande qui doit
être unique et

Create table COMMANDE (numcom NUMERIC


(5) PRIMARY KEY,
Datecom DATE,
Numfou
NUMERIC(5) REFERENCES FOURNISSEUR) ;
Les contraintes de tables
Lors de la déclaration d'une table, une fois après avoir
défini les attributs on peut rajouter des contraintes
spécifiques à la table. Voici la liste de ces contraintes :
L'unicité : sa syntaxe est UNIQUE / PRIMARY KEY (
<nom_attribut1>, < nom_attibut2 >,…)

Les clés étrangères (CONTRAINTES


REFERENTIELLES) :
FOREIGN KEY (< nom attribut référençant > )
REFERENCES < nom de table référencée >
[ <attributs référencé1>, <attribut référencé2>,… ]
[ partie trigger ]
Définition de PARTIE TRIGGER
 Les clés étrangères permettent de définir les colonnes
d'une table garantissant la validité d'une autre table.
Ainsi, il existe des éléments (appelés triggers, en
français gâchettes) permettant de garantir ces
contraintes appelées intégrité référentielle, c'est-à-dire
notamment de garantir qu'un nuplet utilisé à partir d'une
autre table existe réellement.
Ces triggers sont ON DELETE et ON UPDATE. On a
donc ON DELETE qui sert dans le cas où l'on voudrait
supprimer une donnée et ON UPDATE sert lorsque l'on
met à jour une donnée. La syntaxe de partie trigger est
donc :
 ON UPDATE <action>
ON DELETE <action>
Définition de ACTION
L'action permet de savoir quelle va être la
répercussion lors d'un effacement (delete) ou
d'une mise à jour (update)
Parmi les actions l'on a :
- CASCADE permet de répercuter ON
DELETE ou ON UPDATE en cascade sur les
autres attributs
- RESTRICT permet d'indiquer un message
d'erreur
- SET DEFAULT permet de mettre la valeur
par défaut
- SET NULL permet de mettre la valeur NULL
Contrainte générale : CHECK
<condition>
Exemple :
Create table Ligne
( numcomm NUMERIC(5),
numligne NUMERIC(5),
code_produit NUMERIC(5) NOT NULL,
qté NUMERIC(6) NOT NULL
PRIMARY KEY (numcomm, numligne)
FOREIGN
KEY (numcomm) REFERENCES COMMANDE
ON DELETE CASCADE
ON DATE CASCADE
FOREIGN
KEY (code_produit) REFERENCES PRODUIT
(code_produit)
Déclaration de domaine
Les domaines sont utilisés lors de la
définition des attributs de table. Voici la
syntaxe d'un domaine :
Create Domain < nom_domaine > As
<type de donnée>
[default <valeur> ] [ check <condition> ]
Exemple :
Create Domain acquisition As DATE
Default CURRENT_DATE
Ici CURRENT_DATE est une variable qui
donne la date du jour.
La déclaration de domaine sert à définir un
nouveau type de donnée que l'on utilisera
lors de la déclaration d'un attribut par
exemple.
Déclaration des assertions
Les assertions sont des expressions devant être
satisfaites lors de la modification de données
pour que celles-ci puissent être réalisées. Ainsi,
elles permettent de garantir l'intégrité des
données. Par contre la déclaration d'assertion
n'est prise en compte par tous les SGBD. Les
assertions permettent des contraintes multi-
tables.
La syntaxe pour déclarer une contrainte
d'intégrité :
Create assertion <nom_assertion> Check
<condition>
exemple
Create assertion PU_PV
Check ( NOT EXISTS (Select *
From LIGNE_CMD
Where lcd_pu <0.75 *
(Select art_pv

From ARTICLE

Where art_num = lcd_art))) ;

Voici la traduction de cette requête :


Il ne doit pas exister de ligne de commande inférieure à
75% du prix normal de vente.
La suppression de table

Une requête de destruction d'une table


provoque :
- la destruction des informations contenues
dans la table.
- la destruction du schéma de la relation.
(Aucune requête ne pourra être effectuer
sur cette table dans le futur)
¤ La syntaxe:
Drop Table < nom de table >
Modification de table
Ajout ou modification de colonne
ALTER TABLE nom_table {ADD/MODIFY} ([ ([nom_colonne
nom_colonne type
[contrainte], ...])
Ajout d’une contrainte de table
ALTER TABLE nom_table ADD [CONSTRAINT nom_contrainte]nom_contrainte]
contrainte La syntaxe de déclaration de contrainte est identique à
celle vue lors de la création de table.
Si des données sont déjà présentes dans la table au moment où la
contrainte d’intégrité est ajoutée, toutes les lignes doivent vérifier la
contrainte. Dans le cas contraire, la contrainte n’est pas posée sur la
table.
Renommer une colonne
ALTER TABLE nom_table RENAME COLUMN ancien_nom TO
nouveau_nom
Renommer une table
ALTER TABLE nom_table RENAME TO nouveau_nom
Déclaration de tables et
contraintes
Insertion de tuples (lignes)

Voici la syntaxe pour Insert avec la


clause Values :
Insert Into < Nom de table > [ <nom des attributs
>]
Values ( < valeur attribut1>, < valeur attribut 2>,
…)

Exemple : On veut insérer un nouvel employé qui


s'appelle Burton qui est Directeur, son
responsable est l'employé n°15, etc..
Insert Into EMPLOYES
Values ( 10, Burton, Directeur, 15, 01/13/88,
250000, NULL, 60 )
· Voici la syntaxe pour Insert avec la clause Select:
Insert Into < Nom de table > [ <nom des attributs > ]
Select < nom des attributs >
From < nom de table2>
Where < condition >

Exemple: On veut insérer le nom , la fonction , la salaire et


la commission des employés qui sont " directeur " ou
que leur commission soit supérieure à 25% de leur
salaire dans la table PRIMES.
Insert Into PRIMES (nomemp, fonction, sala, comm)
Select nomemp, fonction, sala, comm
From EMPLOYES
Where fonction = " directeur " or comm > 0.25*sala
Mise à jour de tuples
Pour la mise à jour des données, la modification on
utilise la commande UPDATE.
Voici sa syntaxe :

Update < nom de table >

Exemple : On veut augmenter le salaire de Rachid de


10%.
Update < EMPLOYES >
Set { sala = 1.1*sala }
Where nomemp = “Rachid "
Suppression de tuples
Pour supprimer un tuple dans une table on utilise
la commande DELETE.
Voici sa syntaxe :

Delete From < nom table >


Where < condition de recherché >

Exemple : On veut enlever l'employé Ahmed de la


table des PRIMES.
Delete From PRIMES
Where nomemp = " Ahmed "
Les Vues
Les vues
On définit une vue par une table virtuelle, c'est-à-dire dont
les données ne sont pas stockées dans une table de la
base de données, et dans laquelle il est possible de
rassembler des informations provenant de plusieurs
tables. On parle de "vue" car il s'agit simplement d'une
représentation des données dans le but d'une
exploitation visuelle. Le contenu de cette vue est défini
par une requête SQL.
Elles réalisent le niveau externe de l'architecture à 3
niveaux ANSI/SPARC.
La définition d'une vue est mémorisée dans la méta
base.
Déclaration
Create View < nom vue > [ {<liste des attributs> }
] As <requête SQL> [ With Check Option]

La clause facultative with check option permet de définir, lors


de la mise à jour de données via la vue, que la (les)
conditions de la clause where doit être vérifiée. Si elle n'est
pas présente, aucune vérification ne sera faite.
Avec cette clause, on peut insérer des lignes, mettre à jour
des colonnes, par l'intermédiaire d'une vue, si les conditions
du where sont respectées (à voir dans le G)
Pour détruire une vue :

Drop view <nom de vue >


Exemple

Create view EMPLOYES10 As


Select noemp, nomemp, fonction
From EMPLOYES
Where nodep = 10

Ici on crée une vue pour pouvoir faire des


requêtes uniquement sur les employés du
département 10. Donc ensuite on peut effectuer
des requêtes sur cette vue exactement de la
même manière qu'avec une table.
Avantages
Grâces aux vues on a de nombreux avantages :
 Perception plus proche des besoins des
utilisateurs.
 Dé-normalisation de la structure de la base de
données sans introduire de la redondance.
 Meilleure indépendance logique des
programmes par rapport aux données.
 Limiter les accès aux données.
 Simplification des requêtes utilisateurs.
 Regroupement de données au sein d'une entité.
Interrogation à travers des vues
Pour interroger une vue on procède exactement de la
même manière que pour une table. Voici un exemple
complet montrant la création d'une vue, une requête
sur cette vue et la requête sans la création de la vue.
On veut créer une table avec les gros consommateurs.

Create View GROSCONSO


As Select numconso, nom, prénom, adresse
From ABUS, CONSOMMATEUR
Where ABUS.numconso = ABUSnumconso and qte
> 10
Maintenant on veut le nom et prénom des
gros consommateurs qui habite à Safi.

Select nom, prénom


From GROSCONSO
Where adresse like “Safi";
Mise à jour à travers des vues
Si l'on veut vérifier que les données mises à
jour dans la vue sont bien les propriétés
demandées on rajoute la clause with
check option. Donc une fois cette clause
mise lors de la déclaration, on ne peut
mettre à jour les données seulement si
elles correspondent aux propriétés
demandées.
PRIVILÈGES D’ACCES A LA
BASE

91
GRANT
 GRANT privilège ON table/vue TO
utilisateur [WITH GRANT OPTION]

 SELECT,INSERT, UPDATE, DELETE,


ALTER, ALL

92
REVOKE
 REVOKE privilège ON table/vue FROM
utilisateur

 Reprise du privilège

93
LES TRANSACTIONS EN SQL

94
COMMIT

COMMIT — Valider la transaction en cours

COMMIT [ WORK | TRANSACTION ]


Description
COMMIT valide la transaction en cours. Tout le monde
peut désormais voir les modifications réalisées au cours
de la transaction. De plus, leur persistance est garantie
en cas d'arrêt brutal du serveur.

95
ROLLBACK

ROLLBACK — annule la transaction en cours

ROLLBACK [ WORK | TRANSACTION ]


Description
ROLLBACK annule la transaction en cours et toutes les
modifications effectuées lors de cette transaction.

96
ROLLBACK TO SAVEPOINT
ROLLBACK TO SAVEPOINT — annule les
instructions jusqu'au point de sauvegarde

ROLLBACK [ WORK | TRANSACTION ] TO


[ SAVEPOINT ] nom_pointsauvegarde
Description
Annule toutes les commandes qui ont été exécutées après
l'établissement du point de sauvegarde. Le point de
sauvegarde reste valide. Il est possible d'y d'y revenir
encore si cela s'avérait nécessaire.

97
SAVEPOINT
SAVEPOINT — définit un nouveau point de
sauvegarde à l'intérieur de la transaction en
cours

SAVEPOINT nom_pointsauvegarde
Description
SAVEPOINT établit un nouveau point de sauvegarde à
l'intérieur de la transaction en cours.
Un point de sauvegarde est une marque spéciale à l'intérieur
d'une transaction qui autorise l'annulation de toutes les
commandes exécutées après son établissement, restaurant
la transaction dans l'état où elle était au moment de
l'établissement du point de sauvegarde.
98

Vous aimerez peut-être aussi