Vous êtes sur la page 1sur 88

ANALYSE DES SYSTEMES D’INFORMATION

METHODOLOGIE MERISE
INITIATION AUX BASES DE DONNEES

  
ENSA – Safi
Dr. Saïd ECH CHADI
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 1
Introduction aux Base de données

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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
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-MS

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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
objet, optimiseur de requêtes

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

Niveau externe
Environnement de programmation, Interfaces graphiques
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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é.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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, ...
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 11
INTRODUCTION
AU
MODELE
RELATIONNEL

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 12
Structure d’une B.D.
Relationnelle
Une relation est un ensemble de 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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.

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

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

Le domaine de Ai (noté dom(Ai)) est l'ensemble des valeurs


associées à Ai. Cet ensemble peut être fini ou non

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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-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)
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 16
ALGEBRE RELATIONNELLE

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 18
Projection
A 1 ,...,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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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 -

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 26
Exemple de Renommage

r A
10

20

 AB (r) = r B
10

20

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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)).

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


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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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) le numéro, (2) le solde et (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 (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

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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 29
Jointure

r ixi s Att(r 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 31
CALCUL RELATIONNEL
par n-uplet

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 32
 Les requêtes sont de la forme {t | P(t)} .

 C'est l'ensemble des n-uplets tels que le prêdicat P(t) est


vrai pour t.

 t est une variable n-uplet et t [A] désigne la valeur de


l'attribut A dans t

 t  r signifie que t est un n-uplet de r

 P est une formule de la logique de premier ordre

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 33
Rappel sur le calcul des prédicats

 Des ensembles d'attributs, de constantes, de


comparateurs {<, … }

 Les connecteurs logiques 'et' , '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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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])) }

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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.
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 36
Calcul relationnel par domaine

Les requêtes sont de la forme : { < x1,…,xn > | P(x1,,..., xn )}

Les xi représentent des variables de domaine.


P(x1 ,... , 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") }

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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).

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 38
Arbres relationnels
Sélection Projection Produit cartésien

Jointure Union Différence

u -

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 39
LE LANGAGE SQL

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 40
 langage fourni avec tout SGBD relationnel
commercialisé. C'est un standard reconnu par
l'IS0 depuis 87 (standard donc portabilité).

 On en est à la version 2 (SQL92) 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…

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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))

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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. Pour simplifier la clause


WHERE, on peut utiliser la clause BETWEEN.

SELECT Num
FROM compte
WHERE Solde BETWEEN 0 AND 10000

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 45
Les variables 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.Nom AS Nom_Chef
FROM emp el, emp e2
WHERE el.Id_chef = e2.Id

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 46
Opérateurs ensemblistes
SELECT ...

UNION/ INTERSECT/ EXCEPT
SELECT ...

éliminent les doublons,


pour pouvoir les garder, utiliser à la place INTERSECT 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, n) fois dans r INTERSECT ALL s
 max(0, m - n) fois dans r EXCEPT ALL s

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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) 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( DISTINCT Titre) FROM Programme

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 48
Agrégats et GROUP BY
Le nombre de films programmés dans chaque salle :

SELECT NomCiné, COUNT (DISTINCT 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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 49
Requêtes imbriquées

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" )

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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 ANY, on obtient les comptes dont les soldes
sont supérieur au solde d'au moins un compte de Ahmed.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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")
EXCEPT
(SELECT DISTINCT Titre
FROM programme p2
WHERE pl.NomCiné = p2.NomCiné))

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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
WHERE p.Titre = pl Titre)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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(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
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 54
Sous-requêtes renvoyant plusieurs lignes
Opérateurs permettant d’utiliser de telles sous-requêtes :
 a IN (sous requete)
vrai si a apparaît dans le résultat de sous requete.

 a ?? ANY (sous 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)


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

 EXISTS (sous requete)


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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 55
Exemple 1
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num
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) ;

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 56
Exemple 2
 Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num 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) ;

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 57
Sous-requête avec un résultat à plusieurs colonnes

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


avec le résultat de la sous-requête :
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num 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’) ;

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 58
Sous-requête imbriquées

Il est possible d’imbriquer les sous-requêtes :


Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num 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’.

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’)) ;

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 59
Déclaration de tables et
contraintes

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI 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 >

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
Exemple :
Create table Commande ( numcom
NUMERIC (5), datecomm DATE)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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) ;

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 ]

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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>

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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)

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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> ]

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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>
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 >

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
Modification de table
Ajout ou modification de colonne
ALTER TABLE nom_table {ADD/MODIFY} ([nom_colonne type
[contrainte], ...])
Ajout d’une contrainte de table
ALTER TABLE nom_table ADD [CONSTRAINT 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
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
Déclaration de tables et
contraintes

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 )

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
· 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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 "
ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 "

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
Les Vues

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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 >

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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é.

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI
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

ENSA – Safi Analyse des Systèmes d’Information : MERISE Dr. Saïd ECH CHADI