Vous êtes sur la page 1sur 24

PROGRAMME

Cours de BASE DE DONNEES

LES BASES DE DONNEES DANS


L’ENTREPRISE
Introduction
Les bases de données sont actuellement au cœur du système d'information des
entreprises. Les systèmes de gestion de bases de données, initialement disponibles
uniquement sur des "mainframes", peuvent maintenant être installés sur tous les types
d'ordinateurs y compris les ordinateurs personnels. Mais attention, souvent on désigne,
par abus de langage, sous le nom "bases de données" des ensembles de données qui
n'en sont pas.
Qu'est-ce donc qu'une base de données? Que peut-on attendre d'un système de
gestion de bases de données? C'est à ces questions, entre autres, que nous tenterons de
répondre tout au long de ce cours.
Dans un premier temps, et de façon informelle, on peut considérer une Base de
Données (BD) comme une grande quantité de données, centralisées ou non, servant
pour les besoins d'une ou plusieurs applications, interrogeables et modifiables par un
groupe d'utilisateurs travaillant en parallèle. Quant au Système de Gestion de Bases de
Données (SGBD), il peut être vu comme le logiciel qui prend en charge la structuration,
le stockage, la mise à jour et la maintenance des données ; c'est, en fait, l'interface entre
la base de données et les utilisateurs ou leurs programmes.

SECTION 1 : OBJECTIFS DES SYSTEMES DE GESTION DE BASES DE


DONNEES
Les objectifs principaux des SGBD sont les suivants :
a) Indépendance physique
b) Indépendance logique
c) manipulation des données par des non informaticiens
d) efficacité des accès aux données
e) administration centralisée des données
f) non redondance des données
g) cohérence des données
h) partageabilité des données
i) sécurité des données
Dans la pratique, ces objectifs ne sont que très partiellement atteints.

2
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

SECTION 2 : LE MODELE RELATIONNEL


Le modèle relationnel a été inventé en 1960 et a fait l'objet de très nombreuses
recherches qui ont débouché sur la réalisation et commercialisation de SGBDs
relationnels. C'est le modèle le plus utilisé par les SGBDs actuellement disponibles sur
le marché.
C'est un modèle de données plus simple que celui de l'entité association, ce qui
explique son succès tant sur le plan théorique (théorie de la normalisation, définition de
langages de manipulation de données), que sur celui des réalisations. Mais cette
simplicité est aussi sa faiblesse principale: c'est un outil trop pauvre sémantiquement
pour pouvoir bien représenter la complexité du monde réel. Ce pourquoi d'autres
modèles de type entité association ou orientés objets ont été ensuite proposés.

1. Les concepts de base


Nous allons dans ce paragraphe introduire les notions utilisées dans la construction
théorique du modèle relationnel: domaine, relation, tuple, attribut, schéma.

 La notion de domaine

Un domaine est un ensemble de valeurs (distinctes).


Cette définition correspond à l'ensemble des valeurs que peut prendre une certaine
manifestation du monde réel. Elle s'apparente souvent à un type (entier, réel), mais peut
également être hétéroclite (date). Dans l'exemple précédent, un domaine est l'ensemble
des valeurs d'une colonne d'un tableau : {'Mauvaise', 'Excellente', 'Bonne'} est un
domaine.

Exemples de domaines :

- l'ensemble des entiers est un domaine ;


- {3, 5.7, 124} est un domaine ;
- ('Jean', 'Paul', 'Louis', 'Arthur') est un domaine ;
- (14/07/89, 15/07/89, 15/07/89) est un domaine ;
- Tout ensemble de valeurs est un domaine.
 Produit cartésien de plusieurs domaines
Le produit cartésien d'un ensemble de domaines D1, D2,…, Dn, noté D1xD2x…xDn, est
l'ensemble de n-uplets (ou tuples) <v1, v2,…, vn> tels que vi  Di.

 La notion de relation

Une relation est un sous-ensemble du produit cartésien d'une liste de domaines.


Exemple :
3
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

La relation CIEL ci-après est un sous-ensemble du produit cartésien des domaines


suivants : COULEUR={BLANC, BLEU, ROUGE, SOMBRE} et BOOLEEN={OUI, NON}.
CIEL COULEUR BOOLEEN
BLEU OUI
BLANC NON
SOMBRE OUI
Plus simplement, une relation peut être vue comme un tableau à deux dimensions dont
les colonnes correspondent aux domaines et les lignes contenant les tuples. On parle
parfois de table.
 La notion de n-uplet (ou tuple)
Un n-uplet (càd élément) correspond à une ligne d'une relation.
Une autre façon de considérer une relation à N domaines D1, D2,... DN est de
représenter un espace à N dimensions. Dans cet espace chaque domaine correspond à
l'une des dimensions, chaque n-uplet ou tuple correspond à un point de l'espace.

 La notion d'attribut

Un attribut est le nom donné à une colonne d'un tableau représentant une relation.
Exemple : Les attributs de la relation CIEL sont COULEUR et BOOLEEN.
 La notion de schéma
Le schéma d'une relation est composé de son nom suivi des noms de ses attributs et de
leurs domaine : R(A1  D1, A2  D2,…, AN  DN).

Lorsque le choix des domaines est évident, on simplifie l'écriture de la façon suivante:
R(A1, A2,…, AN). Sous cette forme, on dira que R est écrit en intension.

Exemple : ETUDIANT (MATRIC, NOM, PRENOM, DATENAIS, ADRESSE)


 Schéma d'une base de données relationnelle
Le schéma d'une base de données relationnelle est l'ensemble des schémas des relations
qui la composent. Une base de données relationnelle est constituée par l'ensemble des
tuples de toutes les relations définies dans le schéma de la base.

2. Les dépendances fonctionnelles


2.1) Définition de dépendances fonctionnelles
Cette notion fut introduite par CODD afin de caractériser des relations qui peuvent être
décomposées sans perte d‟informations. Un attribut (ou un groupe d‟attributs) B dépend
fonctionnellement d‟un attribut A, si, étant donné une valeur de A, il lui correspond une
valeur unique de B (et ceci quelque soit l‟instant considéré). On note A → B.

4
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Exemple : Soit la relation COURS suivante :


COURS(CodMatiere, LibMatiere, NbHeureHebdo, CodFiliere, LibFiliere, NumAnEtude). On
a les dépendances fonctionnelles suivantes :
CodMatiere → LibMatiere
CodFiliere → LibFiliere
CodFiliere,NumAnEtude,CodMatiere → NbHeureHebdo
Par contre, on ne pourrait avoir les DF suivantes car elles n‟ont pas de sens :
CodFiliere → LibMatiere ou bien NumAnEtude → LibMatiere
On parle de dépendance fonctionnelle élémentaire entre A et B si A  B et
qu‟aucune partie de A ne détermine B :
A  B avec A = A1+A2
A1+A2  B
Si A1  B alors il n‟y a pas de dépendance fonctionnelle
élémentaire entre A et B.
Dans une entité, toutes les propriétés doivent dépendre fonctionnellement de la clé.
On parle de dépendance fonctionnelle directe entre deux propriétés A et C s‟il
n‟existe pas une propriété B telle que : A  B et B  C  A  C (il ne doit y avoir de
propriété C qui induit la transitivité entre les propriétés A et B).
2.2) Quelques propriétés des dépendances fonctionnelles
Soit une relation R(A, B, C, D). R est encore appelé relation universelle. Les
propriétés suivantes peuvent être vérifiées :
 Réflexivité : A  A ;
 Augmentation : B  C  A+B  C ;
 Additivité : A  B et C  D  A+C  B+D ;
 Décomposition : A  B+C  A B ;
 Transitivité : A  B et B  C  A C ;
 Pseudo-transitivité : A  B et B+C  D  A+C  D.
2.3) Notion de clé et Recherche d’identifiant pour
une relation universelle
Une clé (ou un identifiant) est un ensemble minimum d‟attributs qui détermine
tous les autres. Il peut y avoir plusieurs clés pour une même relation ; on en choisit en
général une comme clé primaire, les autres étant secondaires.
La recherche de clé peut se faire „intuitivement‟ en éliminant progressivement les
rubriques déterminées à l‟intérieur d‟une relation universelle, en s‟aidant de la liste des

5
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

dépendances fonctionnelles préalablement trouvées. La (ou les) rubrique(s) restantes


après suppression est (sont) considérée(s) comme étant la clé.
On peut aussi trouver graphiquement l‟(es) identifiant(s) d‟une relation universelle
de la manière suivante :
a- On dessine le graphe attribut-dépendance fonctionnelle de la relation ;
b- On retire tout attribut déterminé mais non déterminant en coupant les branches
terminales ;
c- On recommence l‟étape b jusqu‟à ce qu‟il n‟y ait plus d‟attributs à retirer.
d- Si le graphe ne comporte plus de DF, le reste constitue l‟identifiant et la procédure
est terminée.
e- Si le graphe comporte encore des DF, celles-ci forment un ou plusieurs circuits de n
DF mutuellement bloquantes. Pour chacune de ces n DF, on la (DF bloquante) retire
du graphe et on obtient n graphes de DF réduits. On applique à chaque graphe la
présente procédure (de a- à e-). On obtient ainsi n identifiants.
f- On élimine les éventuels identifiants non minimaux.
NB : Un identifiant est minimal si tous ses composants sont nécessaires pour désigner
univoquement la (ou les) entité(s) concernée(s).
Exercice 1
Trouver la (ou les) clé(s) des relations suivantes :
1) EMPLOYE(N°Matr, Nom, Prenom) avec N°matr  Nom, Prenom
2) INFOCOMMANDE(Nom, NumCli, AdrCli, NumCom, NumProd, DateCom, QtéCom,
PrixProd) avec :
NumCom  Nom, DateCom, NumCli
NumCli  Nom, AdrCli
NumCom, NumProd  QtéCom
NumProd  PrixProd
3) COURS(N°Matr, NomEtud, NomProf, Classe, Téléphone) avec :
NomEtud  Classe
NomProf  Téléphone, N°Matr
NomEtud, N°Matr  NomProf

Remarque :
Dans une entité, les propriétés doivent être élémentaires puis doivent dépendre de
l‟identifiant par une dépendance fonctionnelle élémentaire directe.
2.4) Graphe des dépendances fonctionnelles
6
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Soit un ensemble F de dépendances fonctionnelles élémentaires. Il est possible de


visualiser cet ensemble de DF par un graphe appelé graphe des dépendances
fonctionnelles. A titre d‟exemple, le graphe des DF issus de la relation COURS
précédente sera :

CodMatiere NumAnEtude CodFiliere

+
LibMatiere LibFiliere

NbHeureHebdo

2.5) Fermeture transitive et couverture minimale


A partir d‟un ensemble de DF élémentaires, on peut composer par transitivité d‟autres
DF élémentaires. On aboutit à la fermeture transitive qui n‟est rien d‟autre que
l‟ensemble des DF élémentaires considérées enrichi de toutes les DF élémentaires
déduites par transitivité.
Exemple : Voici un ensemble de DF représentées sous forme de graphe de DF puis sa
fermeture transitive.

A partir de la notion de fermeture transitive, il est possible de définir l‟équivalence de


deux ensembles de DF élémentaires : deux tels ensembles sont équivalents s‟ils ont la
même fermeture transitive. Par suite, il est intéressant de déterminer un sous-ensemble
minimum de DF permettant de générer toutes les autres. Ainsi, la couverture minimale
d‟une relation est un ensemble F de DF élémentaires associé à un ensemble d‟attributs
tel qu‟aucune dépendance dans F n’est redondante et toute DF élémentaire des
attributs est dans la fermeture transitive de F.

3. La normalisation d’une relation universelle


C‟est une opération qui consiste en un ensemble de règles ayant pour but de
garantir la cohérence et la portabilité de la représentation du système d‟information,
7
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

particulièrement le graphe des DF et le Modèle Entité Association. En d‟autres termes,


c‟est une opération qui, à partir d‟une relation universelle, procède à une décomposition
rationnelle de ladite relation afin d‟aboutir à une ou plusieurs relations qui ne souffrent
de redondances de données ou d‟incohérence. Pour y parvenir, la relation initiale doit
être décomposée de manière à respecter les critères suivants :
a) 1ère Forme Normale (1FN)
Une relation est en 1FN si tous les attributs non clés sont en dépendance
fonctionnelle avec la clé de la relation. (ou bien si tous ses attributs sont atomiques et
monovalués)
b) 2ème Forme Normale (2FN)
Une relation est en 2FN si elle est en 1FN et que toutes les propriétés non clés
sont en dépendance fonctionnelle élémentaire avec la clé (pas de dépendance partielle
avec la clé).
c) 3ème Forme Normale (3FN)
Une relation est en 3FN si elle est en 2FN et qu‟aucune propriété non clé ne
dépend de propriété non clé (pas de dépendance transitive)
d) Forme Normale de BOYCE-CODD (FNBC)
Une relation est en FNBC si elle est en 3FN et que les seules dépendances
fonctionnelles élémentaires sont celles dans lesquelles une clé détermine une propriété.
(ou bien elle en 1FN et tout déterminant est un identifiant).
Remarques :
 Il existe d‟autres formes normales mais très souvent une relation qui a pu être
décomposée en 3FN est déjà acceptable.
 On peut décomposer „intuitivement‟ une relation universelle en procédant comme
suit :
- faire de chacune des DF des „sous-relations‟ et prendre chaque rubrique source
comme identifiant dans la sous-relation ;
- fusionner toutes les sous-relations ayant les mêmes rubriques comme clés en
recopiant dans une seule sous-relation les rubriques non clés des autres sous-
relations ;
- supprimer dans les sous-relations, toute rubrique C telle que : A = clé, B et C =
rubriques non clés et B → C ;
- supprimer des sous-relations toute rubrique non clé qui apparaisse
simultanément en plusieurs sous-relations, précisément dans les relations où
elles ne sont pas avec leurs clés fondamentales.
8
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

 On peut également procéder (graphiquement) de la manière suivante pour


décomposer une relation :
a) On part d‟une relation en 1FN regroupant les attributs pertinents ;
b) Déterminer les DF minimales non dérivables ;
c) Calculer les identifiants minimaux ;
d) Dessiner le graphe des DF correspondant à la relation ;
e) Marquer les DF anormales (dont le déterminant n‟est pas un identifiant) ;
f) Elaguer progressivement le graphe en enlevant les DF anormales terminales et
en faisant de chacune un schéma de relation ;
g) Faire un schéma du noyau résiduel ;
h) Si ce dernier contient encore des DF anormales, il est en 3FN mais pas en
FNBC : choisir une forme adéquate ;
i) Regrouper les relations ayant même identifiant (si pertinent) ;
j) Donner aux relations des noms significatifs.
Exercice 2
1) Trouver la forme normale correspondant à chacune des relations présentées dans
l‟exercice N°1 puis décomposer (si nécessaire) chaque d‟elles en 3FN au moins.
2) Soit la relation suivante :
GENERA(NomType, NomAct, NumType, Nom, Prénom, Nmat, NumAct, Jour)
Soient aussi la liste de DF suivante :
NumAct  NomAct, NumType, NomType
NumType  NomType
Nmat  Nom, Prénom
Nmat, Jour  NumAct, Nom, NomAct, Prénom, NumType, NomType
a) Quelle est la forme normale de GENERA ?
b) Cette relation est-elle en 3FN ? Si non, proposer alors une décomposition en 3FN.

4. Les Langages de manipulation des données relationnelles


Un langage de manipulation de données se compose d‟un ensemble de
commandes permettant d‟interroger une base de données et d‟un ensemble de
commandes permettant de la modifier. Nous nous intéresserons à l‟algèbre relationnelle
et au langage SQL. Ces langages sont destinés à formuler des requêtes à l‟endroit de la
base de données qui se chargera de les exécuter.
4.1) L’algèbre relationnelle
Elle est composée de deux groupes d‟opérateurs :

9
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

- les opérateurs algébriques, agissant sur les attributs ou sur les valeurs des attributs
des relations. Ils sont subdivisés eux-mêmes en deux catégories selon qu‟ils portent sur
une seule relation (SELECTION, PROJECTION) ou sur deux relations (JOINTURE,
DIVISION).
- les opérateurs ensemblistes, agissant les relations, considérées comme étant des
ensembles. Ils se subdivisent eux-aussi en deux catégories selon qu‟ils portent sur des
relations de même schéma (UNION, INTERSECTION, DIFFERENCE) ou non (PRODUIT
CARTESIEN).
Pour présenter l‟ensemble de ces opérateurs, nous prendrons comme support le
schéma logique relationnel suivant :
DIRECTION(CodDir, LibDir)
SERVICE(CodSce, LibSce, #CodDir, #NumMatr)
EMPLOYE(NumMatr, NomEmp, PreEmp, DateNais, DateSce, Salaire, #CodSce)
4.1.1) Les opérateurs algébriques
a) La Projection
Opérer une projection d‟une liste d‟attributs sur une relation de départ génère une
relation résultat dont les tuples sont réduits aux attributs projetés. La projection élimine
les doublons éventuels contenus dans le résultat.
Syntaxe : RelationRésultat=PROJECTION Relation(Attribut1, Attribut2, …. , AttributN)
De façon schématique, on a :

RelationRésultat

Attribut1,…AttributN

Relation
Exemple :
Liste (nom, prénoms, date de prise de service) des employés.
R = PROJECTION EMPLOYE(NomEmp, PreEmp, DateSce)
b) La Sélection (ou Restriction)
Opérer une sélection suivant une condition, sur une relation de départ, génère une
relation résultat dont les tuples sont ceux qui satisfont la condition. La condition est
exprimée sous forme d‟un attribut, d‟un opérateur de comparaison (et, ou, non, <, >, , ,
…) et d‟une valeur. La sélection peut porter sur plusieurs conditions.
Syntaxe : RelationRésultat = SELECTION Relation(Condition)
10
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

De façon schématique, on a :

Condition
Relation RelationRésultat

Exemple :
Liste des employés ayant pris service après le 1er Janvier 2000 et gagnant moins
de 200000.
R = SELECTION EMPLOYE((DateSce>#01/01/2000#)et(Salaire<200000))
c) La Jointure
Opérer une jointure de deux relations, selon un critère de comparaison portant sur des
attributs de même domaine de définition, génère une relation résultat dont les tuples
sont ceux qui satisfont au critère de comparaison.
Syntaxe : RelationRésultat = JOINTURE Relation1, Relation2(critère de comparaison)
avec critère de comparaison={attribut opérateur attribut}
De façon schématique, on a :
RelationRésultat

Critère

Relation1 Relation2

Exemple :
Informations sur les Employés et les services auxquels appartiennent ces
employés.
R = JOINTURE EMPLOYE, SERVICE (Employe.CodSce = SERVICE.CodSce)
Il existe différentes formes de jointure dont l‟équijointure (deux différentes relations avec
l‟égalité comme opérateur dans le critère de comparaison) ou l‟autojointure (liaison de la
même relation avec elle-même, en utilisant l‟égalité comme opérateur dans le critère de
comparaison).
d) La Division
Opérer une division d‟une relation « dividende » par une relation « diviseur » dont les
attributs sont un sous-ensemble des attributs du dividende, génère une relation résultat
(« quotient ») dont les attributs sont ceux de la relation « dividende » qui ne sont pas ceux
de la relation « diviseur ». les tuples du quotient sont ceux pour lesquels leur
concaténation avec chaque tuple du diviseur redonne un tuple du dividende.
11
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Syntaxe : RelationQuotient = DIVISION (RelationDividende, RelationDiviseur)


De façon schématique, on a :
RelationQuotient

RelationDividende RelationDiviseur
Exemple1 :
Soient les relations R, V, V‟ et V‟‟ représentées en extension :
R A B C V B C Rep1=DIVISION(R,V) donne :
1 1 1 1 1 Rep1 A
1 2 0 2 0 1
1 2 1 3
1 3 0
2 1 1 V’ B C Rep2=DIVISION(R,V’) donne :
2 3 3 1 1 Rep2 A
3 1 1 1
3 2 0 V’’ B C 2
3 2 1 3 5 3

Rep3=DIVISION(R,V) donne du vide :


Rep3 A

Exemple2 :
Soient les relations suivantes :
VIN Cru Millésime Degré TYPE Millésime Degré CRU = DIVISION(VIN,TYPE)
Macon 1977 12 1977 12 donne:
Macon 1979 14 1979 14
Macon 1980 12 CRU Cru
Saumur 1977 12 Macon
Saumur 1979 14 Saumur
Chablis 1979 14

La Division permet de traiter le quantificateur universel « Tous les …». Dans


l‟exemple N°2, nous traitons ainsi la question « Quels sont les crus qui ont tous les
types ? »
REMARQUE : Dans la plupart des situations, la réponse à une requête nécessite la mise
en œuvre de plusieurs opérations ainsi que le découpage de la réponse en plusieurs
étapes.
4.1.2) Les opérateurs ensemblistes
12
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Les opérateurs ensemblistes s‟appliquent sur des relations considérées comme des
ensembles.
L‟union, la différence et l‟intersection ne peuvent se faire que sur des ensembles
compatibles çàd ayant même schéma (mêmes attributs se correspondant deux à deux et
ayant le même domaine de valeurs).
a) L’Union
L‟union de deux relations génère une relation dont les tuples sont ceux appartenant à
l‟une ou à l‟autre des relations ou aux deux. En cas de tuples identiques, les doublons
sont éliminés.
Syntaxe : RelationRésultat = UNION(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat

Relation1 Relation2
Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14

La relation VIN3 ci-après nous donne les vins appartenant à VIN1 ou à VIN2 (càd VIN3 =
UNION(VIN1,VIN2) :
VIN3 Cru Millésime Degré
Macon 1977 12
Macon 1980 12
Saumur 1979 14
Chablis 1979 14
Mercurey 1978 12
Sancerre 1979 11

b) L’Intersection
L‟intersection de deux relations génère une relation dont les tuples sont ceux
appartenant simultanément aux deux relations.
Syntaxe : RelationRésultat = INTERSECTION(Relation1, Relation2)

13
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

De façon schématique, on a :
RelationRésultat

Relation1 Relation2
Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14

La relation VIN4 ci-après nous donne les vins appartenant à VIN1 et à VIN2 (càd VIN4 =
INTERSECTION(VIN1,VIN2) :
VIN4 Cru Millésime Degré
Macon 1980 12

c) La Différence
La différence de deux relations génère une relation dont les tuples sont ceux
appartenant à la première relation mais ne se trouvant pas dans la seconde relation.
Syntaxe : RelationRésultat = DIFFERENCE(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat

Relation1 Relation2

Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14

La relation VIN5 ci-après nous donne les vins appartenant à VIN1 et à VIN2 (càd VIN5 =
DIFFERENCE(VIN1,VIN2) :
14
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

VIN5 Cru Millésime Degré


Macon 1977 12
Saumur 1979 14
Chablis 1979 14

d) Le Produit Cartésien
Le produit cartésien entre deux relations génère une relation dont les attributs sont la
concaténation (avec répétition) des attributs des deux relations et dont les tuples sont
tous ceux qu‟il est possible d‟obtenir par concaténation des tuples des deux relations.
Syntaxe : RelationRésultat = PRODUIT CARTESIENT(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat

Relation1 Relation2
Exemple :
Soient les relations R1 et R2 suivantes :

R1 A B R2 A C
1 1 1 7
2 0 4 5

R3 = PRODUIT CARTESIEN (R1, R2) donne :

R3 A B A C
1 1 1 7
1 1 4 5
2 0 1 7
2 0 4 5

4.1.3) Autres opérateurs


D‟autres opérateurs peuvent être utilisés en A.R., comme par exemple les opérateurs de
dénombrement ou de calcul.
a) Le Tri
Cet opérateur permet de classer selon des critères bien définis des tuples dans l‟ordre
voulu.
Syntaxe : RelationRésultat = TRI Relation(Attribut1↑, …, AttributN↓)
Exemple :
15
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Soit la relation R1 suivante :

R1 A B R2 = TRI R1(A↓, B↑) donne en extension :


1 1
2 0 R1 A B
1 0 8 4
8 4 2 0
1 0
1 1

b) Le Comptage
Cet opérateur permet de compter les tuples d‟une relation. On peut se passer de
spécifier la rubrique qui sert de critère comptage, auquel cas tous les tuples sont
comptés.
Syntaxe : RelationRésultat = COMPTAGE Relation(Attribut)
ou RelationRésultat = COMPTAGE Relation()
Exemple :
Soit la relation R1 suivante :

R1 A B R3 = COMPTAGE R1(A) donne :


1 1
2 0 R3 Comptage de A
1 0 4
8 4

c) Le Calcul
Cet opérateur permet de générer un ou plusieurs attributs calculés à partir d‟attribut(s)
pris d‟une relation de départ.
Syntaxe : RelationRésultat = CALCULER Relation(Règle de calcul)
Avec règle de calcul = {attributs calculés / fonctions statistiques, …}
Les fonctions statistiques habituellement utilisées sont les suivantes :
- Somme(Attribut) pour obtenir la somme des valeurs de cette colonne ;
- Minimum(Attribut) pour obtenir la plus petite valeur parmi celles contenues
dans cette colonne ;
- Maximum(Attribut) pour obtenir la plus grande valeur parmi celles contenues
dans cette colonne ;
- Moyenne(Attribut) pour obtenir la moyenne des valeurs contenues dans cette
colonne ;
Exemple :
Soit la relation R1 suivante :
16
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

R1 A B R4 = CALCULER R1(Somme(A)) donne :


1 1
2 0 R4 Somme(A)
1 0 28
8 4
3 3 R5 = CALCULER R1((A*B)) donne :
5 2 R5 A*B
7 0 1
1 3 0
0
32
9
10
0
3

d) Le Regroupement
Cet opérateur permet de regrouper les tuples en vue généralement d‟agréger les données
devant servir dans une opération de calcul.
Syntaxe : RelationRésultat = REGROUPER Relation(Attribut1, …, AttributN)
Lorsqu‟il s‟agit de regrouper puis de calculer simultanément, on peut écrire :
RelationRésultat = REGROUPER_et_CALCULER Relation(Attribut1, …, AttributN)
e) Le Renommage de rubrique
il est possible de renommer (changer de nom) à un attribut avant l‟affichage ou la
projection de ladite colonne.
Syntaxe : RelationRésultat = PROJECTION Relation(NouvNom :Attribut1, …, AttributN)
Exemple :
Soit la relation R suivante :

R A B R’ = CALCULER R (Diff :(A-B)) donne :


1 1 R’ Diff
1 0 0
1 4 1
3 3 -3
5 2 0
1 3 3
-2

R’’ = REGROUPER_et_CALCULER R (A, Minimum(B)) donne :


R’’ A Minimum(B)
1 0
3 3
5 2

17
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

4.2) Le langage SQL


SQL (Structured Query Langage) forme avec QBE (Query By Example) les deux
principaux langages utilisés par la plupart des SGBDR. Ces deux langages ont en
commun d‟être non-procéduraux, l‟utilisateur indiquant uniquement le résultat qui
l‟intéresse sans préciser comment y parvenir. Cependant, ils diffèrent dans leurs
principes d‟utilisation. SQL est un langage textuel alors que QBE est un langage visuel.
4.2.1) Le SQL
4.2.1.1) Le SQL comme langage de définition des données
(Data Definition Language = DDL)
Ce langage permettra de décrire les éléments d‟une base de données, notamment les
tables, les champs, les index, … La présence de [ ] dans les syntaxes qui suivent
signifient des parties optionnelles. On prendra soin de fermer toute table concernée par
une commande SQL portant sur la structure de cette table.
a) Création d’une table
Elle se fait par l‟instruction CREATE TABLE.
Syntaxe: CREATE TABLE NomTable(Champ1 typeChamp1, …, ChampN typeChampN,
Constraint NomIndex (ChampIndex1, …, ChampIndexN) ;

- NomTable est le nom de la table à créer ;


- typeChamp est le type et la taille du ou des champs à créer ;
- Constraint précise l‟index mono ou multi-champs à créer.
Ne pas oublier le point virgule à la fin de toute requête SQL
Exemple :
Créons la table liée à la relation EMPLOYE :
CREATE TABLE EMPLOYE (NumMatr Text(5), NomEmp Text(5), PreEmp Text(5),
DateNais DateTime, DateSce DateTime, Salaire Integer, CodSce Text(5)
CONSTRAINT IndEmp Unique (NumMatr)) ;
b) Création d’index
Elle se fait par l‟instruction CREATE INDEX.
Syntaxe: CREATE [UNIQUE] INDEX NomIndex ON NomTable (ChampIndex1, …,
ChampIndexN) ;

- Create [Unique] Index précise le nom de l‟index à créer et la possibilité ou non d‟avoir
des doublons ;
- NomIndex est le nom de l‟index à créer ;
18
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Exemple :
En supposant que la table SERVICE est déjà créée sans index, créons un index sur cette
table en utilisant le champs CodSce :
CREATE UNIQUE INDEX IndSce ON SERVICE (CodSce)) ;
c) Modification de la structure d’une table
Trois cas sont possibles :
- suppression d‟un index (cette opération n‟est pas, en principe, une modification de la
structure de la table) :
Syntaxe :
DROP INDEX NomIndex ON NomTable ;
- ajout de nouvelle(s) colonnes :
Syntaxe :
ALTER TABLE NomTable ADD COLUMN Chp1 typeChp1, …, ChpN typeChpN ;
- suppression de colonne(s) :
ALTER TABLE NomTable DROP COLUMN Chp1 , …, ChpN ;
d) Suppression d’une table
Syntaxe :
DROP TABLE NomTable ;
4.2.1.1) Le SQL comme langage de manipulation
des données (Data Manipulation Language = DML)
Ce langage permettra de manipuler les données des tables créées, à travers soit une
mise à jour de ces données ou soit par „interrogation‟ de ces données.
a) Les instructions de modification
* Ajout d‟enregistrement (ou requête Ajout) :
Syntaxe 1 : Ajout d‟un seul enregistrement
INSERT INTO NomTable Champ1, Champ2,..
VALUES Val1, Val2,… ;
Syntaxe 2 : Ajout de plusieurs enregistrements
INSERT INTO NomTable Champ1, Champ2,..
SELECT [source.]Champ1, [source.]Champ2, …
FROM source ;
L‟utilisation de SELECT sera étudiée en détail plus loin.
* Suppression d‟enregistrement(s) :

Syntaxe :
19
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

DELETE [*]
FROM NomTable
[WHERE Condition] ;
La clause WHERE spécifie le critère logique (sous la forme champs opérateur valeur) que
doit respecter les tuples à supprimer. L‟astérisque * permet de supprimer tous les tuples
* Mise à jour des valeurs de champs
Syntaxe :
UPDATE NomTable
SET Champ1=NvelleValeur1, Champ2=NvelleValeur2, … ;
b) Les instructions d’interrogation
Elles se font à l‟aide du mot clé SELECT. Cette instruction permet d‟effectuer,
entre autres, des projections, des jointures, des sélections, etc… La structure (syntaxe)
de base de cette instruction est :
SELECT [DISTINCT]Champ1, Champ2, … (indique le résultat souhaité, une projection)
[FROM Table1, Table2, … ] (donne la ou les tables utiles)

[WHERE ConditionsLogiques] (exprime la ou les conditions de jointure ou sélection)


[GROUP BY ChampRegroupmt] (exprime le ou les champs de regroupement)
[HAVING ConditionRegroupement] (exprime la ou les condit° liée aux chps de regroupement)
[ORDER BY [Champ1 [ASC|DESC]], [Champ2 [ASC|DESC]], …]; (pour classer les tuples)

- Le mot clé DISTINCT permet d‟exclure les tuples qui sont en doublons dans le
résultat à afficher ;
- La clause FROM indique la provenance (càd les tables d‟origine) des données à
afficher ;
- ConditionsLogiques pourra mettre en jeu différents sortes d‟opérateurs, selon
les besoins. Exemple : <, >, <=, >=, =, BETWEEN, LIKE, AND, OR, NOT, IN,
NOT IN, EXIST, ALL, ANY.
- Pour faciliter l‟interprétation des resultats d‟un calcul d‟agrégation, il est
recommandé de faire figurer la valeur du champ de regroupement dans le
résultat de la requête ;
- La clause HAVING permet de ne retenir que certains groupes satisfaisant à un
critère déterminé : « GROUP BY nomchamp HAVING condition » provoque le
regroupement des lignes ayant la même valeur pour le champ spécifié et
remplissant la condition. Cette condition doit porter sur un champ de
regroupement ou sur le résultat d‟un calcul d‟agrégat.
20
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

- ASC permet de classer les tuples résultats par ordre croissant des valeurs du
ou des champs spécifiés, contrairement à DESC qui classe en décroissant.
- Les fonctions utilisées pour effectuer des calculs statistiques sont : AVG (pour
la moyenne), COUNT (pour le comptage), MAX (pour le maximum), MIN (pour le
minimum), SUM (pour la somme). La syntaxe générale de ces fonctions est
NomFonction(NomChamp). AVG, COUNT et SUM s‟appliquent par défaut à
toutes les valeurs résultantes du SELECT, mais l‟usage du mot clé DISTINCT
permet d‟écarter du calcul les éventuels doublons. La syntaxe deviendra alors
… NomFonction(Distinct NomChamp)…
Quelques exemples de passage de l’algèbre relationnelle vers le SQL
* PROJECTION
Liste (nom, prénoms, date de prise de service) des employés :
- En A.R. :
R = PROJECTION EMPLOYE(NomEmp, PreEmp, DateSce)
- EN SQL
SELECT NomEmp, PreEmp, DateSce
FROM EMPLOYE ;
ou bien
SELECT EMPLOYE.NomEmp, EMPLOYE.PreEmp, EMPLOYE.DateSce
FROM EMPLOYE ;
Cette seconde possibilité a permis de préciser la table de provenance des champs
projetés. Cela devient nécessaire si une confusion éventuelle pourra être faite sur ces
champs pendant l‟exécution de la requête.
* SELECTION
a) Liste des employés ayant pris service après le 1er Janvier 2000 et gagnant moins
de 200000 :
- En A.R.
R1 = SELECTION EMPLOYE((DateSce>#01/01/2000#)et(Salaire<200000))
- En SQL
SELECT *
FROM EMPLOYE
WHERE ((DateSce>#01/01/2000#)AND(Salaire<200000)) ;
Utiliser ici l‟étoile (*) revient à ne projeter aucun champ en particulier mais eux tous.
b) Lister tous les employés nés dans les années 70 :
En SQL :
21
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

SELECT *
FROM EMPLOYE
WHERE DateNais BETWEEN #01/01/1970# AND #31/12/1979# ;
ou bien
SELECT *
FROM EMPLOYE
WHERE (DateNais >=#01/01/1970#) AND (DateNais<=#31/12/1979#) ;
c) Lister tous les employés dont le nom commence par B :
SELECT *
FROM EMPLOYE
WHERE NomEmp LIKE “B*” ;
* (équi)JOINTURE
Informations sur les Employés et les services auxquels appartiennent ces
employés.
En A.R. :
R = JOINTURE EMPLOYE, SERVICE (Employe.CodSce = SERVICE.CodSce)
En SQL :
SELECT *
FROM EMPLOYE, EMPLOYE
WHERE EMPLOYE.CodSce = SERVICE.CodSce ;
* INTERSECTION
Liste des employés dont les N° matricules se trouvent parmi : E2, E3, E7, E9, E54.
En SQL :
SELECT *
FROM EMPLOYE
WHERE NumMatr IN („E2‟, „E3‟, „E7‟, „E9‟ );
* DIFFERENCE
Liste des employés dont les N° matricules ne se trouvent pas parmi ceux qui
suivent: E2, E3, E7, E9, E54.
En SQL :
SELECT *
FROM EMPLOYE
WHERE NumMatr NOT IN („E2‟, „E3‟, „E7‟, „E9‟ );
* COMBINAISON entre SELECTION, PROJECTION et JOINTURE

22
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

Nom, Prénoms, Libellé service des employés rattachés à la Direction des Affaires
financières :
En A.R. :
R1 = JOINTURE EMPLOYE, SERVICE (EMPLOYE.CodSce=SERVICE.CodSce)
R2 = JOINTURE R1, DIRECTION (R1.CodDir=DIRECTION.CodDir)
R3 = SELECTION R2 (LibDir = „DIRECTION DES AFFAIRES FINANCIERES‟)
R4 = PROJECTION R3 (NomEmp, PreEmp, LibSce
En SQL :
SELECT NomEmp, PreEmp, LibSce
FROM EMPLOYE, SERVICE, DIRECTION
WHERE EMPLOYE.CodSce = SERVICE.CodSce
AND SERVICE.CodDir = DIRECTION.CodDir
AND LibDir = „DIRECTION DES AFFAIRES FINANCIERES‟ ;

23
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES

24
Enseignant : Koffi M. HOUNGBEDJI

Vous aimerez peut-être aussi