CAHIER DE S. G. B. D (Système de Gestion Base de Données) Informatique de Gestion S 4
CAHIER DE S. G. B. D (Système de Gestion Base de Données) Informatique de Gestion S 4
CAHIER DE S. G. B. D (Système de Gestion Base de Données) Informatique de Gestion S 4
INFORMATIQUE DE GESTION S 4
La normalisation se fait par deux approches
- Algorithme de synthèse
* Étape 01
Prendre tous les attributs isolés, en faire une relation, tous les attributs seront clé.
Exemple :
C A F
B
G H
* Étape 02
Pour chaque D F de F, prendre les dépendances élémentaires.
Exemple :
1
* Étape 03
Recherche d’une couverture minimale.
* Étape 04
Partitionné F) ont groupe donc : F)1, F)2, F)3,...,F)n, tel que toute les D F d’un même groupe en même
partie de gauche.
* Étape 05
Pour chaque groupe Fi (à partir de l’étape 04), construire un schéma Ri {xi}
2
CHAPITRE I : ALGÈBRE RELATIONNELLE (THÉORIQUE)
1 – Introduction
Le modèle relationnel présente plusieurs avantages dû au faite qu’il soit basé sur la théorie des ensembles,
des langages spécifiques permettrent de spécifier ce que l’on souhaite obtenir, le S. G. B. D est responsable
de la politique d’exécution des requêtes.
3 – Algèbre relationnelle
C’est le langage interne d’un S. G. B. D Relationnelle, le principe fondamental consiste à considérer
qu’une relation obtenue par application successive d’opérateur binaire ou unaire dont les opérandes sont
les relations de la base de donnée (elle est dite INTERROGATION THÉORIQUE).
a – UNION
Opérations portent sur deux relations R1 et R2 de même schéma, consistant à construire R3 de même
schéma ayant pour tuple ceux appartenant à R1 ou R2 ou aux deux relations.
NOTATION SCHÉMATIQUEMENT
R3 = UNION (R1, R2)
R3 = R1 R2 R3
R1 R2
Exemple :
3
Correction
R1 R2 N° Nom Prénom
3 N3 P3 R3 = R1 R2
2 N2 P2 R3 (N°, Nom, Prénom)
1 N1 P1
6 N6 P6 Insertion de nouveaux tuples.
7 N7 P7
b – DIFFÉRENCE
Opérations portent sur deux relations R1 et R2 de même schéma, le résultat est R3 de même schéma ayant
pour tuple ceux appartenant à R1 et n’appartenant pas à R2, cette opération est anticommutative.
NOTATION SCHÉMATIQUEMENT
R3 = DIFFÉRENCE (R1, R2)
R3 = R1 – R2 R3
R1 R2
Exemple :
Correction
R3 = R1 S R2
R1 S R2 N° Nom Prénom R3 (N°, Nom, Prénom)
2 N2 P2
1 N1 P1 Suppression de tuple.
c – INTERSECTION
Opérations consistant à rapprocher deux relations R1 et R2 en R3, l’intersection de R1 et R2 de même
schéma est une relation R3 de même schéma contenant les tuples appartenant à R1 et R2 en même temps.
NOTATION SCHÉMATIQUEMENT
R3 = INTERSECT (R1, R2)
R3 = R1 R2 R3
R1 R2
4
Exemple :
Correction
R1 R2 Nom D. N ADR R3 = R1 R2
N2 D. N 2 ADR 2 R3 (Nom, D. N, ADR)
a - RESTRICTION
Opération sur une relation produisant une relation de même schéma mais ne comportant que les seuls
tuples vérifiant la condition précisée en opérande.
NOTATION SCHÉMATIQUEMENT
R' = Q R
R' = RESTRICTION (R / Q) R'
R
Exemple :
R1 N° Nom D. N
1 Ali 1976
2 Mohamed 1980
3 Fatah 1971
4 Mohamed 1972
Correction
1)
R'
5
2)
R'
b – PROJECTION (п)
Opération sur une relation consistant à composer une relation deux on enlevant à la relation initiale tous
les attributs non mentionné ont opérande on éliminant les tuples qui constitue des doublons.
NOTATION SCHÉMATIQUEMENT
R2 = PROJECTION (R1, ATTi, ..., ATTn)
R2 = Relation [ATTi, ..., ATTn] R2
Atti
Attn
R1
Exemple :
R N° Nom D. N
1 Ali 1976
2 Mohamed 1980
3 Fatah 1971
4 Mohamed 1972
Correction
1) R2
D. N D. N
1976
1980
R1 1971
1972
2) R2
Nom Nom
Ali
Mohamed
R1
Fatah
3) R2
6
D. N Nom D. N
Nom Ali 1976
Mohamed 1980
R1 Fatah 1971
Mohamed 1972
c – JOINTURE
Opération consistant à rapprocher selon une condition les tuples de deux relations 1 et 2 afin de former une
relation 3 qui contient l’ensemble de tout les tuples obtenu on concaténant un tuple de 1 et un tuple de 2
vérifiant la condition de rapprochement (celle-ci est de type attribut 1 opérateur attribut 2).
La qualification (condition) : attribut commun entre les 2 relations.
NOTATION SCHÉMATIQUEMENT
JOIN (R1, R2, CONDITION)
R3 = R1 R2 R3
Q
Q [Attribut commun]
R1
R1 R2
Exemple :
R = Client Crédit
R3
N° client = N° client
R1
Client Crédit
7
1 - Donner la liste des chauffeurs et des permis obtenus par ces chauffeurs (Nom, Prénom, Type de
permis).
2 - Lister la distance parcourue par le chauffeur N° 17 et ce depuis 01/01/1995 (>= à cette date).
Correction
1) R2
Nom
Prénom
Type_permis
R1
N° chauffeur = N° chauffeur
Chauffeur Permis
2) R3
Distance
R2
N° trajet = N° trajet
R1 Trajet
N° chauffeur = ‘17’
Date_motif M ‘01/01/1995’
Voyage (Restriction)
Code_produit
R1
Code_fournisseur = ‘F2’
Vendre
2) R3
Nom_produit
R2
R1 Produit
Code_fournisseur = ‘F2’
Vendre
3) R2
Code_fournisseur
Nom_fournisseur
R1
Ville = ‘LONDON’
Fournisseur
4) R2
9
Code_produit
Ville
R1
Code_fournisseur = Code_fournisseur
Vendre Fournisseur
Remarque :
Le nom dans artiste est défini dans le même domaine que Nom_utilisateur.
Nom dans accessoire est définie dans le même domaine que Nom_accessoire.
Correction exercice 3
1/ R3
R1 R2
N° abonnée N° abonnée
Abonnée Abonnée
2/ R1
N° abonné
Emprunt
3/ R3
11
─
R1 R2
N° ouvrage N° ouvrage
Ouvrage Emprunt
4/ R6
R5
N° ouvrage = N° ouvrage
R4 Emprunt
R2 R3
N° ouvrage
R1 Emprunt
N° abonnée = ‘X’
Emprunt
Correction exercice 4
12
1/ R2
R1
Durée = ‘2 h’
Film
2/ R3
Durée
R2
Titre = Titre
R1 Film
Version = ‘Originale’
Séance
3/ R3
Nom_réalisateur
R2
Titre = Titre
R1 Film
Joue
4/ R2
13
Salle
R1
Film
Correction exercice 5
1/ R5
R3 R4
Nom Nom_utilisateur
R1 R2
Artiste Utilisation
2/ R3
Nom_accessoire
R2
Nom = Nom_utilisateur
R1 Utilisation
Rôle = ‘Jongleur’
Artiste
3/ R4
14
Camion
R3
Nom = Nom_accessoire
R2 Accessoire
R1 Utilisation
Rôle = ‘Jongleur’
Artiste
4/ R3
R1 R2
Nom Nom_accessoire
Accessoire Utilisation
1) Matricule et nom des employés qui ont été embauché avant 01/01/1995.
15
2) Nom des employés avec le nom du département où ils travaillent.
3) Nom des employés qui ne participe a aucun projet.
4) Nom des départements qui ont des ingénieurs et des secrétaires.
Correction exercice 6
1°/ R1
Titre_représentation = Titre_représentation
Représentation
2°/ R2
Titre_représentation = Titre_représentation
R1
Représentation
3°/ R2
Nom
Titre_représentation
R1
N° représentation = N° représentation
Musicien Représentation
4°/ R3
16
Lieu
Titre_représentation
Tarif
R2
N° représentation = N° représentation
R1 Représentation
Date = ‘14/09/1996’
Programmer
Correction exercice 8
1°/ R2
Matricule
Nom_employé
R1
Employé
2°/ R2
Nom_employé
Nom_département
R1
N° département = N° département
Employé département
3°/ R4
17
─
R3 R2
Nom_employé Nom_employé
Employé R1
Matricule = Matricule
Employé Participation
4/ R7
N°_Département
R6
N°_Département = N°_Département
R5 Département
R3 R4
N°_Département N°_Département
R1 R2
Employé Employé
Correction exercice 7
18
1/ R3
Nom
R2
N°_Pilote = N°_Pilote
R1 Pilote
Ville_Départ = ‘Paris’
Vol
2/ R4
Nom
R3
N°_Pilote = N°_Pilote
R2 Pilote
N°_Avion = N°_Avion
R1 Vole
Nom_avion = ‘A300’
Avion
3/ R9
19
R7 R8
N°_Pilote N°_Pilote
Nom Nom
R5 R6
R3 Pilote R4 Pilote
R1 Vole R2 Vole
Avion Avion
4/
R2
N° Avion
R1
Vol
5/ R6
20
─
R2 R5
N°_Pilote
Nom
R1 R4
Ville_Départ = ‘VENISE’
Vole
1ère partie
On commence par les requêtes simples. Les requêtes d’interrogations sont représentés syntaxiquement
comme suit :
WHERE <Condition>
* La Clause SELECT
Cette clause permet d'indiquer quelles colonnes, ou quelles expressions doivent être retournées par
l'interrogation.
* La clause FROM
Elle donne la liste des tables participant à l'interrogation. Il est possible de lancer des interrogations
utilisant plusieurs tables à la fois. FROM table 1, table 2
* La Clause WHERE
Cette clause permet de spécifier quelles sont les lignes à sélectionner dans une table ou dans le produit
cartésien de plusieurs tables. Elle est suivie d'un prédicat (expression logique ayant la valeur vrai ou faux)
qui sera évalué pour chaque ligne. Les lignes pour lesquelles le prédicat est vrai seront sélectionnées.
22
La forme la plus simple permet d’obtenir la liste complète des lignes d’une table.
Syntaxe :
SELECT *
FROM <Nom de la table> ;
FROM Fournisseurs ;
Syntaxe :
SELECT *
FROM <Nom de la table>
WHERE <Condition> ;
SELECT *
FROM Fournisseurs
WHERE Ville_F = ‘ALGER’;
SELECT *
FROM élèves
WHERE Ville_F = ‘TOULON’ ;
Exemple : Donner les fournisseurs qui ont un Numéro > 120 et qui sont d’alger.
SELECT *
FROM Fournisseurs
WHERE N°_F > ‘120’ AND Ville_F = ‘ALGER’;
23
3/ Sélection d’une colonne spécifique
Il se peut qu’on ait besoin d’une partie de notre table, dans ce cas il suffit de citer les colonnes qui nous
intéressent.
Exemple 2 : Donner la liste des matières (Nom_mat) pour les quels l’élève ALI à eu au moins une note.
SELECT Nom_mat
FROM Notes
WHERE Nom_élève = ‘ALI’;
SELECT Nom_élève
FROM Élève
WHERE Ville_élève = ‘TOULON’ ;
Remarque : Dans la clause WHERE, on peut utilisé que des propriétés qui sont dans la
table sélectionné.
4/ Jointure
Pour une recherche plus complexe faisaient intervenir plusieurs relations, on utilise les opérations
d’appartenance qui sont : (IN, NOT IN, COUNTAINE, DOESEN’T COUNTAINE).
Exemple :
* On imbriquant des blocs de SELECT avec des relations différentes :
SELECT Attribut
FROM Table
WHERE Condition IN (NOT IN) SELECT Attribut
FROM Table
WHERE Condition ;
24
Exemple : Donner les Nom_F qui fournisse la pièce P2 (N°_P).
R3
Nom_F
R2
N°_F = N°_F
R1 Fournisseurs
N°_P = ‘P2’
Four_Pièce
SELECT Nom_F
FROM Fournisseurs
WHERE N°_F IN SELECT N°_F
FROM Four_Pièce
WHERE N°_P = ‘P2’;
Exemple : Donner les N°_f qui fournissent au moins une pièce fournis par F2 (N°_F).
R3
N°_F
R2
N°_F = N°_F
R1 Four_Pièce
N°_F = ‘F2’
25
Four_Pièce
SELECT N°_F
FROM Four_Pièce
WHERE N°_F IN SELECT N°_F
FROM Four_Pièce
WHERE N°_F = ‘F2’;
* Variables synonymes
Il est préférable d’utiliser des variables synonymes pour lever certaine ambiguïté.
SELECT N°_F
FROM Four_Pièce (X)
WHERE N°_F IN SELECT N°_F
FROM Four_Pièce (Y)
WHERE N°_F = ‘F2’;
SELECT N°_F
FROM Four_Pièce X, Four_Pièce Y
WHERE X.N°_F = Y.N°_F AND Y.N°_F = ‘F2’;
SELECT Nom_F
FROM Fournisseurs X, Four_Pièce Y
WHERE X.N°_F = Y.N°_F AND Y.N°_P = ‘P2’;
Exemple :
Client (Nom_cl, Adr_cl, ville_cl, Code_commerciaux).
Commerciaux (Code_com, Nom_com).
26
* Les requêtes où les données sélectionnées sont dans plusieurs tables
1°/ Donner la liste des noms des élèves avec leur niveau.
2°/ Donner la liste des Noms élèves et le Nom des cours qu’ils suivent pendant plus de 3 heures.
* Les requêtes où les données proviennent d’une table mais où la condition et faite sur une table
différente
1°/ Donner les Nom élèves qui font de la peinture pondant plus de 2 heures.
1er cas
SELECT Nom_élv
FROM élèves
WHERE Ref_élv IN SELECT Ref_élv
FROM cours
WHERE Nom_matière = ‘Peinture’ AND Nbre_heure = ‘2’ ;
2ème cas
SELECT Nom_élv
FROM Cours
WHERE ((Nom_matière = ‘Peinture’) AND (Nbre_heure > ‘2’) AND Ref_élv) IN SELECT Ref_élv
FROM élèves ;
27
5/ Les opérateurs d’appartenance
* BETWEEN (entre)
S’utilise avec la clause WHERE.
Syntaxe :
<Expression 1> BETWEEN <Expression 2> AND <Expression 3>
Exemple : Donner le nom des fournisseurs dont le code et compris entre 15 et 30 et résident à Alger.
SELECT Nom_F
FROM Fournisseurs
WHERE Code_F BETWEEN ‘15’ AND ‘30’ AND Ville_F = ‘ALGER’ ;
* IN
Permet de tester la présence d’une valeur particulière dans un ensemble.
Syntaxe :
<Expression 1> IN {Expression 2, Expression 3, …}
SELECT Nom_P
FROM Pièce
WHERE Matériaux IN {zinc, fer} ;
SELECT Nom_matière
FROM Matière
ORDER BY Nom_matière [A → Z] ;
Exemple 2 : Donner la liste des matières par ordre décroissant de coefficient puis par ordre alphabétique
des Nom.
SELECT Nom_matière
FROM Matières
ORDER BY Nom_matière, Coefficient DESC ;
28
* LIKE (comme)
Syntaxe :
Expression LIKE Chaîne
Les méthodes de recherche SQL nous permettent d’utiliser le joker ‘–’ pour remplacer n’importe quel
caractère unique et le joker ‘%’ pour remplacer n’importe quel nombre de caractère.
Exemple 1 : Donner le nom du fournisseurs et numéro du fournisseurs tel que le nom du fournisseurs :
◈ Commence par S.
◈ Contient un S.
◈ Se termine par un S.
◈ Deuxième position un S.
◈ Un S en sixième position.
◈ Ne contient pas un S.
Exemple 2 : Donner la liste des élèves dont le nom commence par 'c' ou 'C'.
SELECT *
FROM Élèves
WHERE Nom_élv LIKE 'c%' OR 'C%' ;
1 - Donner la liste des chauffeurs et des permis obtenus par ces chauffeurs (Nom, Prénom, Type de
permis).
2 - Lister la distance parcourue par le chauffeur N° 17 et ce depuis 01/01/1995 (>= à cette date).
Correction
1°/
SELECT Nom, Prénom, Type_permis
FROM Chauffeur X, Permis Y
WHERE X.N°_chauffeur = Y.N°_chauffeur ;
29
2°/
SELECT Distance
FROM Trajet
WHERE N°_trajet IN SELECT N°_trajet
FROM Voyage
WHERE N°_chauffeur = '17' AND Date_motif >= '01/01/1995' ;
* DISTINCT
Cette commande permet de supprimer les lignes redondantes.
SELECT *
FROM Acomptes
WHERE Date_acompte BETWEEN '01/01/98' AND '28/02/98' ;
7 / UNION en SQL
L’union de deux relations R et S de même schéma est une relation T de même schéma tel que :
T = UNION (R, S)
Exemple 1 : Donner les N°_F et Nom_F des fournisseurs qui fournissent la pièce P1 ou P2.
30
Exemple 2 : Soit la relation
Commande (N°_C, Nom_C, Nom_P, Quantité).
Fourniture (Nom_P, Nom_F, Prix).
SELECT Nom_P
FROM Fourniture
WHERE Prix > '10000'
UNION
SELECT Nom_P
FROM Commande
WHERE Nom_C = 'ALI' ;
Remarque : L'union élimine les dupliqués, pour les gardés, on utilise l'opération UNION
ALL.
8 / INTERSECTION en SQL
L’intersection de deux relations R et S de même schéma est une relation T de même schéma tel que :
T = INTERSECT (R, S)
Exemple 1 : Donner les N°_P et Nom_P des pièces fournis par le fournisseur F1 et F2 avec une quantité
égale à 100.
31
Exemple 2 : Soit la relation
Employé (N°_emp, Nom_emp, N°_départ, Salaire).
Département (N°_départ, Nom_départ, Localité).
Donner les N°_départ ayant des employés qui gagne plus de 1000 € et qui ce trouve à paris.
SELECT N°_départ
FROM Employé
WHERE Salaire > '1000 €'
INTERSECT
SELECT N°_départ
FROM Département
WHERE Nom_départ = 'PARIS' ;
T = MINUS (R, S)
Exemple 1 : Donner les N°_F et Nom_F des fournisseurs qui non jamais fournit de pièce.
MINUS
SELECT N°_départ
FROM Département
MINUS
SELECT N°_départ
FROM Employé ;
32
Remarque : La différence élimine les dupliqués, pour les gardés, on utilise l'opération
MINUS ALL.
Syntaxe :
SUM (Expression)
SELECT SUM(Quantité)
FROM Commande
WHERE Nom_P = 'Brique' ;
SELECT Nom_P
FROM Commande
WHERE SUM(Quantité) = '100' ;
Syntaxe :
AVG (Expression)
SELECT AVG(Poids)
FROM Pièce
WHERE N°_P = 'P1' AND N°_P = 'P2' ;
Syntaxe :
COUNT (Expression)
SELECT COUNT(*)
FROM Fournisseurs
WHERE Ville_F = 'ALGER' ;
Syntaxe :
MAX (Expression)
SELECT N°_P
FROM Pièce
WHERE MAX(Poids) ;
Syntaxe :
MIN (Expression)
* La clause GROUP BY
Syntaxe :
GROUP BY (Nom Attribut)
34
Il est possible de subdiviser la table en groupe, chaque groupe étant l'ensemble de ligne ayant une valeur
commune.
Exemple 3 : Donner le N°_F et la quantité moyenne la plus basse fournis par les fournisseurs.
35
Série d'exercice N° 2
Exercice 01 : Soit la base de données de gestion des livres et disques dans une médiathèque :
Disque (code_ ouvrage, titre, style, pays, année, producteur)
État_disque (code_ ouvrage, N°_exemplaire, date_ achat, état)
Livre (code_ ouvrage, titre, genre, éditeur, collection)
État_ livre (code_ ouvrage, N°_exemplaire, date_ achat, état)
Auteur (code_ ouvrage, identité)
Adonnée (N°_adonnée, nom, prénom, rue, ville, code_ postale, téléphone)
Prêt (code_ouvrage, N°_exemplaire, N°_adonné, date_prêt)
Personnel (N°_exemplaire, nom, prénom, fonction, salaire)
Correction
1°/ SELECT *
FROM Livre ;
36
FROM Personnel
WHERE salaire > ‘1500 €’
ORDER BY salaire DESC, nom ASC ;
OU
Correction
1°/ SELECT (*)
FROM Restaurant
WHERE MAX (Prix_moyen) ;
Correction
1°/ SELECT N°_consultation
FROM Consultation
WHERE Code_patient = ‘852’ AND Date_consultation BETWEEN ‘--/--/2001’ AND ‘--/--/2006’ ;
38
Où :
Correction
1°/ SELECT *
FROM Module ;
39
6°/ SELECT Nom_enseignant
FROM Enseignant
WHERE N°SS IN SELECT N°SS
FROM Ens_module
WHERE MAX (COUNT (Code_module)) ;
Correction
1°/ SELECT Nom_station
FROM Compétition ;
40
3°/ SELECT Nom_station
FROM Skieur X, Classement Y
WHERE X.Nom_skieur = ‘TOMBA’ AND Y.rang = ‘1’
UNION
SELECT Nom_station
FROM Skieur Z, Classement T
WHERE Z.Nom_skieur = ‘TOMBA’ AND T.rang = ‘2’ ;
41
WHERE Nom_skieur IN SELECT Nom_skieur
FROM Skieur
WHERE Nom_station = ‘TIGNES’ ;
Exercice 02 : Soit la base de données gestion entreprise :
Animateur (Mat_animateur, nom_animateur, prénom_animateur)
Animer (Code_cours, mat_animateur, nbre_heures, tarif_heures)
Cours (Code_cours, niveau, date, code_théme, code_entreprise)
Catégorie (Code_catégorie, libellé).
Participer (Code_cours, matricule)
Entreprise (Code_entreprise, nom, adresse)
Thème (Code_thème, désignation, code_catégorie)
42
CHAPITRE III : OPÉRATION SUR LES TABLES
Introduction
Après avoir normaliser, on passe à la création des tables.
CREATE TABLE <Nom de la table> (A1 : Type (long), A2 : Type (long), ..., An Type (long)) ;
Exemple
Créer la table Fournisseurs.
CREATE TABLE Fournisseurs (N°_F : N (04), Nom_F : Char (15), Code_F : AN (04), Ville_F : Char (25)) ;
INSERT INTO <Nom de la table> (A1, A2, ..., An) VALUES (‘V1’, ‘V2’, ...,
‘Vn’) ;
Exemple
Insérer les tuples suivant correspondant à la table pièces.
CREATE TABLE Pièces (N°_P : N (04), Nom_P : Char (15), Poids : N (03)) ;
43
<Condition> ;
Exemple
Modifier le Code_F de la table fournisseur par CF1 du fournisseur dont le Nom = ‘ALI’.
Exemple
Supprimer la table Fournisseur.
Exemple
Vider la table pièce.
Exemple
Supprimer tous les fournisseurs dont le nom commence par B.
ALTER TABLE <Nom de la table> ADD (A1 Type (Taille), A2 Type (Taille), ..., An Type (Taille)) ;
Exemple
Ajouter les attributs adresse et age dans la table Fournisseurs.
44