Vous êtes sur la page 1sur 120

Sommaire

Introduction
Chapitre 1 7

1. Notion de Base de Données 7


2. Exemples de bases de données 7
3. Organisation d’une base de données 8
4. Données opérationnelles : Entités et association 12
5. Notion de système de gestion de base de données SGBD 12
6. Dictionnaire de base de données 13
7. Administrateur de base de données 13
8. Les avantages de base de données 13
9. Architecture de base de données 16
10. Fonctionnement d’un système de base de données 18

Chapitre 2 19

Le modèle relationnel

1. Domaine 19
2. Notion de produit cartésien 19
3. Relation 20
3.1. Définition 20
3.2. Représentation relation 20
3.3. Attribut 20
3.4. Schéma de relation 21
3.5. Exemple de relation 21
4. Clé primaire 22
4.1. Définition
4.2. Exemple
5. Clé étrangère 22
5.1. Définition
5.2. Exemple
6. Intégrité 23
6.1. Intégrité de domaine
6.2. Intégrité de relation
6.3. Intégrité de référence
7. Base de données relationnelle 23
7.1. Définition
7.2. Exemple de base de données relationnelle
8. Normalisation 25
9. Dépendance fonctionnelle 25
9.1. Définition
9.2. Exemples 26
10. Dépendance fonctionnelle complète 26
10.1. Définition
10.2. Notation

BD-SMI5 1 FSA-AGADIR
10.3. Exemples 27
11. Dépendance fonctionnelle directe 27
11.1. Définition
11.2. Exemple
12. Dépendance fonctionnelle réflexive 28
12.1. Définition
12.2. Exemples
13. Les formes normales 28
13.1. Première forme normale
13.2. Deuxième forme normale
13.3. Troisième forme normale 29
14. Normalisation d’une base de données relationnelle 29
15. Graphe de dépendances fonctionnelles 30
15.1. Définition
15.2. Exemple
16. Exercices 31
16.1. Exercice 1
16.2. Exercice 2

Chapitre 3 32

L’algèbre relationnelle
1. Les opérateurs ensemblistes 32
1.1. L’opérateur produit cartésien 32
1.2. L’opérateur union 33
1.3. L’opérateur différence 36
1.4. L’opérateur intersection 37
2. Les opérateurs relationnels 38
2.1. L’opérateur de projection 39
2.2. L’opérateur de sélection 40
2.3. Opérateurs de jointures 42
2.3.1. Jointure généralisée
2.3.2. L’opérateur Téta Jointure 45
2.3.3. L’opérateur Equi jointure 47
2.3.4. La jointure naturelle 47
2.3.5. Les jointures externes 50
2.3.5.1. La jointure externe complète
2.3.5.2. La jointure externe gauche 52
2.3.5.3. La jointure externe droite 53
3. Agrégation 54
3.1. Agrégation sans champ de partitionnement 55
3.2. Agrégation avec plusieurs champs de partitionnement 55
4. L’arbre algébrique 56

Chapitre 4 59

Langage de définition des données


1. La commande create 61

BD-SMI5 2 FSA-AGADIR
1.1. Création des bases de données 61
1.2. Création des tables 61
1.3. Création des index 67
1.4. Création des utilisateurs 69
2. La commande drop 69
2.1. Suppression des bases de données 69
2.2. Suppression des tables 69
2.3. Suppression des index 70
2.4. Suppression des utilisateurs 70
3. La commande alter70
3.1. Modification des tables 71
3.2. Modification des index 73
3.3. Modification des utilisateurs 74

Chapitre 5 75

Langage de manipulation des données


1. La commande insert 75
2. La commande update 77
3. La commande delete 78
4. La commande select 78
4.1. Projection simple 79
4.2. Sélection simple 80
4.3. Utilisation des opérateurs ensemblistes 84
4.3.1. L’opérateur union 84
4.3.2. L’opérateur intersect 86
4.3.3. L’opérateur Minus 87
4.3.4. Le produit cartésien 89
4.4. Les jointures 89
4.4.1. Jointures internes
4.4.1.1. Les jointures internes naturelles 89
4.4.1.2. Les jointures internes généralisés 90
4.4.2. Les jointures externes 90
4.4.2.1. Les jointures externes naturelles 90
4.4.2.2. Les jointures externes généralisée 91
4.4.3. Auto-jointure 91
4.5. Les expressions d’agrégation ou de groupement 92
4.6. Le tri 96
5. Compléments 97
5.1. Les expressions chaînes de caractères 97
5.2. Les expressions date 98

BD-SMI5 3 FSA-AGADIR
Chapitre 6 101

Langage de contrôle des données


1. Le contrôle des autorisations d’accès aux données 101
2. Privilèges et rôles 102
2.1. Définition de privilège 102
2.2. Privilège objet 102
2.3. Privilège système 102
2.4. Définition de rôle 102
2.5. Création de rôle 103
3. Octroie/Retrait de privilèges 103
3.1. La commande GRANT 103
3.1.1. Syntaxes de Grant 103
3.1.2. Les options de Grant 104
3.1.3. Privilèges et dictionnaire de données 105
3.2. La commande REVOKE 106
3.2.1. Syntaxes de Revoke 106
3.2.2. Revoke avec options 106
4. Exercices 107

Chapitre 7 109

Normalisation des relations


1. Dépendance fonctionnelle DF 109
1.1. Définition 1 109
1.2. Définition 2 109
1.3. Définition 3 110
1.4. Notation 110
1.5. Définition 4 110
2. Les propriétés de la dépendance fonctionnelle 110
2.1. Réflexivité 110
2.2. Augmentation 111
2.3. Transitivité
2.4. Union
2.5. Pseudo-transitivité
2.6. Décomposition
3. Fermeture d’un ensemble de dépendances fonctionnelles 111
3.1. Définition 1 111
3.2. Définition 2 112
3.3. Définition 3 112
3.4. Propriétés 112
3.5. Fermeture d’un ensemble d’attributs 112
3.6. La fermeture transitive d’un ensemble de dépendances fonctionnelles 113
3.6.1. Définition
3.7. Couverture minimale d’un ensemble de dépendances fonctionnelles 113
3.7.1. Définition

BD-SMI5 4 FSA-AGADIR
3.7.2. Algorithme de calcul de couverture minimale 114
4. Normalisation des relations 114
4.1. Définition
4.2. Propriété 115
4.3. Décomposition sans perte 115
4.4. Propriété
4.5. Décomposition préservant les dépendances 115
4.6. Propriété 116
4.7. Décomposition d’une relation en 3 forme normale 116
4.7.1. Théorème 116
4.7.2. Algorithme de normalisation en 3 forme normale 116
4.8. Normalisation d’une relation en forme normale de Boyce-Codd 117
4.8.1. Définition 117
4.8.2. Propriété 118
4.8.3. Théorème 118
4.8.4. Algorithme de décomposition en FNBC 118

Références 121

BD-SMI5 5 FSA-AGADIR
4.1.

Introduction

Ce cours de bases de données est destiné aux étudiants de la licence inscrits au module de base de
données de la filière SMI (Sciences Mathématiques et Informatique).

Il présente les concepts essentiels des systèmes de gestion de bases de données que ce soit sur
l’aspect théorique ou implémentation.

Le premier chapitre traite des généralités sur les bases de données sans tenir compte des
caractéristiques de leurs modèles.

Le second chapitre montre les notions du modèle relationnel de base de données qui reste, jusqu’
à maintenant, le modèle dominant.

Le troisième chapitre explique les opérateurs de l’algèbre relationnelle. Il montre comment on


peut créer des requêtes simple ou complexe pour interroger une base de données relationnelle.

Le chapitre quatre donne, au début, un aperçu du langage SQL(abréviation de Structured Query


Language) langage de bases de données relationnelles. Ensuite, on y décrit les commandes du
langage de définition de données, considéré comme sous-langage de SQL. Ces commandes
incluent :

- création des objets de base de données : base de donnés table, utilisateur, index, etc ;
- suppression des objets de base de données ;
- modification des structures des objets de base de données.

Le chapitre cinq explique l’utilisation des commandes du langage de manipulation des données :
recherche et calcul des données, insertion des données, suppression, et modification des données.
Il montre aussi comment sont traduites les requêtes algébriques issues de la théorie des ensembles
ou propres à l’algèbre relationnelle en requêtes SQL.

Le sixième chapitre traite des commandes du langage de contrôle des données, commandes qui
assurent la confidentialité dans le langage QL.

Le chapitre 7 représente une introduction à la normalisation des relations. Il traite uniquement de


la normalisation en troisième forme normale qui est la plus utilisée et de la normalisation en
forme normale de Boyce-Codd.

Pour approfondir les concepts vus dans ce cours, l’étudiant, s’il le juge nécessaire, peut consulter
les ouvrages présentés en références à la fin de ce document.

BD-SMI5 6 FSA-AGADIR
Chapitre 1
Généralités et Concepts de Base
Le but de ce chapitre est de définir de manière générale (loin de tout modèle) les concepts
fondamentaux des bases de données. On va définir dans ce chapitre, ce qui est une base de
données et en donner des exemples. Ensuite, on parlera des concepts entités et associations
qui constituent les éléments de données de toute base de données. On expliquera aussi les
concepts de système de gestion de base de données et ses fonctionnalités, de dictionnaire de
base de données, de l’administrateur de base de données et ses fonctions. Après on
expliquera certaines qualités de base de données et on terminera par donner l’architecture et
le fonctionnement d’un système de base de données.

1. Notion de base de données

Une base de données est une collection intégrée de données ou d’information modélisant un
sujet ou un domaine donné. Elle stocke une masse importante de données. Pour simplifier le
stockage et la restitution des données dans un système de base de données, les données sont
organisées en structures qui dépendent du modèle de base de données utilisé. Plusieurs
modèles de données sont utilisés en informatique. Parmi ces modèles, on cite le modèle
relationnel qui est à la base de la majorité de bases de données actuellement utilisées. Ces
bases de données sont nommées bases de données relationnelles. Dans la suite de notre
cours, nous allons nous intéresser au modèle relationnel.

Une base de données doit être consistante, elle doit refléter la réalité du sujet qu’elle
modélise.

2. Exemples de bases de données

Pour s’approcher plus des bases de données, on considère les exemples de bases de données
suivants :

 Gestion d’une bibliothèque : les données que peut rassembler une base de données
relative à une bibliothèque sont par exemple :

- Des données sur les livres : titre, auteur, éditeur, année édition, nombre de pages,
langue, prix, etc.

- Des données sur les membres de la bibliothèque : nom du membre, fonction, date
d’inscription, émail, sexe, etc.

 Gestion des commandes : les informations qui peuvent être mises en jeu ici sont :

- Des données sur les produits : nom du produit, seuil du produit en stock, numéro du
fournisseur du produit, etc.

- Des données sur les clients : nom du client, son adresse, sa ville, etc.

BD-SMI5 7 FSA-AGADIR
3. Organisation d'une base de données

La conception d’une base de données, débute par construire ce qu’on appelle schéma
conceptuel de données. Ce schéma est constitué d’entités et d’associations entre ces entités.
Il se transforme en schéma de base de données en utilisant des règles dépendant du modèle
de la base de données utilisée.

On explique, maintenant, ce qui est entité et association.

Entité

Définition d’entité

Une entité est un concept qui décrit un objet du sujet étudié. Elle possède un nom et des
propriétés appelées aussi attributs qui la décrivent dans le contexte de ce sujet.

Une entité est représentée par le symbole graphique suivant:

nomEntité Nom de l'entité


Attribut1
Attribut2
Attribut3 liste des attributs
...
Attributn
Figure 1. Représentation d'une
entité.

On peut aussi utiliser le symbole suivant :

nomEntité

Figure 2. Représentation simplifiée d'une entité.

Exemples d'entités

Par exemple, dans la base de données Bibliothèque, l’objet Livre est une entité dont les
attributs sont : Numéro de livre, Titre, Auteur, Spécialité, Nbre de pages, Prix.

Cette entité peut être schématisée par :

BD-SMI5 8 FSA-AGADIR
Livre
codeLivre
titre
auteur
éditeur

Figure 3. Représentation de l'entité livre

Association

Définition d’association

Les entités d’une base de données ne sont pas isolées. Elles sont liées. Cette liaison se fait par
une association.

Une association est un lien entre 2 ou plusieurs entités. Elle possède un nom et peut avoir à
l'image de l'entité des attributs la décrivant dans le contexte de la base de données.

Une association est représentée par le symbole graphique suivant:

nomAssociation

Figure 4. Représentation d’une association sans attributs

On a aussi la représentation suivante :

nomAssociati on
Attri but1
Attri but2
Figure 5. Représentation
d’une association avec attributs

Exemples d’associations:

Considérons en plus de l'entité Livre, l'entité Membre. Cette entité est décrite par les
attributs suivants :

 Numéro du membre,
 nom,
 prénom,
 émail,

BD-SMI5 9 FSA-AGADIR
 date d'inscription.

Les entités Membre et Livre sont liées par l’association Emprunter qui modélise l'information
suivante :

des membres empruntent des livres.

Le schéma de cette association est :

membre Livre

codeMembre codeLivre
emprunter
0,n titre
nom 0,n
prénom auteur
éditeur

Figure 6. Association entre membre et livre

Cette association peut avoir l'attribut dateEmprunt et on écrit alors:

membre Livre

codeMembre 0,n emprunter codeLi vre


0,n ti tre
nom dateEmprunt
prénom auteur
éditeur

Figure 7. Association entre Membre et Livre avec attribut

Degrés d’associations :

L’association "Emprunter" lie deux entités membre et livre. On dit que c'est une association
binaire ou de degré 2-aires.

Une association peut aussi lier trois entités : association ternaire ou 3-aire.

On trouve aussi des associations qui lie une entité à elle-même : association réflexive ou
récursive. Par exemple, un dossier contient d’autres dossiers.

Un autre exemple : une personne se marie avec une autre personne.

Un troisième exemple : un employé est chef d’autres employés.

En général une association peut lier deux ou plusieurs entités ou une entité avec elle-même.

Exemple étendu

Considérons le diagramme suivant :

BD-SMI5 10 FSA-AGADIR
empl oyé
0,n soci été

1 3 0,n
est_chef travai l l e
affecté
0,n 0,n
0,n 0,n 0,n

2
proj et
département

Ce diagramme contient 3 associations :

1:"affecté" signifie que employé est affecté à un département. Son type est 2-aire ;

2: "est chef" signifie employé est chef de département. Son type est 2-aire ;

3 :"Travaille" modélise un employé d'une société travaille dans un projet. Son type est 3-aire.

Remarques

 Deux entités peuvent être reliées par des relations différentes, dans ce cas les relations
doivent être différenciées (1 et 2 dans le schéma):
 Les relations font partie de la base de données de la même façon que les entités, elles ne
doivent donc pas être négligées.
 Une relation n-aire sert à lier plusieurs entités ("Travaille"). Elle peut être implémentée
sous forme d’un pointeur (les modèles hiérarchique, réseau, objet), ou sous forme d’une
table ou d’attribut.

Les types d’associations

Il y a trois types d’associations : Un à Plusieurs, Plusieurs à Plusieurs et Un à Un.

Pour les expliquer, nous allons nous baser sur des exemples.

Association Un à Plusieurs

Soit l’association est_inscrit qui modélise la phrase suivante

Un étudiant est inscrit à une filière.

Pour un étudiant, il y a une seule filière et pour une filière, il y a plusieurs étudiants.

L’association est_inscrit est dite association un (en partant d’étudiant) à plusieurs(en partant
de filière).

Association Plusieurs à Plusieurs

Considérons l’association est_inscrit définie par

Un étudiant est inscrit à des modules.

BD-SMI5 11 FSA-AGADIR
Pour un étudiant, il y a plusieurs modules, de même pour un module il y a plusieurs
étudiants.

L’association est_inscrit est dite association plusieurs (en partant d’étudiant) à plusieurs (en
partant de module).

Association un à un

Soit l’association gère qui représente le lien entre agence et région :

Une agence gère une région

et avec la contrainte :

Une agence gère une seule région et une région n’est gérée que par une seule agence.

C’est une association un (coté agence) à un(coté région).

4. Données opérationnelles

Entités et associations qui constituent une base de données sont appelées données
opérationnelles.

Remarque

Les entités sont souvent nommées par des noms, alors que les associations sont nommées
par des verbes.

5. Notion de SGBD: Système de Gestion de Bases de Données

Un SGBD est un logiciel permettant à son utilisateur de:

 Créer des bases de données et les objets associés (tables, index, utilisateurs, fonctions),
 Stocker et modifier les données de ces bases (insertion, modification, suppression),
 Restituer les données stockées dans les bases de données,
 Administrer les bases de données (gestion des utilisateurs, rôles, privilèges, etc.),
 Etc.

Le SGBD permet d’avoir un environnement à exploiter de manière simple et efficace pour le


stockage et la restitution des données.

Ce logiciel joue le rôle d’intermédiaire entre l’utilisateur et les données dans la base de
données. En effet l’utilisateur exprime sa requête (demande) en utilisant un langage simple
(SQL : Structured Query Language) et la pressente au SGBD. Ce dernier l’interprète et
exécute les instructions qu'elle contient ou envoie un message d'erreurs.

BD-SMI5 12 FSA-AGADIR
6. Dictionnaire de base de données

Chaque base de données possède un dictionnaire qui contient les définitions et toutes les
informations sur les objets de cette base de données (entités, utilisateurs, contraintes,
privilèges, etc.). Ce dictionnaire est en soi une base de données appelée Meta base. Il est mis
à jour uniquement par le SGBD. Les utilisateurs de base de données peuvent y faire des
consultations.

7. Administrateur de base de données

Une base de données est en général un système de grande quantité d'informations accédé par
plusieurs utilisateurs. Une personne ( ou groupe de personnes) est nécessaire pour garder en
vie ce système. C'est l'administrateur de base de données (ABD) appelé DBA ou dans le
jargon de base de données.

Le DBA fait parti du système de base de données et sa présence est obligatoire lors de la
conception d'une base de données. Ses responsabilités comprennent :

 Allocation de l'espace mémoire exigée par la base de données,


 Création et modification de la structure de la base(objets de la base),
 Inscription des utilisateurs et les assister pour tirer profit de la base
 Maintenir la sécurité de la base,
 Réalisation des sauvegardes et restaurations de la base,
 Recouvrement ou reprise après panne : il est nécessaire de remettre la base de données
en marche à la suite d'une défaillance matérielle, erreur humaine, etc.

Remarques

Les utilisateurs de base de données sont classés en :

- U
tilisateurs standard
- A
dministrateurs
- D
éveloppeurs
- A
nalystes et programmeurs

8. Les avantages des bases de données

Nous allons citer quelques avantages qui poussent les concepteurs et les développeurs à
stocker les informations dans une base de données :

 Intégration des données

La centralisation des données dans une base de données facilite bien leur gestion et leur c
contrôle. Plus l’information est dispersée, plus elle est redondante et moins elle est contrôlée.
L’intégration des données permet d’acquérir aux bases de données d’autres avantages
importants que l’on va présenter par la suite

BD-SMI5 13 FSA-AGADIR
.

D3 D1
D2
BD

Figure 8. Intégration des données

 Contrôle de redondance

La redondance est la présence de la même donnée dans des endroits différents dans un
système d’information. Cette redondance peut être réduite ou même éliminée.

Exemple :

Avant les bases de données, il y avait le schéma suivant :

D1 : A, B, C fich1

D2 : D, B, C fich2

D1 A, B, C

D2 A, B, D

Figure 9. Système de gestion de fichiers et redondance

A, B, C et D appartiennent au même système d’information. Les données B et C sont


redondantes.

A l’arrivée des bases de données les choses deviennent alors

D1
A, B, C, D
D2

Figure 10. Base de données et non redondance

A, B, C et D appartiennent à la même base de donnée et la redondance est éliminée.

BD-SMI5 14 FSA-AGADIR
 La cohérence

Une base de données est cohérente si elle ne contient pas des données contradictoires
fournit la même réponse à une requête formulée de différentes façons ou exécutées plusieurs
fois. L'incohérence peut être due à la redondance. En effet, considérons le schéma suivant
:

t1 E1:A=x E2:A=x
Entre t1, t2 E1:A=y E2:A=x
t2 E1:A=y E2:A=y

Figure 11. Cohérence et redondance

t1 est l'instant de modification de A dans l'endroit E1.

t2 est l'instant de modification de A dans l'endroit E2.

Entre t1 et t2 le système n'est pas cohérent. A ce moment, l’affichage de la valeur de A peut


donner lieu à des réponses différentes x ou y selon l’emplacement utilisé pour lire A.

La cohérence peut être respectée en éliminant la redondance.

 L’intégrité

L’intégrité signifie que les données stockées dans la base sont exactes ou correctes. Elles
respectent les contraintes de l’application. L’incohérence entre deux valeurs de la même
donnée est une perte d’intégrité (conséquence de la redondance). Même si la redondance
n’existe pas, une base de données peut contenir des valeurs fausses.

Contre-exemple : Le salaire d’un employé est négatif ou nul.

 Partage de la base entre plusieurs utilisateurs : le SGBD permet aux utilisateurs d’accéder
simultanément à la même base de données (accès concurrent),
 Sécurité ou confidentialité : les accès à la base (lecture/écriture) sont protégés par le
SGBD. Un accès non autorisé ne peut être effectué. En plus, les données centralisées
sont faciles à protéger que les données dispersées. La reprise après panne permise par les
SGBD assure la disponibilité des données qui est un aspect de sécurité.
 Distribution des données : la base de données peut être partitionnée sur plusieurs sites,
sur diverses plateformes. Ce qui peut améliorer les performances du système.
 Indépendance logique et physique vis-à-vis des programmes

Les bases de données sont conçues indépendamment des programmes qui vont l’exploiter.

Une base de données peut donc évoluer sans perturber les programmes. Cette évolution
peut être logique et/ ou physique.

BD-SMI5 15 FSA-AGADIR
L’évolution logique consiste en la modification du schéma de la base : l’ajout de nouvelles
entités, attribut, association ou encore par décompositions des entités existantes.

L’évolution physique se présente au niveau de la modification de la structure physique de la


base.

Pour voir comment elle était cette dépendance avant les bases de données, on considère les
différences entre un système de gestion de gestions de fichiers et un système base de
données.

Approche Système de Gestion de Fichiers : SGF

Soit le fichier prêt d’un système d’information d’une bibliothèque ou chaque membre peut
emprunter quatre livres au maximum.

Struct {char membre [50] ;

int livre1;

int livre2;

int livre3;

int livre4;} prêt;

On dispose de trois programmes qui utilisent ce fichier. Chacun doit en inclure une
description (voir schéma).

Description
prog 1

Description
prog 2 Prêt

Description
prog 3

Figure 12. Approche SGF : dépendance logique

Toute modification de la description du fichier dans un programme i exige la même


modification dans les programme k différents i.

Approche de bases de données : BD

Dans cette approche, la description des données est centralisée. On la trouve dans la base de
données : c’est le dictionnaire de la base de données. Chaque programme dispose d’un filtre
pour décrire les informations dont il a besoin comme il le montre la figure suivante. La base
de données peut évoluer an ajoutant ou en modifiant des entités ou des attributs sans
perturber les programmes. La modification peut être faite uniquement dans la définition des
filtres appelés aussi des vues.

BD-SMI5 16 FSA-AGADIR
Description Filtre1 Prog1
BD logique
de la base
Filtre2 Prog2

Figure 13. Approche BD : dépendance logique réduite

Remarque

Le système base de données offre non seulement une méthode de manipulation et de


stockage des données mais aussi une méthode de conception des systèmes d’information. Il
permet de penser la structure de la base indépendamment des programmes qui la
manipulent. C'est la décomposition données/traitements représentant un des aspects de base
des méthodes de conceptions classique : approche structurée.

9. Architecture d’un système de base de données

Cette architecture est donnée en trois niveaux : niveau externe, niveau conceptuel et niveau
interne. Chacun de ces niveaux est décrit par des schémas.

apl1 apl2 apl3

Niveau externe Vue1 Vue2 Vue3

Niveau conceptuel Modélisation


Schéma conceptuel Domaine
Relationnel Normalisation

Niveau logique Schéma logique


Niveau interne Contraintes matérielles et logicielles
Niveau physique Schéma physique

BD

Figure 14. Architecture ANSI/ SPARC d’un système de base de données

 Le niveau externe : dans ce niveau, on trouve les fenêtres ou filtres (vues) à travers
lesquelles l’utilisateur voit les données dans la base (entité et relation).
 Le niveau conceptuel : ce niveau est issu de l’analyse et de la modélisation du sujet
étudié. A ce niveau sont spécifiées les données opérationnelles et les règles de gestion
(les contraintes).
 Le niveau interne est décrit par deux schémas : schéma logique et schéma physique.

BD-SMI5 17 FSA-AGADIR
- Schéma logique : ce schéma consiste a choisir la représentation interne de la base :
un système de gestion de fichiers, base de données réseau ou base de données
relationnelle.
- Schéma physique : au niveau de ce schéma, on définit les structures de stockage, la
correspondance entre structures logique et physique et les modes d'accès à la base
(table, set, enregistrement, accès séquentiel, aléatoire, correspondance entre données
et leurs emplacements physiques : détail géré par le SGBD).

10. Fonctionnement d’un système de base de données

On peut résumer ce fonctionnement par la figure suivante :

Utilisateur/programmes
1

SGBD Fonctions de 6
Dialogue avec utilisateurs
2
SGBD Descriptions des
Données (dictionnaire)
SGBD Fonctions de
5
Dialogue avec S.E.

4
3 S.E.
BD

Figure 15. Fonctionnement d’un système de base de données.

Description

1. L’utilisateur formule sa requête en utilisant un langage de haut niveau et la présente


au SGBD.
2. Le SGBD vérifie l’existence des schémas externes et les autorisations d’accès.
3. Le SGBD traduit la demande de l’utilisateur en termes de commandes comprises par
le Système d’exploitation.
4. Le système d’exploitation recherche les données de la base et les met dans les
tampons réservés au SGBD.
5. le SGBD extrait les données répondant à la requête.
6. Le SGBD présente les données à l’utilisateur.

BD-SMI5 18 FSA-AGADIR
Chapitre 2
Le modèle relationnel

On va étudier dans ce chapitre, les concepts de base du modèle relationnel inventé par E.F.Codd,
mathématicien d'un centre de recherche d'IBM à San-josé.

L'informatisation d'une application exige la traduction des ses données opérationnelles en


concepts informatiques. Pour ce faire, on utilise un modèle de données. Parmi les modèles qui
ont marqué le domaine informatique, il y a : le modèle réseau, le modèle hiérarchique, le modèle
relationnel et le modèle objet.

Le modèle hiérarchique est le plus ancien. Les entités dans ce modèle sont appelés segments et
deux entités ne peuvent être liées que par un seul type d'association appelée père-fils (1:n).

La base de données peut être schématisé par un arbre.

Dans le modèle réseau, les entités sont dites types d'enregistrement et les associations (sous
forme de pointeurs) sont de types (n:m).

Le modèle objet est basé sur les concepts objets, classes et héritage lui permettant de représenter
simplement les objets complexes.

Le modèle relationnel sujet de ce chapitre est actuellement le plus utilisé grâce à ses concepts
simples (domaine, relation…) et la puissance de ses opérateurs (union, différence…).

Par la suite, on va définir les concepts de domaine, relation et attribut.

1. Domaine

Un domaine est un ensemble de valeurs partageant le même sens. Un domaine est


caractérisé par un nom.

Exemples

 Le domaine de matricule des employés qu'on nomme par "mate" est les chaînes de
caractère de longueur 20.
 Le domaine du salaire est les réels de longueur 8 avec 2 chiffres après la virgule.

2. Produit cartésien.

Soit D1, D2…Di…Dn des domaines. Le produit cartésien des Di qu'on note par ∏Di est
l'ensemble des éléments de la forme (u1, u2, …,ui,…,un) avec ui Є Di.

BD-SMI5 19 FSA-AGADIR
3. Relation
3.1. Définition

Soit Di, 1≤i≤n des domaines. Une relation de nom R est un sous-ensemble du produit cartésien
∏Di. On écrit R С ∏Di.

Si U Є R alors U=(u1, u2, …,ui,…,un) avec ui Є Di.

U est appelé un tuple ou n-uplets. n s'appelle le degré de la relation.

3.2. Représentation relation

Souvent, on note une relation par une table dont les lignes sont les tuples et chaque colonne
contient les valeurs d'un même domaine. C’est une représentation en extension.

Auteur

1 Iman mohammed
2 yasser fatima
3 Slaoui Ali

Figure 1. Notation tabulaire d’une relation

3.3. Attribut

A chaque colonne, on donne un nom appelé attribut de la relation. Par exemple, si on reprend la
relation donnée à la définition précédente et on attribue à chacune de ses colonnes un nom ou
attribut, on obtient la table suivante :

Auteur
Num_auteur Nom_auteur Prénom_auteur
1 Iman mohammed
2 yasser fatima
3 Slaoui Ali

Figure 2. Attributs des noms attributs aux colonnes.

BD-SMI5 20 FSA-AGADIR
3.4. Schéma de relation

Une relation peut être représentée aussi par son nom et ses attributs sans les lignes. C’est une
représentation en compréhension. Elle s’appelle schéma de relation.

En général, le schéma de relation est à la figure suivante :

nomR elation(attr1,attr2,…).

Figure 3. Schéma de relation

Par exemple,

Auteur(num_auteur, nom_auteur, prénom_auteur) est le schéma de la relation auteur.

3.5. Exemple de relation

Si on considère de nouveau la relation Auteur. Elle est composée de trois attributs :

 Num_auteur,
 Nom_auteur et
 Prénom_auteur.

Les domaines de ces attributs peuvent être définis comme suit :

 D1 soit le domaine de num_auteur (entiers positifs),


 D2 soit le domaine de Num_auteur (chaînes de longueur <20)
 et D3 le domaines prénom_auteur (chaînes de longueur <20).

N.B. Les tuples de Auteur sont bien des éléments de D1x D2x D3.

Remarques

BD-SMI5 21 FSA-AGADIR
 La définition d'une base de données doit en général commencer par la définition des
domaines.
 Les domaines D2 et D3 sont identiques, on peut prendre D3=D2.
 Dans certains SGBD, on exploite directement les types prédéfinis. La notion de domine
n’est prise en charge.

4. Clé primaire.
4.1. Définition

Une clé primaire d'une relation est un attribut ou groupe d'attributs de cette relation, qui identifie
de manière unique chaque tuple de la relation.

Remarque

L'existence d'une clé primaire est confirmée par le fait qu'une relation est un ensemble d'éléments
distincts. La clé primaire peut être formée par tous les attributs de la relation. Cependant, une clé
primaire doit être minimale (prendre le minimum d'attributs qui identifie chaque tuple de la
relation).

4.2. Exemple

Num_auteur.

Le domaine d'une clé primaire est appelé domaine primaire.

5. Clé étrangère.
5.1. Définition

Soit R1 et R deux relations. Un attribut "A" de "R1"est dit clé étrangère de cette relation si

 A n'est pas clé primaire de R1


 A est clé primaire de R2.

R1 est appelée relation référençante et R2 est la relation référencée.

Le domaine de A est appelé domaine primaire.

R2 est dite aussi relation maître. R1 est relation esclave.

5.2. Exemple

Considérons les relations suivantes :

Auteur (num_auteur, nom_auteur, prénom_auteur),

Ouvrage (num_ouvrage, titre, année, reliure)

BD-SMI5 22 FSA-AGADIR
A_ecrit(num_auteur, num_ouvrage).

Dans A_ecrit, num_ouvrage et num_auteur sont des clés étrangères.

Les clés étrangères représentent les liens entre les relations et permettent la navigation ou le
passage entre les relations en utilisant des jointures(opérateurs de l’algèbre relationnelle).

6. Intégrité

L'intégrité permet de contrôler la validité des données dans une base de données. On distingue
deux catégories d’intégrité : intégrité structurelle dépendant du modèle de base de données utilisé
et intégrité applicative ou d’entreprise dépend de l’application de base de données à développer.
L’intégrité structurelle comprend : intégrité de domaine, intégrité de relation et intégrité
référentielle.

6.1. Intégrité de domaine

Les valeurs d'un attribut doivent appartenir à son domaine.

6.2. Intégrité de relation

Chaque relation possède une clé primaire unique et non null. La clé primaire est soulignée dans
un schéma de relation.

Note. Null signifie une valeur inconnue.

6.3. Intégrité de référence

La valeur d'une clé étrangère dans la relation référençante doit figurer comme valeur de la clé
primaire associée dans la relation référenciée. Autrement dit, si v1 est une valeur d'une clé
étrangère alors soit v1 est Null, soit elle est une valeur de la clé primaire associée.

Par exemple, on ne peut avoir dans la relation "A_ecrit" un auteur avec un numéro d'ouvrage qui
ne figure pas dans la relation"Ouvrage".

Remarque

En général, les SGBD relationnels gèrent les 3 types d'intégrités.

7. Base de données relationnelle


7.1. Définition

On peut définir une base de données relationnelle comme une collection de relations respectant
des contraintes d'intégrité. Chaque relation possède un nombre fini d'attributs (colonnes) et
contient un nombre quelconque de tuples (lignes).

7.2. Exemple de base de données

Base de données bibliothèque. Cette base est composée de trois relations qui sont

BD-SMI5 23 FSA-AGADIR
Auteur (num_auteur, nom_auteur, prénom_auteur),

Ouvrage (num_ouvrage, titre, année, reliure)

A_ecrit(num_auteur, num_ouvrage).

Le contenu de ces relations est donné par les tables suivantes :

Auteur
Num_auteur Nom Prénom
1 Bassil Ali
2 Balla Ahmed
3 Ada Reda

Livre
Num_livre Titre Année
1 Sgbd 1984
2 Bases de données 1994
3 Modèle relationnel 1996
4 Réseau 1998

A_ecrit
Num_auteur Num_livre
1 2
2 1
3 3
3 4

Figure 4. Exemple de base de données relationnelle.

BD-SMI5 24 FSA-AGADIR
8. Normalisation

Pour simplifier les opérations de mise à jour dans une base de données relationnelle, les relations
de celle-ci doivent vérifier certaines règles appelées formes normales. L’objet de ces règles est de
réduire la redondance (décomposition des relations) tout en permettant des performances
acceptables (jointure des relations en requêtes). Codd a définit trois niveau de formes normales:
1ère forme normale (1FN), 2ème forme normale (2FN) et 3ème forme normale (3FN). Ces formes
normales seront étudiées après avoir expliqué le concept de dépendance fonctionnelle.

Pour voir de très près l’objet de la normalisation, on considère la relation suivante :


FOURNISSEUR (N_Fournisseur, Adresse, Produit, Prix).

Une relation (table) correspondant à ce schéma pourra éventuellement contenir plusieurs


produits pour un même fournisseur. Dans ce cas, il faudra faire face à un certain nombre de
problèmes :

 l'adresse du fournisseur sera dupliquée dans chaque n-uplet (redondance),


 si on souhaite modifier l'adresse d'un fournisseur, il faudra rechercher et mettre à jour tous
les n-uplets correspondant à ce fournisseur,
 si on insère un nouveau produit pour un fournisseur déjà référencé, il faudra vérifier que
l'adresse est identique,
 si on veut supprimer un fournisseur, il faudra retrouver et supprimer tous les n-uplets
correspondant à ce fournisseur (pour différents produits) dans la table

Pour remédier à ces problèmes on normalise la relation en relations en 3FN.

Ces formes normales sont liées au concept de dépendance fonctionnelle.

9. Dépendance fonctionnelle
9.1. Définition

Soit R une relation possédant les attributs x et y.

Dire que y dépend fonctionnellement de x si la connaissance d'une valeur de x entraîne détermine


une et une seule valeur de y.

Notation

X DF Y

X s'appelle source de la dépendance et Y cible de la dépendance.

BD-SMI5 25 FSA-AGADIR
9.2. Exemples

Nom

Num_auteur

Prénom

Remarque

 La dépendance fonctionnelle traduit une contrainte du monde réel. En effet, dans l'exemple
ci-dessus, nom de num_auteur signifie qu'un auteur possède un et un seul nom.
 X ou Y peut être un attribut composé.
 Les attributs d'une relation sont en dépendance fonctionnelle avec sa clé primaire.

10. Dépendance fonctionnelle complète ou élémentaire


10.1. Définition

Soit X=(X1, X2,…) un attribut composé d'une relation R. Soit Y un autre attribut de R.

Y est en dépendance fonctionnelle complète avec X si

Y DF de X

Y ne DF d'aucun Xi avec Xi C X.

10.2. Notation

X DFC Y

Ou

X1

X2

BD-SMI5 26 FSA-AGADIR
Figure 5. Dépendance complète ou élémentaire

10.3. Exemples

Supposons que notre base de données contient aussi la relation suivante:

Ouvrage
Num_Four Num_livre Quantité
F1 1 12
F1 2 10
F2 3 9
F2 2 10

Dans cette relation, On a bien

(Num_four,num_livre) DFC Quantité. Car on ‘a

num_Four Quantité ni

num_livre Quantité

11. Dépendance fonctionnelle directe


11.1. Définition

Soit X, Y C R.

La dépendance X Y est dite directe (non transitive) s'il n'existe pas de Z C R tel que

X Z

Z Y

11.2. Exemple

Dans la relation FOURNISSEUR (N_Fournisseur, Adresse, Produit, Prix), on a bien la


dépendance transitive :

N_Fournisseur Produit Prix

BD-SMI5 27 FSA-AGADIR
12. Dépendance fonctionnelle réflexive
12.1. Définition

Soit U l'ensemble des attributs d'une relation R et Y C R.

Si X C Y C R alors Y X

Si on prend Y=X, on obtient

X X

Figure 6. Dépendance réflexive

12.2. Exemples

(Num_auteur, Nom_auteur) Num_auteur

(Num_auteur, Nom_auteur) Nom_auteur

13. Les formes normales


13.1. Première forme normale

Une relation R est dite en première forme normale si elle ne contient pas d'attribut composé.

Par exemple, l'attribut adresseville composé d'attributs adresse (nom de rue, numéro) et ville est
un attribut composé. Les relations déjà traitées sont toutes en 1FN.

Un autre exemple celui des tableaux ou des listes. Un attribut tels qui représente une liste de
téléphones viole la 1FN.

13.2. Deuxième forme normale

Une relation R est en deuxième forme normale si

i. elle est en 1FN


ii. ses attributs sont en dépendance complète avec sa clé primaire.

Comme exemple, si on regarde le schéma suivant :

FournLivre (nfour, nlivre, nomfour, titre, auteur, qtitefour).

BD-SMI5 28 FSA-AGADIR
La clé de cette relation est (nfour, nlivre). Mais la DF( nfour, nlivre) titre n’est pas complète.
Car nlivre titre

De même pour ( nfour, nlivre) nomf car nfournomf.

Décomposez cette relation en relations en 2FN.

Cette relation peut être décomposée en relations en 2FN :

 Fournisseur (nfour, nomfour, adressefour) et


 Livre (nlivre, titre, auteur)
 FournLivre(nfour, nlivre, qtitefour)

13.3. Troisième forme normale

La définition de la 3FN utilise celle de la 2FN.

Une relation R est en 3 forme normale (3FN) si

i. elle est en 2FN


ii. ses attributs sont en dépendance directe avec sa clé primaire. Dans telle relation, on ne
peut trouver d'attribut qui dépend transitivement de la clé primaire de la relation.

A titre d’exemple, on utilise la relation Ouvrage (Num_ouvrage, titre, auteur, type_reliure,


prix_reliure) où prix de reliure dépend transitivement de num_ouvrage car

Num_ouvrage type_reliure et type_reliure prix_reliure

Pour éliminer cette anomalie, on décompose cette relation en deux relations qui lui représentent
un équivalent:

Ouvrage (Num_ouvrage, titre, auteur, type_reliure) et Reliure (type_reliure, prix_reliure).

Ouvrage et reliure représentent des projections de la première relation.

Ouvrage et la jonction des deux.

14. Normalisation d'une base de données relationnelle

Pour aboutir à des relations en 3 forme normale, on regroupe tous les attributs dans une relation
dite relation universelle. On procède à des décompositions en éliminant les dépendances
partielles puis les dépendances transitives jusqu'à obtenir des relations en 3FN.

BD-SMI5 29 FSA-AGADIR
Si on prend comme exemple, la relation ci-après :

Employe (nemp, nom_emp, prénom_emp, adresse_emp, salaire, nservice, libelléservice, chefs,


ndept, libellédept, budgetdept)

On voit qu’il une dépendance transitive entre nemp et les attributs qui se trouve après nservice.
La première décomposition donne lieu à deux relations :

 Emp (nemp, nom_emp, prénom_emp, adresse_emp, salaire, nservice) et


 Service (nservice, libelléservice, chefs, ndept, libellédept, budgetdept)

On peut aussi utiliser le graphe de dépendances fonctionnelles.

15. Graphe de dépendances fonctionnelles


15.1. Définition

Un graphe de dépendances fonctionnelles est un graphe qui permet de visualiser les dépendances
fonctionnelles entre un ensemble d'attributs.

15.2. Exemple

Si on rassemble les dépendances déjà vues, on obtient

Num_auteur Num_ouvrage

prix titre
Nom_auteur Prénom_auteur

Figure 7. Graphe de dépendances fonctionnelles

BD-SMI5 30 FSA-AGADIR
Ce graphe peut être étendu, en exploitant les propriétés de dépendances fonctionnelle telle la
réflexivité et la transitivité.

Num_auteur Num_ouvrage

prix titre
Nom_auteur Prénom_auteur

Figure 8. Graphe de dépendances fonctionnelles étendu

16. Exercices
16.1. Exercice 1

On suppose que notre base de données biblio contient aussi les relations suivantes

Membre (num_membre,nom_membre,prénom_membre,département)

A_emprunté (num_pret, num_membre, num_ouvrage, date_prêt, date_retour)

Donner le graphe de dépendances fonctionnelles de Biblio.

16.2. Exercice 2

Soit la relation universelle suivante:

Employe (nempl, nom_empl, prénom_empl, adresse_empl, salaire, nservice, libelleservice,


chefservice, ndept, libellédépt, budgetdept)

Décomposer cette relation en 3 relations respectant la 3FN sachant qu'un employé appartient à
un service qui fait partie d'un département.

BD-SMI5 31 FSA-AGADIR
Chapitre 3
L’algèbre relationnelle
L'algèbre relationnelle appelée aussi langage algébrique est une collection d'opérateurs qui portent
sur des relations. Ces opérateurs peuvent être classés en deux catégories : opérateurs
ensemblistes, empruntés de la théorie des ensembles (union, produit cartésien…) et les
opérateurs propres aux relations (projection, sélection…).

1. Les opérateurs ensemblistes

Les opérateurs ensemblistes viennent des opérateurs qu’on trouve dans la thérie des ensembles
et qui sont le produit cartésien, l’union, différence et intersection.

1.1. L'opérateur produit cartésien

Le produit cartésien de deux relations R1 (A1, A2, ) et R2 (B1, B2, …) est une relation R de
schéma R (A1, A2, …, B1, B2,…) contenant des tuples (u,v) tels que u Є R1 et v Є R2.

Notations

R=R1 X R2

Notation graphique

R1 R2

Figure 1. Représentation graphique du produit cartésien

Remarque

R vérifie :

BD-SMI5 32 FSA-AGADIR
Card(R)=card(R1)*card(R2) et degré(R)= degré(R1)+ degré(R2).

Exemple

Ouvrage
Num_ouvrage Titre Auteur
1 SGBD A. Belaid
2 Réseau B. Karam

Reliure
Type_reliure Prix_reliure
Lux 200
normale 100

Le produit "Ouvrage X Reliure" est donné par la table suivante

Ouvrage X Reliure
Num_ouvrage Titre Auteur Type_reliure Prix_reliure
1 SGBD A. Belaid Lux 200
1 SGBD A. Belaid Normale 100
2 Réseau B. Karam Lux 200
2 Réseau B. Karam Normale 100

Figure 2. Exemple de produit cartésien

1.2. L'opérateur union

Par la suite, la définition de certains opérateurs nécessite la définition suivante :

BD-SMI5 33 FSA-AGADIR
Définition

Deux relations sont dites union-compatibles (de même schéma) si elles ont le même degré et les
attributs de même rang dans les deux relations ont des domaines compatibles.

Soit R1, R2 deux relations de même schéma.

L'union de R1 et R2 est une relation R de schéma commun à R1 et R2 et dont les tuples sont
ceux de R1 ou de R2 ou des deux.

Notations possibles

 R=R1 U R2,
 R=R1 UNION R2

Ou Graphiquement, cet opérateur peut être représenté par


R

R1 R2

Figure 3. Représentation graphique de l’union

Exemple

Soit Ouvrage1 et Ouvrage2 deux relations :

Ouvrage1
Num_ouvrage Titre Auteur
1 SGBD A. Belaid
2 Réseau B. Karam

BD-SMI5 34 FSA-AGADIR
Ouvrage2
Num_ouvrage Titre Auteur
2 Réseau B. Karam
3 Réseau H. Ahmed

La relation Ouvrage = Ouvrage1 U Ouvrage 2 est donnée par

Ouvrage
Num_ouvrage Titre Auteur
1 SGBD A. Belaid
2 Réseau B. Karam
3 OS H. Ahmed

Soit auteur1 et auteur2 deux relations :

auteur1
Num_auteur Nom Prénom
1 Bassil Ali
2 Balla Ahmed

auteur2
Num_auteur Nom Prénom
2 Balla Ahmed
3 Ada Reda

BD-SMI5 35 FSA-AGADIR
La relation auteur = auteur1 U auteur2 est donnée par

auteur
Num_auteur Nom Prénom
1 Bassil Ali
2 Balla Ahmed
3 Ada Reda

Figure 4. Exemple d’application de l’opérateur union

Remarques

Si R est l’union de R1 et R2 alors

 card(R) <=card(R1)+card(R2)
 degré(R)= degré (R1)= degré (R2).

1.3. L'opérateur différence

Soit R1 et R2 deux relations de même schéma.

La différence des deux relations R1 et R2 est une relation R de même schéma que R1 et R2 et
dont les tuples sont ceux de R1 n'appartenant pas à R2.

Notations possibles :

 R=R1-R2
 R= R1 munis R2
 Difference(R1,R2)

BD-SMI5 36 FSA-AGADIR
R

R1 R2

Figure 5. Représentation graphique de différence

Exemple

La relation Auteur=Auteur1-Auteur2 est donnée par la table suivante :

Auteur
Num_auteur Nom Prénom
1 Bassil Ali

Figure 6. Exemple de différence

Remarque

La relation R =R1 – R2 vérifie

 Card(R) <=card(R1)
 degré(R)= degré (R1)= degré (R2).

1.4. L'opérateur intersection

Soit R1 et R2 deux relations de même schéma.

L'intersection de deux relations R1 et R2 est une relation R de même schéma que R1 et R2 et


dont les tuples sont ceux communs à R1et R2.

Notations possibles :

 R=R1  R2

BD-SMI5 37 FSA-AGADIR
 R= R1 intersect R2
 And(R1,R2)

R1 R2

Figure 7. Représentation graphique de l’opérateur intersection

Exemple

La relation Auteur=auteur1 intersect auteur2 est donnée par la table suivante :

Auteur
Num_auteur Nom Prénom
2 Balla Ahmed

Remarque

On remarque que R1 intersect R2=R1-(R1-R2)= R2-(R2-R1). Donc, l’intersection est dite


opérateur additionnel.

2. Les opérateurs relationnels

Les opérateurs relationnels contiennent des opérateurs unaires qui s'appliquent sur une seule
relation et des opérateurs binaires exigeant deux relations.

BD-SMI5 38 FSA-AGADIR
2.1. L'opérateur de projection (sélection verticale ou de colonnes)

Soit R1 (a1, 2, a3….) une relation. La projection de R1 sur ai1,ai2, ai3...(attributs de R1) est une
relation R d'attributs ai1,ai2,ai3...et dont les tuples sont ceux de R1 réduit aux attributs ai1,ai2,ai3…et
sans doubles.

Notations possibles :

 R=Лai1,ai2,ai3…(R1)
 R=projection(R/ ai1,ai2,ai3...)
 R=project(R, ai1,ai2,ai3...)

Notation graphique

ai1,ai2,...

R1

Figure 8. Représentation graphique de l’opérateur projection

Exemple

Soit la relation suivante :

Reliure
TypeReliure PrixReliure
luxe 200
cartonne 150
normale 100
simple 100

Donner les prix reliure possible (i.e. projection de reliure sur prix)

BD-SMI5 39 FSA-AGADIR
R=ЛPrixreliure(Reliure) avec

R
PrixReliure
200
150
100

Remarque

L’opérateur de projection réduit le degré de la relation.

Exercices

 Chercher Le nom des membres.


 Trouver Le numéro, le titre et la reliure des ouvrages.

2.2. L'opérateur de sélection (restriction, sélection horizontale ou de lignes)

Cet opérateur produit à partir d'une relation R1 une autre relation R2 de même schéma que R1
avec des tuples vérifiant un certain critère ou condition booléenne. Le critère le plus simple a la
forme Attribut op valeur, où op est un des opérateurs :

= , < , =, <=, > , | >=, <>.

On peut former un critère plus complexe en utilisant les opérateurs logiques "et" "ou", et "non".

Notations symboliques possibles

 R2=sélection (R1/condition)
 R2=Restrict (R1/condition)
 R2= σ condition (R1)

Notation graphique

BD-SMI5 40 FSA-AGADIR
R2

R1

Figure 9. Représentation graphique de l’opérateur sélection

Exemple

Donner les reliures dont le prix est supérieure à 100.

Reliure1
TypeReliure PrixReliure
luxe 200
cartonne 150

Remarques

 Cet opérateur réduit la cardinalité de la relation.


 Les opérateurs de projection et de sélection sont largement suffisants pour formuler des
questions complexes portant sur une seule table.

Exercices

 Donner le titre et l'auteur des ouvrages dont le nombre de pages est supérieur 300 et
ayant le titre 'sgbd'.
 Chercher les auteurs des ouvrages dont le titre est réseaux ou langages.

La réponse au premier exercice est donnée comme suit :

On fait tout d’abord une sélection :

R1  
b
ouvrage  avec b  ( nbrepage  300)et titre ' sgbd '

Ensuite, on écrit la projection

Résultat=Л (titre,auteur)(R1).

BD-SMI5 41 FSA-AGADIR
Ou bien, on peut écrire directement


Résulatt    ouvrage  avec
q b

q  titre, auteur  et b  (nbrepage  300)et titre ' sgbd '

2.3. Opérateurs de jointures


2.3.1. Jointure généralisée

Soit R1 et R2 deux relations de schémas R1(A1,A2,A3…) et R2(B1,B2,B3…).

La jointure généralisée (jointure tout simplement) de R1 et R2 selon un critère C (booléen) est


une relation R dont le schéma est R(A1,A2,A3…,B1,B2,B3…) et dont les tuples sont ceux de
R1x R2 vérifiant le critère C.

Le critère C est composé d'expressions logiques de la forme

R1.Ai op R.Bj

combinées avec les opérateurs logiques (et, ou et non).

op est un opérateur de comparaison (<,<=…).

Les attributs à comparer doivent être de types compatibles.

Notations possibles

 R=jointure (R1, R2/ C)

 R=R1 R2
C

 R=join(R1,R2/C)

Notation graphique

BD-SMI5 42 FSA-AGADIR
R

R1 R2

Figure 10. Représentation graphique de l’opérateur jointure généralisée.

Remarque

Si R est une jointure généralisée obtenue à partir de R1 et R1, alors on a

 Degré(R)=degré (R1)+degré(R2)

BD-SMI5 43 FSA-AGADIR
Exemples

Soit les relations suivantes :

R1

A B1

a1 1

a1 2

a3 3

et

R2

B2 C

1 c1

4 c2

5 c3

BD-SMI5 44 FSA-AGADIR
Si on utilise le critère C=(B1<B2) ou C=(R1.B1<R2.B2), on obtient la relation R suivante :

A B1 B2 C

a1 1 4 c2

a1 1 5 c3

a2 2 4 c2

a2 2 5 c3

… … … …

… … … …

2.3.2. L'opérateur téta -jointure ou θ-jointure

Soit θ un des opérateurs de comparaison:

=,<,<=, >, >=,<>

La θ-jointure entre deux relations est la jointure généralisée avec le critère C qui contient
seulement un seul type d’opérateur θ et qui porte sur des attributs communs des deux relations.

Notation symbolique

R=R1 R2
θ

Notation graphique

BD-SMI5 45 FSA-AGADIR
R

R1 R2

Figure 11. Représentation graphique de l’opérateur θ-jointure.

Exemple

Soit les relations R1 et R2 données par les tables suivantes :

R1

A B

a1 1

a2 1

a3 3

et

R2
B C
1 c1
4 c2
5 c3

Si θ est l’opérateur =, on obtient la relation R ci-après :

BD-SMI5 46 FSA-AGADIR
R

A R1.B R2.B C

a1 1 1 c1

a2 1 1 c1

Si θ est l’opérateur >, on obtient la relation R suivante :

A R1.B R2.B C

a3 3 1 c1

2.3.3. L'opérateur équi-jointure

L’équi-jointure est la θ-jointure où θ est l'opérateur =(égal).

Notation

Les notations symbolique et graphique sont les mêmes que pour la θ-jointure.

Exemple

Voir la deuxième partie de l’exemple précédent.

2.3.4. La jointure naturelle

C'est l'équi-jointure mais on garde une seule occurrence des attributs communs entre les deux
relations.

BD-SMI5 47 FSA-AGADIR
Notations symboliques

 R=R1 R2
 R=R1*R2.

Notation graphique

R1 R2

Figure 12. Représentation graphique de la jointure naturelle.

Exemple

Si on reprend les mêmes tables de l’exemple précédent

R1

A B

a1 1

a2 1

a3 3

et

BD-SMI5 48 FSA-AGADIR
R2
B C
1 c1
4 c2
5 c3

La jointure naturelle entre R1 et R2 donne la relation suivante :

A B C

a1 1 c1

a2 1 c1

Exercice

Soit R1 et R2 deux relations données par les tables suivantes :

R1

A B C

1 2 3

4 5 6

7 8 9

BD-SMI5 49 FSA-AGADIR
et

R2

B C D

3 3 10

5 6 11

Chercher

 La jointure naturelle entre R1 et R2.


 L’équi-jointure entre R1 et R2.
 Le produit cartésien entre R1 et R2.

2.3.5. Jointures externes


2.3.5.1. Jointure externe complète

La jointure externe complète ou jointure externe de deux relations R1 et R2 est une relation R
donnée par

i) jointure naturelle entre R1 et R2. Soit R le résultat obtenu.


ii) ajout à R les tuples de R1 et de R2 n'ayant pas participé à la jointure naturelle complétés
par des null comme valeurs des attributs de R2,
iii) ajout à R les tuples de R2 n'ayant pas participé à la jointure naturelle complétés par des
null comme valeurs des attributs de R1

Notation

R= R1 R2

BD-SMI5 50 FSA-AGADIR
Notation graphique

R1 R2

Figure 13. Représentation graphique de la jointure externe complète.

Exemple

Soit les relations suivantes :

R1

A B C

1 2 3

4 5 6

7 8 9

et

BD-SMI5 51 FSA-AGADIR
R2

C D E

3 3 10

6 7 11

12 3 2

Si on calcule la jointure externe complète entre R1 et R2, on obtient la relation R donné par le
tableau suivant :

A B C D E

1 2 3 3 10

4 5 6 7 11

7 8 9 Null Null

Null Null 12 3 2

2.3.5.2.Jointure externe gauche

Elle s’obtient en appliquant i) et ii).

Notation

R= R1 R2

Notation graphique

BD-SMI5 52 FSA-AGADIR
R

R1 R2

Figure 14. Représentation graphique de la jointure externe gauche.

Exercice

Chercher la jointure externe gauche pour R1 et R2 de 3.1.

2.3.5.3.Jointure externe droite

Elle s’obtient en utilisant i) et iii).

Notation

R= R1 R2

Notation graphique

R1 R2

Figure 15. Représentation graphique de la jointure externe droite.

BD-SMI5 53 FSA-AGADIR
Exercice

Chercher la jointure externe droite pour R1 et R2 de 3.1.

3. Agrégation

Les opérateurs d’agrégation servent à partitionner les relations en utilisant les valeurs
communes d’un champ : champ de partitionnement. Les partitions obtenues peuvent être
utilisées comme arguments de fonctions dites fonctions d’agrégation pour y faire des calculs.
Le champ argument des ces fonctions est dit champ de calcul. Les fonctions d’agrégation
comprennent :

Min : calcule la moyenne des valeurs d’un champ ou d’une expression;

Max : calcule le maximum de valeurs d’un champ ou expression ;

Avg : calcule la moyenne des valeurs d’un champ ou d’une expression;

Sum : calcule la somme des valeurs d’un champ ou d’une expression;

Count : calcule le nombre de valeurs d(un champ ou d’une expression.

L’expression de l’agrégation a la forme suivante :

R1=agg(relation ; ch_de_partionnement ; champ_de_calcul).

agg désigne une des fonctions précitées.

R1 possède le schéma suivant :

R1(ch_de_partionnement , agg-champ_de_calcul)

agg-champ_de_calcul expression obtenue en appliquant la fonction d’agrégation sur les


valeurs du champ de calcul.

Exemple

On considère la relation emp(nemp, nom, prénom, salaire, nservice).

Chercher le nombre d’employés par service. Pour obtenir ce résultat, on partitionne la


relation emp par nservice (champ de partitionnement) puis on compte dans chaque partition
obtenue le nombre de valeurs de nemp (champ de calcul)en faisant appel à la fonction count.
Donc la relation qu’on cherche est :

R=count (emp ; nservice ; nemp).

Le schéma de R est R (nservice, count-nemp).

BD-SMI5 54 FSA-AGADIR
Notation graphique

agg( p ; c)

p : champs de partitionnement
c : champ de calcul
agg :fonction d’agrégation utilisée
R

Figure 16. Représentation graphique de l’agrégation.

3.1. Agrégation sans champs de partitionnement

Pour comprendre, comment on peut utiliser, l’agrégation sans partitionnement, on considère


la requête suivante :

Chercher le nombre total des employés.

Dans cette requête il n’y a qu’une seule partition à savoir la relation emp. Dans cette
partition, on applique directement la fonction de calcul count. La relation est alors :

R=count (emp ; _; nemp).

Le schéma de R est R( count-nemp). Un seul attribut et une seule ligne.

Exercice

Chercher la somme total des salaires des employés.

3.2. Partitionnement avec plusieurs champs

On peut partitionner une relation, en utilisant plusieurs champs. Ceci est utile si l’on veut
que le résultat de l’agrégation comprenne d’autres champs en plus de celui de
partitionnement.

BD-SMI5 55 FSA-AGADIR
Exemple

Supposons qu’on dispose aussi de la relation service (nservice, libellés). Le champ libellés
désigne le libellé de service. Si l’on veut obtenir, pour chaque service, le numéro, le libellé et
le nombre d’employés. on doit écrire la requête suivante :

R=count (service * emp ; nservice, libellés ; nemp).

Le schéma de R est R(nservice, libellés, count-nemp).

Exercices

 Chercher pour chaque service le numéro, le libellé et la somme des salaires de ses
employés.
 Trouver pour chaque service, le numéro, la somme des salaires et le nombre d’employés.
 Donner pour chaque service le numéro, le libellé, le nombre de ses employés et la
somme des salaires de ses employés.

4. Arbre algébrique

Définition

Un arbre algébrique est une forme graphique d’une expression algébrique. Dans cet arbre,
on utilise la notation graphique associée à chaque opérateur. Les éléments de cet arbre sont
définis comme suit :

Racine : relation résultat ;

Feuilles : les relations de base de la requête ;

Les noeuds : les opérateurs relationnels ;

Les arcs : les flux des données.

Exemple

Donner l’arbre algébrique de la requête suivante :

Chercher le nemp et le nom des employés du service 1.

R   
 emp  avec
p b
q  nemp, nom  et b  nservice  1

BD-SMI5 56 FSA-AGADIR
On trace maintenant l’arbre algébrique de cette requête :

nemp, nom

nservice = 1

emp

Figure 17. Exemple d’arbre algébrique.

Remarque

On peut tracer cet arbre du bas vers le haut.

Exemple

Donner l’arbre algébrique de la requête : chercher le nemp, le nom et le libellés de


chaque employé.

BD-SMI5 57 FSA-AGADIR
R

nemp, nom, libellés

emp service

Figure 18. Arbre algébrique avec jointure et projection.

Exercices

Donner l’arbre algébrique des requêtes suivantes (écrire tout d’abord la forme
algébrique) :

 Liste de noms des employés du service 1.


 Le libellé de service et les noms des employés de chaque service.
 Le numéro de service et La moyenne des salaires pour chaque service.
 Le libellé de service et la somme des salaires des employés de chaque service.

BD-SMI5 58 FSA-AGADIR
 Chapitre 4
Langage de Définition de Données

SQL est l’abréviation de Structured Query Language. C’est un langage pour manipuler les bases
de données relationnelles. Son nom était SEQUEL (Structured English as Query Language),
langage écrit par IBM. Le système de gestion de base de données (SGBD) utilisait ce langage
s’appelle System-R.

Le premier SGBD commercialisé utilisant SQL est Oracle (vers 1978).

SQL est un langage de programmation déclaratif, de haut niveau et représente un standard (ANSI
puis OSI) pour les bases de données relationnelles. Les normes des SQL sont résumés comme
suit :

 SQL devient une norme ANSI en 1986 SQL/86


 SQL devient une norme ISO en 1987
 Une autre norme SQL/89 : Expression des contraintes d'intégrité telles que Primary key,
check, references, default
 Une autre norme en 1992 SQL2 : Expression des opérateurs ensemblistes tels que intersect ,
minus…outer join, cascade, date, temps
 La norme SQL3 est en cours : les types de données abstraits, notion de rôle, les concepts de
l'approche objet.

SQL assure entre autres :

 la création des objets de bases de données et les contraintes associées ;


 l’interrogation et la maintenance des bases de données ;
 la sécurité des bases de données.

Tous les SGBD relationnels utilisent une interface SQL. Parmi ces SGBDR, il y a Oracle,
Access, DB2, MySQL, MS Access.

SQL peut être intégré dans des langages hôtes tels que VB, java, C++ et autres.

Le langage SQL contient des commandes pour:

 créer et modifier les objets de BD, c’est le langage de définition des données: LDD ;
 consulter, supprimer, ajouter et modifier les données, c’est le langage de manipulation des
données : LMD,
 contrôler les accès aux données, c’est le langage de contrôle des données : LCD.

BD-SMI5 59 FSA-AGADIR
Cette répartition du SQL peut être décrite par le diagramme suivant. Ce diagramme montre aussi
les commandes de chacun des langages cités ci-dessus.

SQL

LDD LMD LCD

 Create  Select  Grant


 Alter  Insert  Revoke
 Drop  Delete
 Update

On peut aussi parler du langage de transactions composé des commandes commit et rollback.

La commande commit pour valider des actions.

La commande rollback pour annuler des actions.

Ces commandes seront traitées dans un chapitre consacré aux transactions.

Dans ce chapitre, nous allons étudier le LDD en respectant la syntaxe du SGBD Oracle.

Le langage LDD comprend les commandes create, alter et drop.

 La commande create est pour créer des bases de données et les objets de base de données tels
que les tables, les vues, les utilisateurs, etc.
 La commande alter sert à modifier la structure des objets de base de données.
 La commande drop supprime les objets de base de données.

BD-SMI5 60 FSA-AGADIR
1. La commande create

Cette commande sert à créer les objets de bases de données :

 Bases de données
 Tables
 Index
 Vues
 rôles
 Schémas
 Etc.

1.1. Création des base de données

Pour créer une base de données, on utilise la syntaxe suivante (dépend de la version d’Oracle) :

Syntaxe

Create database nom_base ;

Nom_base est un identificateur limité à 8 caractères.

Exemple

Create database GestClient ;

1.2. Création des tables

Avant de continuer, on signale que les mots entre crochets dans une syntaxe, servent à définir
des options de la commande. On peut les négliger d

La syntaxe de création des tables est :

Syntaxe

Create table nom_table

(champ1 type [default expression] [contrainte_colonne],

champ2 type [default expression] [contrainte_colonne],

BD-SMI5 61 FSA-AGADIR

[Contrainte_table1,]

[Contrainte_table2,]

);

Description de la syntaxe

 nom_table est un identificateur de longueur maximale 30. Il peut aussi comprendre les
caractères $ et #. La casse n’est pas respectée.
 Champi sont des identificateurs de longueur maximale 30.
 type représente un type prédéfini dans Oracle ou défini par l’utilisateur.

Les types prédéfinis en Oracle :

Plusieurs types prédéfinis existent en Oracle. On y trouve les types caractères, les types
numériques, les types dates, les types blob…

Les types caractères

Ce type sert à manipuler les caractères.

Les constantes caractères sont délimitées par deux apostrophes comme ‘Ali’ et ‘Casa’.

Les types caractères comprennent :

 char[(n)] représente les chaînes de caractères de longueur fixe. n étant le nombre maximal de
caractères. La valeur par défaut est 1. la plus grande valeur de n est 2000.
 varchar2(n) représente les chaînes de caractères de longueur variable. n étant la taille
maximale. La plus grande valeur de n est 4000.
 varchar identique à varchar2.
 long représente les caractères de grande taille et peut atteindre 2 GO.

Les types numériques

Ce type permet de manipuler des nombres entiers et réels en virgule fixe ou flottante.

BD-SMI5 62 FSA-AGADIR
Les constantes numériques peuvent avoir l’une des formes : 12, 12.3, 12.9e-3

Les types numériques comprennent :

 number représente les nombres réels positifs, négatifs sur 40 chiffres. Les valeurs absolues
des nombres sont limitées entre 1.0E-130 et 1.0E126.
 number(p,d) représente les nombre sur p chiffres avec d chiffres après la virgule représenté
par point(.). p peut aller à 38, et d est compris entre -84 et 127
 number(p) représente les entiers sur p chiffres. C’est équivalent à number(p,0).

Les types numériques supportés par Oracle

 decimal équivalent à number(38).


 decimal(n,p)
 inetger,int, smallint équivalent à number(38).
 float(n)
 Real

Les types dates

 date représente les dates.

Les constantes date :

'12/11/2005' ou '12-11-2005'

 Timestamp représente les dates et les heures.

Constantes littérales:

'12/11/2005 10:30:20,100' ou '12/11/2005 :10:30:20,100'

Les types grands objets

 blob (binary large object) grand objet binaire jusqu à 4Go.


 clob (character large object) grand objet caractère jusqu à 4Go
 bfile (binary file) pointe vers un fichier externe à la base.

Type créé par l’utlisateur

BD-SMI5 63 FSA-AGADIR
Create type nomType as object(attr1 type, atrr2 type…)

Ce genre de type est très utilisé dans le modèle objet-relationnel ou orienté objet.

Valeur par défaut

Default expression indique une valeur par défaut du champ. expression doit être du même que celui
du champ.

Contrainte

Une contrainte sert à limiter les valeurs d’un champ.

On continue la description de la syntaxe par expliquer les différentes types de contraintes colonne
(in line).

ContrainteColonne=[constraint nomContrainte] TypeContrainteColonne [modeContrainte]

TypeContrainteColonne = primary key| unique | [not] null | check (condition) |

References nomTableRef[(colonne) ] [on delete cascade|on delete set null]

[enable|disable]

 nomContrainte permet de nommer la contrainte et doit être précédé du mot clé constraint.
 primary key spécifie la clé primaire de la table.
 unique le champ est unique. Il n’accepte pas des valeurs identiques.
 not null le champ n’accepte pas la valeur null.
 check(condition), condition précise les valeurs possibles du champ. c’est une condition
booléenne.
 References nomTableRef[(colonne)] exprime que le champ est une clé étrangère et fait
référence à la table nomTableRef(table maître). Le nom de la colonne référencée peut être
négligé quand il s’agit de la clé primaire de la table maître.

On peut aussi négliger le type du champ. Il sera celui du champ référencé.

On delete cascade | on delete set null, ces chaînes de mots définissent des actions dites
actions référentielles. Ces actions seront exécutées à chaque fois qu’on supprime une ligne de
la table référencée. Les lignes associées dans la table nom_table (table esclave) seront
supprimées si on utilise on delete cascade. Quand on utilise on delete set null, les lignes de la
table esclave sont conservées mais les valeurs du champ référençant sont à null.

BD-SMI5 64 FSA-AGADIR
 enable |disable pour activer ou désactiver la contrainte. Par défaut la contrainte est activé.
 [modeContrainte] prend l’une des valeurs suivantes : deferrable ou not deferrable. La
première valeur reporte ou diffère la vérification de la contrainte jusqu’à la fin de la
transaction. La deuxième valeur fait le contraire et c’est la valeur par défaut.

Remarque

Pour différer les contraintes en mode deferrable, il faut exécuter dans l’interface sql*plus l’une
des commandes suivantes :

 Set contraint nomContrainte deffered; pour une seule contrainte en mode deferrable
 Set contraint all deffered ; pour toutes les contraintes en mode deferrable

Exemples de création de tables avec contraintes colonne

Exemple 1

Create table emp(nemp number(4) primary key,

Nom varchar2(20),

Prénom varchar2(20),

Genre char check(genre in(‘f’,’m’,’F’,’M’),

Salaire number(10,2),

Nserv number(2) references service(nserv) on delete cascade);

Exemple2

Create table emp(

nemp number(4) constraint clEmpl primary key ,

Nom varchar2(20),

Prénom varchar2(20),

Salaire number(10,2),

Genre char constraint valsGenre check(lower(genre) in(‘f’,’m’)),

Nserv number(2) clEtrEmpServ references service(nserv) on delete cascade);

BD-SMI5 65 FSA-AGADIR
Exemple3

Create table emp(nemp number(4) primary key,

Nom varchar2(20),

Prénom varchar2(20),

Genre char check(genre in(‘f’,’m’,’F’,’M’),

Salaire number(10,2),

Nserv references service(nserv) on delete cascade);

On reprend de nouveau la syntaxe de la commande create pour expliquer les contraintes table
(off line).

contrainteTable=[constraint nomContrainte] typeDeContrainteTable

typeDeContrainteTable=primary key (col1,col2…) | Foreign key(col1,col2…) references


nomTable[(col1,col2)] [on delete cascade| on delete set null] | Unique(col1,col2…)

| Check(condition) [modecontrainte] [enable|disable]

Exemple de création de table avec contraintes tables

Create table emp(nemp number(4),

Nom varchar2(20),

Prénom varchar2(20),

Salaire number(10,2),

Genre char,

Nserv number(2),

constraint clEmpl primary key(nemp),

Contraint clEtrEmpServ references service(nserv) on delete cascade,

BD-SMI5 66 FSA-AGADIR
constraint valsGenre check(lower(genre) in(‘f’,’m’)));

Création d'une table globale temporaire

Une table globale temporaire est une table partagée entre les utilisateurs de la base de données.
Chaque utilisateur ne voit que la partie de la session qui le concerne (qu’il a créée). Le contenu de
cette table est volatile. Il disparaît à la fin d’une transaction ou à la fin de la session, selon l’option
précisée lors de la création de cette table.

Syntaxe

Create global temporary table nomTable( …)

On commit delete rows|preserve rows ;

On commit delete rows: pour effacer les lignes après commit.

preserve rows : conserver les lignes après commit. Mais elles seront supprimées à la fin de la
session(exit, disconnect).

1.3. Création d’index

Notion index

Un index est une structure qu’on crée pour accélérer la recherche dans une base de données et
par suite avoir un temps de réponse très rapide. Un index est basé sur un ou plusieurs colonnes.
Les valeurs de ces colonnes sont ordonnées en utilisant un ordre alphanumérique normal ou
inversé. Pour chaque valeur dans l’index, on associe l’adresse de la ligne contenant cette valeur.
Toute recherche à base de colonne indexée commence par l’index pour y localiser la valeur.
Ensuite on extrait l’adresse associée à la valeur localisée pour trouver la ligne recherchée dans la
table. Les indexes améliorent les performances de bases de données, mais ils ont aussi des
inconvénients par suite il ne faut pas en abuser.

BD-SMI5 67 FSA-AGADIR
Inconvénients d’index

Un index a des inconvénients :

 Espace mémoire supplémentaire où sont stockées les valeurs de la colonne indexée et les
adresses des lignes associées;
 Ralentissement des opérations de mise à jour dans la base de données. En effet, à chaque
opération sur la colonne indexée, le SGBD doit actualiser l’index associé.

La syntaxe de création d’un index est :

Create [unique] index [schema.]nomIndex on [schema.]nomTable( col1|expression1 [asc|desc][,


col2|expression2 [asc|desc]…])

Description de la syntaxe

 nomIndex doit être un identificateur.


 Le mot asc veut dire que l’index est ascendant (tri normal). C’est l’option par défaut.
 Le mot desc veut dire que l’index est descendant (ordre alphabétique inversé).
 Un index peut être une colonne simple ou une expression quelconque.
 Un index peut combiner entre plusieurs colonnes ou expressions.

Exemples

 Create index idxNom on emp(nom asc);


 Create index idxNomPre on emp(nom asc, prénom desc);
 Create index idxNomPre on emp(nom || prénom );

L’opérateur || sert à concaténer deux expressions.

Remarque

Pour La création des indexes, il faut tenir compte de:

 les colonnes concernées par indexation sont souvent utilisées dans les critères de recherche,
 les colonnes avec peu de valeurs ne sont pas à indexer (par exemple le genre),

BD-SMI5 68 FSA-AGADIR
1.4. Création d’utilisateurs

Pour créer un utilisateur, on utilise l’une des commandes suivantes :

Create user nomUtilisateur identified by motPasse ;

Create user nomUtilisateur identified by motPasse quota taille en M|taille en G| unlimited on


system|users|…;

La deuxième commande limite l’espace de stockage qui sera utilisé par l’utilisateur sur ce qu’on
appelle le tablespace (system, users ou bien autre).

2. La commande drop

Cette commande supprime les objets de base de données :

 Base de données
 Table
 Index
 Vues
 rôles
 Schéma

2.1. Suppression des bases de données

Pour supprimer une base et les objets qu’elle contient, on utilise la syntaxe suivante :

Drop database ;

2.2. Suppression des tables

Pour supprimer une table et les données qu’elle contient, on utilise la commande drop.

Syntaxe

Drop table nom_table [cascade constraints] ;

BD-SMI5 69 FSA-AGADIR
L’option cascade constraints est nécessaire si la table est référencée par une autre table. On l’utilise
pour supprimer la contrainte utilisant la table qu’on veut supprimer.

Exemples

 Drop table emp ;


 Drop table service cascade constraints ;

La dernière commande supprime la table service et toutes les contraintes qui y font référence.

2.3. Suppression des index

Pour supprimer un index et son contenu, on a la commande suivante :

Syntaxe

Drop index nomIndex;

Exemple

Drop index idx_nom ;

2.4. Suppression des utilisateurs

Pour la suppression d’un utilisateur, on exécute

Drop user nom_utilisateur ;

3. La commande alter

On utilise cette commande pour modifier la structure des objets de base de données. Ces objets
comprennent :

 tables,
 index,
 utilisateurs

BD-SMI5 70 FSA-AGADIR
3.1. Modification des tables

La modification d’une table comprend :

 Ajout des attributs ;


 Ajout des contraintes ;
 Modification des attributs ;
 Suppression des attributs ;
 Suppression des contraintes ;
 Activation des contraintes ;
 Etc.

La syntaxe simplifiée de modification de table est :

Syntaxe

Alter table nomTable

|Rename to nouveauNomDeTable

|rename column champ to nouveauNomChamp

|rename constraint contrainte to nouveauNom

|Add champ type [default valParDéfaut] [contrainte_colonne]

|Add [constraint nomContrainte] typeDeContrainteTable

|Add(champ1 type…|contrainteTable1,champ2 type…|contrainteTable2…)

|Drop column champ [cascade constraints] t ;

|Drop (champ1, champ2, …) [cascade constraints]

|Drop constraint nomContrainte [cascade]

|Drop (champ1|champ2,...)

|Drop primary key [cascade]

|Drop unique(champ1[,champ2…]) [cascade]

|Modify champ [type] [default valeurParDefaut] [contrainteColonne]

|Modify constraint nomContrainte enable|disable [exceptions into nomTableExceptions]


[cascade]

|Modify (champ1…|champ2…,…)

BD-SMI5 71 FSA-AGADIR
|Enable | Disable Primary key | Constraint nomContrainte | unique(listeChamps) [Exceptions
into nomTableExceptions]

[cascade]

Description de la syntaxe

 Rename to sert à changer le nom de la relation.


 Le mot add [constraint] est utilisé pour ajouter un attribut.
 Les mots add constraint sont utilisés pour ajouter une contrainte.
 Le mot drop supprime un attribut ou une contrainte. On peut l’utiliser avec l’option cascade
pour supprimer les contraintes qui font référence à l’attribut ou avec cascade constraints pour
supprimer les contraintes basées sur la contrainte à supprimer.
 Le mot modify sert à modifier les attributs ou les contraintes. Cette modification comprend le
type, la valeur par défaut et les contraintes définies sur l’attribut.
 Les mots modify constraint permettent la modification d’une contrainte qui consiste à
l’activer ou à la désactiver.
 Le mot enable active une contrainte.
 Le mot disable désactive une contrainte.

L’activation d’une contrainte peut être refusée si les données ne la satisfont. Les données qui
violent la contrainte sont récupérables dans une table dite table d’exceptions et ce en utilisant
l’option exceptions into table_exceptions. La structure de cette table qu’on doit créer à priori est :

table_exception(ligne, propriétaire, table, contrainte), avec :

 ligne : adresse de la ligne qui viole la contrainte. Elle est de type rowid. On peut afficher
l’adresse d’une ligne avec la commande select rowid… ;
 propriétaire : propriétaire de la table ;
 table : nom de la table ;
 contrainte : nom de la contrainte.

Exemples

 Alter table emp rename to empl;

Pour changer le nom de la table.

BD-SMI5 72 FSA-AGADIR
 Alter table emp disable primary key;

Désactiver la clé primaire de la table emp.

 Alter table emp modify constraint clé enable exceptions into exc;

Active la clé primaire d’une table et met les lignes qui la violent dans une table dite table
d’exceptions.

 Alter table emp add email varchar2(50);


 Alter table emp drop email;
 Alter table service disable primary key cascade;
 Alter table emp drop primary key;
 Alter table emp drop foreign key(nservice);emp
 Alter table emp disable unique(nom);

3.2. Modification des index

Avec alter, on peut

 activer un index s’il est inactif,


 le désactiver quand il est actif,
 changer son nom

La syntaxe de commande est :

Alter index nomIndex

|rename to nouveauNom

|enable

|disable

Exemples

Alter index ind_Nom rename to indexNom ;

Alter index indexNom disable ;

BD-SMI5 73 FSA-AGADIR
Alter index indexNom enable ;

Remarque

La désactivation des index accélère les opérations de mise à jour.

3.3. Modification des utilisateurs

Pour modifier le mot de passe ou l’espace de stockage réservé à un utilisateur, on utilise la syntaxe
suivante :

Alter user nomUtilisateur [identified by motPasse] [quota …]

BD-SMI5 74 FSA-AGADIR
Chapitre 5
Langage de manipulation des données

Une base de données doit être mise à jour pour refléter l’état du système d’information qu’elle
décrit. Pour ce fait, SQL dispose des commandes suivantes :

 Insert : pour alimenter la base de données.


 Update : pour modifier les données de la base.
 Delete : pour supprimer les données désuet .

Pour rechercher et restituer des données, on utilise la commande select. Cette commande permet
entre autres des sélections, des projections, des jointures et des groupements avec éventuellement
des tris.

L’ensemble des commandes insert, delete, update et select forment le langage de manipulation
des données LMD. LMD est considéré comme un sous langage de SQL.

Pour bien clarifier les syntaxes des commandes de LMD, on considère le schéma de base de
données suivante :

Etudiant (code_etudiant , Nom , Prénom , Année)

Cours (code_cours , Nom , Nbre_heures , Année)

Enseignant (code_enseignant , Nom , Spécialité )

Résultat (code_etudiant ,code_cours , Note)

Charge (code_cours , code_enseignant)

1. La commande insert

Cette commande permet d’ajouter des tuplets à une table d’une base de données. Les syntaxes
simplifiées de cette commande sont :

 Insert into nom_table[(liste_colonnes)]

values(liste_valeurs)

BD-SMI5 75 FSA-AGADIR
 Insert into nom_table[(liste_colonnes)]

expression_sélection ;

Description

Si toutes les colonnes de la table sont concernées liste_colonnes peut-être négligée.

Liste_valeurs : est une liste contenant des valeurs littérales, des expressions constantes, la valeur
null ou default pour insérer la valeur par défaut de la colonne qui a été spécifiée lors de la création
de la table ou sélection colonne.

Listes_valeurs : doit correspondre avec liste de colonnes en nombre est en type.

Expression_sélection : est une requête sélection quelconque que l’on va étudier dans ce chapitre.

Exemples

 Ajouter l’enseignant talbi dans le N° 10 et dans la spécialité est inconnue


insert into enseignant( code_enseignant, nom)

values(‘10’,’talbi’) ;

 Construire une table temp et placer le nom , le numéro et la moyenne de chaque étudiant.

Create table temp(nom varchar(20),

Numéro char(4),

Moyenne number(6,2)) ;

Insert into temp

Select nom, e.num_etu ,AVG(note)

From etudiant e, resultat r

Where e.num_etu =r.num_etu

BD-SMI5 76 FSA-AGADIR
Group by r.numetu,nom;

2. La commande Update

Cette commande modifie des données dans une table. Sa syntaxe est :

update nom_table

set liste_colonnes_values

[where condition] ;

liste_colonnes_values : liste de la forme colonne=expression

Exemple

 Augmenter le nombre d’heures de tous les cours de 10 heurs.

update cours

set nbre_heures=nbre_heures+10 ;

 Augmenter de 2 pour chaque étudiant la note du cours 4.

update resultat

set note=note+2

where code_cours=’4’;

 Modifier les notes de l’étudiant X en lui ajoutant 10% de la valeur initiale .

update resultat

set note=note*1.1

where code_etudiant=(select code_etudiant

from etudiant

where nom=’X’)

And ( num_cours=(select num_cours

from cours

where nom=’SGBD’);

BD-SMI5 77 FSA-AGADIR
3. La commande delete

La commande delete sert à effacer des tuples d’une table. La syntaxe de cette commande est :

delete

From nom table

[where conditions];

Exemple

 Supprimer tout les enseignants :

Delete

From enseignant ;

 Supprimer le cours dans le nom est réseau :

delete

From cours

Where nom=’réseau’ ;

4. La Commande select

La commande select permet de réaliser les opérations suivantes :

 Projection
 Sélection
 Projection+sélection
 Utilisation des opérateurs ensemblistes
 Jointures
 Tri
 Groupement

BD-SMI5 78 FSA-AGADIR
4.1. Projection simple

Select [ distinct|unique|all ]*| listeColonnes |nomTable.*

From nomTable;

Le caractère * désigne toutes les colonnes de nomTable. Il est équivalent à nomTable.*

ListeColonnes désigne des colonnes de la table de nomTable séparé par ‘,’ .

Exemples

 Donner la liste de nom, prénom, poids, de tous les Etudiants.

Select *

from Etudiant ;

ou bien

Select Etudiant.Nom , Etudiant.prénom , Etudiant.poids

From étudiant ;

 Chercher toutes les informations sur les enseignants.

Select *

FROM Enseignant ;

Emploi de Distinct

Distinct permet d’obtenir des lignes distinctes. On peut aussi utiliser le mot unique.

Exemple

 Liste des spécialités des Enseignants :

Select Distinct spécialité

BD-SMI5 79 FSA-AGADIR
FROM Enseignant ;

Emploi de all

Avec all, on affiche toutes les lignes sans éliminer les lignes dupliquées. C’est l’option par défaut.

Exemple

Afficher les noms des cours

Select all nom

From cours ;

4.2. Sélection simple

La clause where utilisée avec select permet de pécifier un critère de recherche que les données
doivent satisfaire pour être sélectionnées. La syntaxe de select devient alors :

Select [ distinct|unique|all ]*| listeColonnes |nomTable.*

From nomTable;

Where critère-de-recherche ;

Le critère de recherche est une combinaison logique d’expressions utilisant les opérateurs de
comparaison et les opérateurs arithmétiques.

Les opérations de comparaison sont:

< , > ,<= , >= , = , <> et !=

Les opérateurs logiques sont :

Or , And et Not .

BD-SMI5 80 FSA-AGADIR
Remarque

La comparaison d’une expression avec la valeur null donne toujours une valeur null. :

Opérande opérateur NULL donne NULL.

Exemples

 Donner toutes les informations sur les cours dont le nbre_heures dépasse 60.

Select *

FROM cours

Where nbre_heures >=60 ;

 Chercher les noms des cours de la 1ére année ayant un nbre_heures >60

Select Nom

FROM cours

Where (Année = ’1’) And (nbre_heures < 60) ;

 Donner la liste des noms et prénom des Etudiant inscrits en 1ére année ou en 2éme année.

select Nom , Prénom

FROM Etudiant

Where (Année =’1’) or (Année = ’2’) ;

Emploi de between

Cet opérateur cherche si une valeur se trouve dans un intervalle limité par deux autres valeurs.

La syntaxe de cet opérateur est :

BD-SMI5 81 FSA-AGADIR
Expression [not] between expr1 and expr2.

 Expression between expr1 and expr2 returne true si expression est comprise entre expr1 et
expr2.

 Expression not between expr1 and expr2 returne true si expression n’est pas comprise entre
expr1 et expr2.

Exemples

 Donner le nom des cours dont le nbre_heures est compris entre 60 et70 .

Select Nom

FROM cours

Where nbre_heures Between 60 And 70 ;

Remarque

Between peut être remplacé par une combinaison logique de <= et >= .

 Lister les noms des cours dont le nbre_heures n’est pas comprise entre 60 et 90.

Select Nom

FROM Etudiant

Where poids not Between 60 And 90 ;

Emploi de in

BD-SMI5 82 FSA-AGADIR
Cet opérateur cherche si une valeur se trouve parmi une liste de valeurs.

La syntaxe de cet opérateur est :

Expression [not] in (liste_expressions)

 Expression in (liste_expressions) returne true si expression est égale à au moins une des
expressions de (liste_expressions).

 Expression not in (liste_expressions) returne true si expression n’est égale à aucune des
expressions de (liste_expressions).

Exemple

 Chercher les noms des enseignant dont la spécialité est SGBDR , SGBDH , SGBD réseau.

Select Nom

FROM Enseignant

Where spécialité IN (‘SGBDR’ , ‘SGBDH’ , ‘SGBD réseau’) ;

Emploi de like

Cet opérateur compare des chaînes de caractères en utilisant des caractères génériques à savoir %
qui désigne 0 ou plusieurs caractères et _ (blanc souligné) qui désigne un et un seul caractère.

Expression [not] like expr

Exemple

 Donner la liste des étudiant dont le nom commence par ‘M’.

Select Nom

FROM Etudiant

BD-SMI5 83 FSA-AGADIR
Where Nom like ‘M%’ ;

 Donner la liste des étudiant dont le nom contient ‘M’ avant dernier caractère.

Select Nom

FROM Etudiant

Where Nom like ‘%M-’ ;

 Donner le nom et prénom des étudiant dont le prénom ne contient pas la lettre ‘i’.

Select Nom , Prénom

FROM Etudiant

Where Prénom Not like ‘% I %’ ;

4.3. Utilisation des opérateurs ensemblistes

Dans cette partie, on va montrer comment on exprime les opérateurs ensemblistes vus dans
l’algèbre relationnelle.

4.3.1. L’opérateur UNION

Cet opérateur fait l’union de deux ou de plusieurs requêtes de même schéma. La syntaxe de cet
opérateur est :

Select liste_colonnes1

FROM table1

[Where condition]

union [ all ]

Select Liste_colonnes2

FROM table2

[Where condition ]]

BD-SMI5 84 FSA-AGADIR

 Union peut se faire avec projection, sélection ou la combinaison des deux.

 Union génère bien une relation et par suite les lignes dupliquées sont automatiquement
supprimées. Pour les conserver on utilise le mot all.

Exemple

 Donner le nom et prénom des étudiant de la 2éme année ou dont le nom contient ‘M’.

Select Nom ,Prénom

FROM Etudiant

Where (Année = ‘2’ )

UNION

Select Nom , Prénom

FROM Etudiant

Where Nom like ‘%M%’ ;

 Donner le nom des cours de la 1ére année ou dont le nbre_heures est compris entre 60 et
70.

Select Nom

FROM cours

Where (Année = ‘1’ )

union

Select Nom

BD-SMI5 85 FSA-AGADIR
FROM cours

Where nbre_heures Between 60 And 70 ;

4.3.2. L’opérateur INTERSECT

Cet opérateur fait l’intersection de deux ou de plusieurs requêtes de même schéma. La syntaxe de
cet opérateur est :

Select liste_colonnes1

FROM table1

[Where condition]

intersect

Select Liste_colonnes2

FROM table2

[Where condition ]]

 L’intersection peut se faire avec projection, sélection ou la combinaison des deux.

Exemple

 Donner le nom et prénom des étudiant de la 2éme année et dont le nom contient ‘M’.

Select Nom ,Prénom

FROM Etudiant

BD-SMI5 86 FSA-AGADIR
Where (Année = ‘2’ )

intesect

Select Nom , Prénom

FROM Etudiant

Where Nom like ‘%M%’ ;

 Donner le nom des cours de la 1ére année et dont le nbre_heures est compris entre 60 et 70.

Select Nom

FROM cours

Where (Année = ‘1’ )

intersect

Select Nom

FROM cours

Where nbre_heures Between 60 And 70 ;

4.3.3. L’opérateur Minus

On utilise cet opérateur pour exprimer la différence vue en algèbre relationnelle. La syntaxe de
cet opérateur est :

Select liste_colonnes1

FROM table1

[Where condition]

minus

Select Liste_colonnes2

BD-SMI5 87 FSA-AGADIR
FROM table2

[Where condition ]]

 La différence peut se faire avec projection, sélection ou la combinaison des deux.

Exemple

 Donner le nom et prénom des étudiant de la 2éme année et dont le nom ne contient pas ‘M’.

Select Nom ,Prénom

FROM Etudiant

Where (Année = ‘2’ )

minus

Select Nom , Prénom

FROM Etudiant

Where Nom like ‘%M%’ ;

 Donner le nom des cours de la 1ére année et dont le nbre_heures n’est pas compris entre 60
et 70.

Select Nom

FROM cours

Where (Année = ‘1’ )

minus

Select Nom

FROM cours

BD-SMI5 88 FSA-AGADIR
Where nbre_heures Between 60 And 70 ;

4.3.4. Le produit cartésien

Le produit cartésien des tables nom_table1 et nom_table2 s’exprime par

Select liste_colonnes

From nom_table1 cross join nom_table2

[where condition] ;

Exemple

 Chercher toutes les combinaisons des tables enseignant et cours

select *

from enseignant cross join cours ;

4.4. Les jointures

Dans cette partie, on va étudier comment exprimer les jointures vues en algèbre relationnelle.

Dans les jointures, on distingue les jointures internes et les jointures externes. Les deux types de
jointures comprennent les jointures naturelles et les jointures généralisées.

4.4.1. Les jointures internes


4.4.1.1. Les jointures internes naturelles

La jointure naturelle entre les tables nom_Table1 et nom_Table2 ayant des colonnes communes
s’exprime par

Select liste_colonnes

From nom_Table1 [ inner] natural join nom_Table2

[Where condition] ;

BD-SMI5 89 FSA-AGADIR
On peut exprimer la jointure en n’utilisant que certaines colonnes communes des tables
nom_Table1 et nom_Table2 au lieu d’utiliser l’ensemble des colonnes communes. L’expression
de la jointure devient alors :

Select liste_colonnes

From nom_Table1 [ inner] join nom_Table2 using(liste_colonnes_communes)

[Where condition] ;

4.4.1.2. Les jointures internes naturelles

Select liste_colonnes

From nom_Table1 natural [ inner] join nom_Table2 on condition_jointure

[Where condition]

4.4.2. Les jointures externes


4.4.2.1. Les jointures externes naturelles

La jointure externe naturelle entre les tables nom_Table1 et nom_Table2 ayant des colonnes
communes s’exprime par

Select liste_colonnes

From nom_Table1 natural [ left|right|full] [outer]join nom_Table2

[Where condition] ;

Left : jointure externe gauche ;

Right : jointure externe droite,

Full : jointure externe complète.

Si les champs communs n’interviennent pas tous dans la jointure, on utilise la syntaxe suivante :

Select liste_colonnes

BD-SMI5 90 FSA-AGADIR
From nom_Table1 [ left|right|full] [outer]join nom_Table2 using (liste_colonnes)

[Where condition] ;

4.4.2.2. Les jointures externes généralisées

Select liste_colonnes

From nom_Table1 left|right|full [outer] join nom_Table2 on condition_jointure

[Where condition]

Exemples

 Donner tous les combinaison possible entre enseignant et charge .

Select *

FROM Enseignant cross join Charge ;

 Obtenir les noms des enseignants spécialisés en SGBD qui donnent le cours n°1.

Select nom

FROM Etudiant natural join Charge

Where ( Spécialité= ‘SGBD’)

And ( Charge.Num_cours= ‘1’)

4.4.2.3. Auto_jointure :

Donner les noms d’enseignants ayant la même spécialité ?

Notion d’alias :

Un alias est un synonyme d’une table ou d’une colonne. On utilise des alias pour faciliter la
formulation de certaines requêtes pour donner des noms signifiant aux attributs apparaissant
comme des entêtes dans le résultat d’une requête ou pour réduire le temps de saisie de requête
contenant de nom d’attributs longs.

BD-SMI5 91 FSA-AGADIR
Syntaxe :

Nom-attribut Nom-alias ;

Nom-table Nom-alias ;

Select X.nom, Y.nom

FROM Enseignant X join Enseignant Y on X.spécialité = Y.spécialité ;

Where X.code_enseignant<y.code_enseignant;

4.5. Les expressions d’agrégation ou de groupement

Pour exprimer les agrégations, on utilise la clause group by.

La synatxe de select devient alors

Select liste_expressions

From liste_tables

Where condition_avant_gropu

Group by liste_expression

Having condition_après_ groupement

Les fonctions d’agégation sont les mêmes vues dans l’algèbre relationnelle

Max : donne le maximum de valeur d’un champ donné en paramètre

Min : donne le minimum de valeur d’un champ donné en paramètre

Avg : donne la moyenne des valeurs d’un champ donné en argument

BD-SMI5 92 FSA-AGADIR
Count : donne le nombre de valeur d’un champ donné

Count(*) : donne le nombre de ligne d’un résultat d’une sélection

Sum : donne la somme des valeurs d’un champ donné en paramètre

A l’exception de count(*) ,ces fonctions de calcul peuvent être utilisées avec ou sans le mot
distinct à la manière de count.

Remarque :

A l’exception de count(*) , les fonctions de calcul ne sont appliquées qu’après élimination de la


valeur nulle.

Exemples

Nous allons nous servir de la relation suivante pour développer certaines expressions
numériques :

Employé (N_empl Int,

nom char(20) ,

poste char(20) ,

date_entree date ,

salaire number8,2) ,

service char(2)) ;

 Donner le nom , le salaire et la commission des employés de la service 1 ainsi que leur

rémunération total .

Select Nom , salaire , commission , commission + salaire

FROM Employé

Where service =’1’ ;

 Donner le nom , le salaire , la commission et le revenu annuel des employés du service 1.

Select nom, salaire, commission , (salaire+commission)*12 ‘revenu_annuel’

BD-SMI5 93 FSA-AGADIR
Where service=’1’ ;

 On demande d’afficher le nom, le salaire, la commission des employés dont la commission


dépasse 1/10 du salaire.

Select nom, salaire , commission

From employé

Where salaire < commission*10 ;

 Donner la moyenne de l’age des étudiants de la 1ére année.

Select AVG(age)

From Etudiant

Where (Annee=’1’);

 Donner le total des salaires des employés du service 1 :

Select Sum(salaire)

From Employé

Where service =’1’;

Donner pour chaque étudiant le nom et la moyenne .

Select nom ,AVG(NOTe) , code_Etudiant.

Form résultat naturl join Etudiant

Group by code_etudiant, nom

Donner pour chaque étudiant de l’année 1 le nom et la moyenne .

BD-SMI5 94 FSA-AGADIR
Select nom ,AVG(NOTe) , code_Etudiant.

Form résultat naturl join Etudiant

Where année=1

Group by code_etudiant, nom

Donner pour chaque le nom des étudiants ayant une moyenne > 14

Select nom , code_etdudiant

Form résultat naturl join Etudiant

Group by code_etudiant, nom

Having avg(note)>14 ;

Exercice:

 Donner la somme et la moyenne des notes de l’étudiant n°10.

Select Sum(note) ‘somme’ , AVG(note) moyenne

FROM Résultat

Where num_etudiant =‘10’;

 Donner la faible et la meilleure note de l’etudiant x.

Select Max(note), Min(note)

From resultat natural join etudiant

Where ( num_etudiant = ’x’)

BD-SMI5 95 FSA-AGADIR
 Donner le nombre d’étudiants de l’établissement

Select count(*)

From etudiant ;

Exercice

 Donner le nombre d’étudiants d’une année donnée.


 Donner la note de l’étudiant x obtenu dans chaque matière.

4.6. Le tri

SQL dispose d’une clause permettant de trier le résultat d’une requête Select. C’est la clause
Order by . le tri peut être fait selon 1 ou plusieurs colonne de manière ascendante ou
descendante . la syntaxe de select devient après avoir ajouter la clause roder by :

Select *|liste_colonne_expressions

FROM liste_tables

….

Order by liste_référence_tri ;

Ou liste_reference_tri = colonne [Asc | Desc] ou numéro [Asc | Desc] [null first|last ]

Numéro désigne l’ordre d’une colonne ou d’une expression dans la clause Select .

Exemples

 Liste les étudiant dans l’ ordre alphabétique .

BD-SMI5 96 FSA-AGADIR
Select Nom , Prénom

FROM Etudiant

Order by Nom ;

 Donner la liste des étudiant de la 1ére année triée par nom .

Select Nom , Prénom

FROM Etudiant

Where Année = ‘1’

Order by nom ;

 Obtenir le nom , prénom des étudiant de la 1ére année ordonné par nom puis par prénom
descendant .

Select Nom , Prénom

FROM Etudiant

Where Année = ‘1’

Order by Nom , Prénom Desc ;

Remarque

La clause order by doit être placée la dernière dans une requête sélection :

Select …

From …

[where…]

[group by …

[Having ….]]

[Order by …];

5. Complément
5.1. Les expressions chaînes de caractère

SQL contient des fonctions permettant la manipulation des caractères, on en distingue :

BD-SMI5 97 FSA-AGADIR
 upper (Expr), lower(Expr) convertit en majuscule ou en minuscule
 concat(Expr1,Expr2) ou ||addiotione ou concate deux chaînes données en arguments.
 substr (Expr,Position[,Longueur]) extrait une sous chaîne de longueur longueur à partir de la
position Position. Si la longueur n’est pas spécifiée, la sous chaîne s’étend jusqu’à la fin de
l’expression.
 initcap(Expr) transforme les initiales des mots de Expr en majuscule et les autres lettres en
minuscule.
 Length(Expr) donne la taille de la chaîne.
 Trim(Expr) supprime les blancs de la chaîne Expr
 Ltrim(Expr) supprime les blancs de gauche de la chaîne Expr
 rtrim(Expr) supprime les blancs de droite de la chaîne Expr

 instr(Expr,chaîneRecherchée[,début[,numéroOccurrence]]) donne la position de chaîne


recherchée à partir de début. numéroOccurrence précise le numéro d’occurrence recherché.
 replace(Expr, chaîne1,chaîne2)remplace toute occurrence de chaîne1 dans Expr par chaîne2.
 Nvl(Expr1, Expr2) remplace toute Expr1 null par Expr2.

Exemple

 Donner le nom des étudiants de l’établissement en mettant la 1ère lettre en majuscule et les
autres lettres en minuscule.

Select initcap(nom), initcap(prenom)

From etudiant ;

Exercices

 Chercher le nom des employés qui contient une occurrence de h à partir du 2 caractère .
 Chercher le nom et l'adresse des employés. Si l'adresse est null, afficher la valeur 'inconnue'.

5.2. Les expressions date

Une constante date est une chaîne de caractères dont les formats comprennent

‘11/12/2001’ , ’11-12-01’

SQL dispose de fonctions pour manipuler des expressions de type date.

 Current_date : donne la date du jour en cours ;;


 sysdate : donne aussi la date du jour en cours ;
 systimestamp :donne la date et l’heure courante

BD-SMI5 98 FSA-AGADIR
 Extract (champ from date) avec champ =year / month / day / hour / minute
 months_between(date1,date2) retourne le nombre de mois entre les dates données en
arguments.

Exercice:

 Donner l’age moyen des étudiants, on suppose qu’on ne connaît que date de naissance des
étudiants.

Select AVG(Extract(year from Current_date)- Extract(yaer from date_naissance))

From étudiant;

D’autres formats de date peuvent être écrits an utilisant la fonction to_char dont la syntaxe est :

To_char(nombre|date,format)

Format inclut les symboles suivants pour les dates:

 D : numéro du jour de la semaine


 Day : nom du jour de la semaine
 Dy :nom du jour abrégé
 DD: numéro du jour dans le mois
 DDD: numéro du jour dans l'année.
 HH:heure du jour
 HH24
 MI: minute
 SS: secondes
 MM:numéro de mois
 MON :nom du mois abrégé
 Month: nom du mois
 Y :chiffre de l'année

Exemples

 select to_char(sysdate,'d,day,dd,mm,mon,y,yy,yyyy') as dates from dual;

Cette requête affiche

3,mercredi,28,03,mars ,7,07,2007

BD-SMI5 99 FSA-AGADIR
 select to_char(sysdate,'d,day,dd,ddd,mm,mon,y,yy,yyyy') as dates from dual;

Cette requête affiche

3,mercredi,28,087,03,mars ,7,07,2007

BD-SMI5 100 FSA-AGADIR


Chapitre 6
Langage de contrôle de données
Pour sécuriser les données et éviter les accès illégaux dans une base de données, SQL utilise le
mécanisme de contrôle des autorisations d'accès aux données et le mécanisme d'octroi et de
retrait de privilèges. Ce dernier, composé essentiellement des commandes Grant et Revoke,
forme le langage de contrôle des données LCD.

Le contrôle des autorisations est une technique parmi d'autres (cryptage des données, le contrôle
de flux de données) qu'on utilise pour assurer la sécurité des données. La sécurité des données est
souvent désignée par le terme de confidentialité.

1. Le contrôle des autorisations d’accès aux données

Nous allons nous servir de la relation "Etudiant" pour montrer ce que doit assurer le contrôle des
autorisations d'accès aux données.

Soit la relation "Etudiant"

Etudiant (numéro, nom, prénom, poids, note, année)

Voici des exemples d’autorisations d’accès à la table étudiant qui pourraient être données par le
propriétaire de cette table ou autres utilisateurs autorisés:

 lecture
 écriture
 modification de la structure de la table
 L’utilisateur X possède tous les privilèges sur la table Etudiant.
 L’utilisateur X peut lire le contenu de la table sans rien modifier.
 L’utilisateur X peut lire le contenu de numéro, nom et modifier la note de l’Etudiant.
 L’utilisateur X peut lire le contenu de "Etudiant" et modifier la note si l’année=’1’
 L’utilisateur X peut lire le contenu du nom et de la note et modifier cette dernière.
 Chaque étudiant a le droit de lire le contenu de la ligne qui le concerne mais pas de la
modifier.

Cette liste d’accès montre la souplesse que doit avoir un système de contrôle d’accès pour gérer
divers types d’accès .En plus, en vertu de l’évolution dynamique de la base de données (ajout,
suppression d’objets de base de données). Ce système doit être capable de mettre à jour ces droits
d’accès aux objets des B.D.

Remarques

 Lorsqu’un utilisateur crée un objet, il possède tous les droits possibles sur cet objet. Un autre
utilisateur (autre que les administrateurs) X ne possède aucun droit sur la table Etudiant :

BD-SMI5 101 FSA-AGADIR


 Les droits d’accès aux donnés dans une base de données sont stockées dans une autre base de
données appelé métabase ou de dictionnaire de la première base (mise à jour uniquement par
la SGBD).

2. Privilèges et rôles

2.1. Définition de privilège

Un privilège est un droit pour accéder à un objet de base de données ou pour exécuter une
commande SQL.

Comme privilèges, on peut citer :

 Sélection dans la table emp ;


 Création de la table service ;
 Modifier des lignes dans emp ;
 Connexion à la BD ;
 Exécuter une procédure ou une fonction.

On distingue deux types de privilèges : privilèges objets et privilèges système.

2.2. Privilège objet

Un privilège objet concerne un ou plusieurs objets de la base de données (colonne, table).

Exemples

 Sélection dans la table étudiant.


 Ajout des lignes à la table étudiant.
 Modification de la structure de la table étudiant (ajout de colonnes, de contraintes…)

2.3. Privilège système

Un privilège système concerne l'ensemble de la base. Il n’est pas lié à un objet de la base de
données.

Exemples

 Le privilège de création de session ou de connexion à la base de données est un privilège


système. On le désigne par : create session.
 Le privilège création des tables dans la base de données est un autre privilège système. Il est
défini par : create table ou create any table.

2.4. Définition de rôle

Un rôle est un ensemble de privilèges caractérisé par un nom. Quand on affecte un rôle à un
utilisateur, il possède alors tous les privilèges associés à ce rôle.

Certains rôles sont prédéfinis et d’autres sont créés par l’utilisateur.

BD-SMI5 102 FSA-AGADIR


Exemple

Rôle prédéfini : sysdba. Quand on affecte ce rôle à un utilisateur, il peut jouer le rôle
d’administrateur de base de données.

2.5. Création de rôle

Pour créer un rôle on utilise la syntaxe :

create role nomRole [identified by motPasse] ;

Un rôle créé ne contient au début aucun privilège. On peut lui ajouter des privilèges avec la
commande grant.

3. Octroi/Retrait de privilèges

Le mécanisme d’octroi/Retrait des privilèges permet à une personne autorisée d’accorder ou de


retirer des privilèges/rôles aux utilisateurs/rôles. Il peut être réalisé par deux commandes :

 Grant pour accorder des privilèges aux utilisateurs et rôles ;


 Revoke pour retirer des privilèges des utilisateurs et des rôles.

3.1. La commande GRANT

Cette commande permet d'accorder des privilèges et des rôles aux utilisateurs.

3.1.1. Syntaxes de grant

Pour comprendre simplement l’utilisation de cette commande, on propose les syntaxes suivantes :

 Grant liste_privilèges_objets on liste_objets to liste_utilisateurs | liste_rôles;


 Grant liste_privilèges_système to liste_utilisateurs | liste_rôles;
 Grant liste_rôles to liste_utilisateurs| liste_rôles;

Exemples

 Accorder à l’utilisateur A le droit de lire le contenu de la table Etudiant :

Grant select on Etudiant to utilisateur A ;

 Accorder à l’utilisateur A le droit d’insérer des données dans la table etudiant :

Grant Insert on Etudiant to utilisateur A ;

 Accorder à l’utilisateur A le droit de modifier le contenu de table Etudiant :

Grant update on Etudiant to A ;

 Accorder aux responsables de l’examen(rôle exam) tous les droits de la table Etudiant :

BD-SMI5 103 FSA-AGADIR


Grant ALL on Etudiant to exam ;

 Accorder aux enseignants (rôle enseignant) les droits de lire le contenu de la table étudiant et
de modifier seulement le contenu du champ note de la table.

Grant select update (Note) on Etudiant to enseignant ;

 Accorder à l’utilisateur A un privilège pour se connecter à la base :

Grant create session to A;

 Donner à X le privilège pour créer des tables dans son schéma.

Grant create table to X;

 Donner à X le privilège pour créer des tables dans n'importe quel schéma.

Grant create any table to X;

 Ajouter au rôle R le privilège de connexion à la base.

Grant create session to R;

 Ajouter au rôle R un privilège pour lire les données de la table "Etudiant".

Grant select on Etudiant to R;

3.1.2. Les options de Grant

Il est possible de donner à un utilisateur la possibilité de transmettre les privilèges qu’il reçoit.
Ceci se fait avec l’option ’with grant option’ pour les privilèges objets et ‘with admin option’ pour les
privilèges système ou les rôles.

Exemples

 Grant select on Etudiant to X with grant option ;


 Grant create table to X with admin option;

Remarques

 Le mot "public" permet d'accorder des privilèges à l'ensemble des utilisateurs d'une base de
données par une seule commande Grant.

Exemple

Grant select on Etudiant to public;

BD-SMI5 104 FSA-AGADIR


 Le mot all [privileges] désigne l’ensemble des privilèges sur une table.

Exemple

Grant all on emp to ali;

 Les mots all privileges désignent l’ensemble des privilèges de la base de données

Exemple

Grant all privileges to ali;

Remarque

 Le privilège GRANT ANY PRIVILEGE permet à son récepteur d’accorder tout privilège
système.
 Le privilège GRANT ANY OBJECT PRIVILEGE permet à son récepteur d’accorder tout
privilège objet.

3.1.3. Privilège et dictionnaire de données

Les privilèges accordés aux utilisateurs sont stockés dans les tables USER_TAB_PRIVS et
DBA_TAB_PRIVS. Pour voir la structure des ces tables, utiliser la commande :

desc nomTable.

Un exemple de consultation de la table dba_tab_privs

SELECT GRANTEE, OWNER, GRANTOR, PRIVILEGE, GRANTABLE

FROM DBA_TAB_PRIVS

WHERE TABLE_NAME = 'EMP' ;

Remarques

Accorder à un utilisateur les privilèges d’accorder des privilèges objets ou privilèges système.

 Le privilège grant any privileges autorise à son possesseur d'accorder tout privilège système.

Exemple

Grant grant any privileges to khalid;

 Le privilège grant any object privileges autorise à son possesseur d'accorder tout privilège
objet.

BD-SMI5 105 FSA-AGADIR


Exemple

Grant grant any object privileges to R;

3.2. La commande REVOKE

Cette commande permet de retirer des privilèges ou des rôles des utilisateurs ou des rôles. Ces
privilèges doivent exister.

3.2.1. Syntaxes de REVOKE

La syntaxe de cette commande est :

Revoke liste_privilèges_objet on liste_objets| liste_rôles | liste_privilège_systeme| all privileges


from liste_utilisateurs| liste_rôles|public ;

Exemple

 Supprimer le privilège modification des notes des enseignants :

Revoke update (Note) on etudiant from Enseignant ;

 Supprimer le privilège qui a permis à "X" de créer des tables dans son schéma.

Revoke create table from X;

 Supprimer le privilège qui a permis à "X" de créer des tables dans n'importe quel schéma.

Revoke create any table from X ;

 Retirer du rôle "test" le privilège qui assure la connexion à la base.

Revoke create session from test ;

3.2.2. Revoke avec des options

On peut les privilèges de faire référence à certains champs sur lesquels on a reçu de droit
references. Quand on supprime ces privilèges, il faut aussi supprimer les contraintes qui ont
été créée à base de ces privilèges. Pour exprimer ceci, on utilise revoke de la manière
suivante :

Revoke liste_privilèges _objets from liste_utilisteurs cascade constraints ;

4. Confidentialité et Vues

En plus des mécanismes vus ci-dessus, on peut aussi utiliser les vues pour renforcer la
confidentialité dans une base de données.

Nous allons nous servir des exemples suivants pour monter ce type de confidentialité.

BD-SMI5 106 FSA-AGADIR


Exemples :

Soit la relation suivante : Employe (num_emp, nom_prenom, adresse, salaire, num_service).

 Construire une vue qui permet à l’utilisateur "X" de lire toutes les informations des employés
sauf le salaire. "X" peut modifier l’adresse et le num_service de l’employé.

Create view employe_1 (num_emp, nom_prenom, adresse, num_service)

As

Select *

From employe;

Grant select, update (adresse, num_service)

On employe_1

To X;

 On veut qu’un utilisateur "Y" ne connaisse ni le nom_prenom, ni l’adresse des employés qui
touchent plus de 5000

Create view employe_2 (num_emp, salaire, num_service)

As

Select *

From employe

Where salaire>5000;

Grant select

On employe_2

To Y;

 Nous voulons que l'utilisateur "Z", le contenu de la table employé sauf le nom des employé
dont le salaire dépasse 5000.

Pour répondre à cette question, on construit deux vues vue_1 et Vue_2 comme définies ci-
après et on fait leur union :

Vue_3=Vue_1 U Vue_2

 Create view Vue_1

BD-SMI5 107 FSA-AGADIR


as select *

From employe

where salaire<5000 ;

 Create view Vue_2

as select num_emp,’X’,’X’, salaire, num_service

where salaire >=5000;

 L’union de ces deux vues est :

Create View Vue_3

As select * from Vue_1

UNION

Select *

From vue_2;

La réponse est donc

Grant select

On Vue_3

To Z;

Remarque

Ces mécanismes permettent de vérifier si un utilisateur a le droit d’effectuer certaines opérations


(création, mise à jour, consultation) dans une base de données. Ceci se fait en consultant le
dictionnaire de la base appelé méta base.

5. Exercices

- Accorder à ali les privilèges de modifier la colonne adresse de emp et d'insérer des
valeurs dans les champs nemp, nom et prénom.
- Accorder à laila le privilège de se connecter à la base et le rôle resource avec possibilité
de le transmettre à d'autres utilisateurs.
- Construire le rôle R et lui ajouter les privilèges suivants :
 Tous les privilèges sur emp
 Créer une session, créer des tables dans toute la base de données.
- Accorder à khalid le rôle R avec possibilité de la transmettre à d'autres utilisateurs

BD-SMI5 108 FSA-AGADIR


Chapitre7
Normalisation des relations
Ce chapitre montre comment on peut avoir des schémas de base de données de qualité en
utilisant des algorithmes dites algorithmes d’optimisation de relation. Ces algorithmes sont basés
sur la notion de dépendance fonctionnelle. Cette notion a été déjà introduite et nous allons en
voir plus de détails dans ce chapitre.

Soit R une relation.

x, y sont deux ensembles d'attributs de R.

1. Dépendance fonctionnelle DF
1.1. Définition 1

y dépend fonctionnellement de x, si la connaissance d'une valeur de x entraîne la connaissance


d'une seule valeur de y. on dit aussi que x détermine y.

Formellement

-y dépend fonctionnellement de x si pour tout z c R (éventuellement vide) et pour tout (a,b,c),


(a',b',c') appartenant à (x,y,z) si a=a' alors b=b'.

Notation

x y

Exemples

netu nom

netu, ncours note

1.2. Définition 2

La dépendance y
x

est dite élémentaire si y est non inclus dans x et il n'existe pas de x' C x tel que

x' y

BD-SMI5 109 FSA-AGADIR


y est en dépendance fonctionnelle complète avec x.

Exemple

(netu, nom, ncours, note)

1.3. Définition 3

La dépendance

x y

est dite canonique si y es un attribut.

Exemples

 netu nom,prénom
 netu nom
 netu prénom

1.4. Notation

Soit F l'ensemble de dépendances fonctionnelles sur R. On note

R  R, F 

Exemple

R=(netu, nom, prénom, ncours, note)

F={netu nom, ….,(netu, ncours) note}

1.5. Définition 4

Une dépendance x y est dite triviale si y C x.

Exemple

netu, nom netu

2. Les propriétés de la DF

Ces propriétés qui sont nommées les axiomes d'Armstrong, vont nous servir pour déduire de
nouvelles DF à partir d'autres DF. Elles sont 6:

2.1. Réflexivité

Si y C x alors x y (DF trivial). En particulier x x.

BD-SMI5 110 FSA-AGADIR


2.2. Augmentation

Si x y alors x U z y U z.

2.3. Transitivité

x y et y z alors x z.

2.4. Union

x y et x z alors x y U z.

2.5. Pseudo- transitivité

x y et y U w z alors x U w z.

2.6. Décomposition

Si x y et z C y alors x z.

Exemples

Si on a netu nom , prénom alors

netu nom.

3. Fermeture d'un ensemble DF


3.1. Définition 1

La fermeture d'un ensemble de dépendances fonctionnelles F est un ensemble de DF obtenu en


appliquant successivement les propriétés de DF à F. On le note par F'. F C F' est toujours
vérifiée.

Si une dépendance x y appartient à F', elle est déduite à partir de F. Ceci se note par

F |=(x y)

Donc

F'={ x y / F |=(x y)}

Exemple

Soit R= (netu, nom, prénom, ncours, note) et F={netu nom....)

Donner F'. F'=F U {(netu,netu), (nom,nom),(prénom,prénom)..

Remarque

BD-SMI5 111 FSA-AGADIR


(F')'=F'

3.2. Définition 2

Soit F et G deux ensembles de DF. F et G sont équivalents si F'=G'.

3.3. Définition 3

La fermeture d'un ensemble d'attributs x sous F notée x'(x;F) est l'ensemble d'attributs de R
déduits de F en utilisant les axiomes d'Armstrong. C.a.d en semble de y vérifiant x->y
appartenant à F'.

y C x' ssi on peut dériver x y à partir de F en utilisant les axiomes d'Armstrong.

On a toujours x C x' et x x' appartient à F'.

(x)' =U{a /x-> a est obtenue à partir de F en appliquant les règles d'Armstrong}

=U{a/ F |= (x->a)}

3.4. Propriétés

Les propriétés suivantes sont équivalentes

i) F |= (x->y)
ii) x->y Є F'
iii) y Є (x)'
iv) x->y est dérivée de F en utilisant les propriétés d'Armstrong.

Algorithme de calcul de (x)'

3.5. Fermeture de (x)'

Début

i) initialiser (x)' par x


ii) tant que (x)' change faire

-chercher une DF de F dont la partie gauche est dans (x)'

-mettre dans (x)' la partie droite de la DF trouvée.

Fin de tant que

Fin.

Exemple

Soit R=(A, B, C, D, E) et F={A->D; A, B ->E ; B,I -> E; C, D ->I; E-> C}.

Donner la fermeture (A, E)' en utilisant F.

BD-SMI5 112 FSA-AGADIR


On a bien A, E Є (A, E)';

Or D Є (A, E)' car A-> D;

De plus, C Є (A, E) car E-> C;

I Є (A, E) car C, D-> I;

Donc (A, E)'= {A, E, D, C, I}.

Exercice1

Donner (B, E)' en utilisant F.

(B, E)'={B, E, C}

Exercice2

Soit R=(A, B, C, D, E, G, H) et F={A, B->C; B ->D ; C, D -> E; C, E -> G, H; G-> A}

En utilisant (les propriétés d'Armstrong ) la fermeture de A, B montrer que A, B ->E.

B-> D donc A,B -> A,D et par réflexivité A, B->D.

A, B -> C et A, B->D alors A,B -> C, D par union.

Or C,D -> E donc A,B ->E par transitivité.

Exercice3

IDEM que exercice2 mais pour B, G-> C

Exercice4

IDEM que exercice2 mais pour A, B-> G

3.6. La fermeture transitive d'un ensemble de DF


3.6.1. Définition

La fermeture transitive d'un ensemble de DF F est F U {les DF générées par Transitivité}.

Exercice

Donner le fermeture de F={nlivre->treliure; nlivre->nauteur; treliure->prix_reliure; nauteur-


>nom}

3.7. Couverture minimale d'un ensemble de Dépendances fonctionnelles.


3.7.1. Définition

Soit F et G deux ensembles de DF.

BD-SMI5 113 FSA-AGADIR


G est dite couverture minimale de F si G ≡F et les propriétés suivantes sont vérifiées:

i) Si x-> a Є G alors x-> a est canonique;


ii) Si x-> a Є G alors G # G-{ x-> a};
iii) Si x,a->b alors G # (G-{ x,a->b})U{x->b} les DF sont élémentaires..

Remarques

- G est le plus petit ensemble de DF qui permet de générer toutes les autres DF.
- G n'est pas unique.

3.7.2. Algorithme de calcul de couverture minimale

Soit F un ensemble de DF.

Soit G la couverture minimale (que l’on veut calculer) de F.

Début

i. G=F;
ii. Remplacer tout x  a1, a2, a3, …ap dans G par

x  ai;

i. Supprimer les attributs redondants;


ii. Supprimer les DF redondantes de G.

Fin.

Exercice

Soit R=(A,B,C,D) et F={A, B->C; A->D; D->B; C->D} ensemble de DF sur R.

Calculer la couverture minimale G de F.

4. Normalisation de relations
4.1. Définition

R(a1,a2,a3,…) est décomposable en R1, R2 , ….si

R=R1 U R2 U R3….

C'est-à-dire que le schéma de R est l'union des schémas de Ri.

Exemple

La relation R suivante

R (nf, nomf, ville, np, nomp, qtité) est décomposable en

- F (nf, nomf,ville)

BD-SMI5 114 FSA-AGADIR


- P (np, nomp)
- Liv (nf,np,qtité)

4.2. Propriétés

Si dans R(x,y,z) on a x-> y alors R=R1(x,y)UR2(x,z).

Exemple

R(netu, nom_etu, adresse, ncours, note, nom_cours);

R=Etudiant U résultat U cours.

4.3. Décomposition sans perte

La décomposition de R en R1, R2, …est dite sans perte d'information si

r(R)=pR1(r)* pR2(r)* pR3(r)…

Les sélections sur R et sur les Ri fournissent les mêmes résultats :

R  R1,R2…

4.4. Propriété

Soit R(x,y,z) une relation décomposable en R1(x,y) et R2(y,z). Cette décomposition est sans perte
d'information si y est clé de R1 ou de R2.

4.5. Décomposition qui préserve les dépendances

La décomposition de R en R1, R2, … préserve les dépendances si

F'=p R1(F)U p R2(F)….

Où p Ri(F) désigne les DF x->y de F' pour x,y Є Ri.

Exemple

Soit R=(netu, nom_etu, ncours, note) et F={netu->nom_etu; netu, ncours->note}.

Vérifier si la décomposition de R en R1(netu,nom_etu) et R2(netu, ncours, note) préserve bien


les dépendances.

On a p R1(F)={ netu->nom_etu}

et p R2(F)={ netu, ncours -> note }.

BD-SMI5 115 FSA-AGADIR


donc

p R1(F)U p R2(F)=F'.

4.6. Propriété

Si une décomposition ne fait pas disperser les attributs d'une DF entre les relations alors elle
préserve les DF.

Exemple

Soit la relation R définie par R(A,B,C) et F={A B, B C}. Sa décomposition en R1 et R2


données comme suit préserve bien les dépendances fonctionnelles :

R1(A,B) et R2(B,C)

Remarque

L'objectif de la décomposition est d'éviter les anomalies et réduire la redondance dans la base de
données.

4.7. Décomposition d'une relation en 3forme normale.


4.7.1. Théorème

Toute relation R possède une décomposition en relations R1, R2 … tels que

Les R1, R2.. sont en 3 forme normale;

Cette décomposition préserve les dépendances et est sans perte d'information.

4.7.2. Algorithme de normalisation en 3FN

Algorithme de Normalisaion3FN;

Entrées R =<R,F>

Sorties R1=<R1,F1>, R2=<R2,F2>…qui sont en 3FN

Début

Chercher une couverture minimale de F soit G par exemple.

Diviser G en sous-ensemble de DF ayant même source. Soit G1, G2…

Pour chaque Gi construire un schéma Ri=<Ri,Gi> où Ri est constitué des attributs de figurant
dans Gi

BD-SMI5 116 FSA-AGADIR


Si aucune des relations ne contient une clé de R, ajouter une relation R0 contenant une des clés de R.

Fin.

Exemple

Soit

R(A,B,C,D,E) et F={A B; A C; B D; B E}

Cherchons une décomposition de R.

i. Calculons la couverture minimale de F.

G=F

ii. cherchons les DF de même source

G1={A B; A C} ; G2={B D; B E}

iii.les relations qe l’on va obtenir

R1(A,B,C); R2(B,D,E)

iv. De plus
A est une clé de R car A+={A,B,C,D,E}=R.

Exercice

Chercher une normalisation de R définie par :

R(A,B,C,D) et F={A BC}

4.8. Normalisation en forme normale de Boyce-Code


4.8.1. Définition

Une relation R est en Forme Normale de

Boyce–Codd (FNBC) si pour toute DF

X->Y avec X, Y C R on X est superclé de la relation R.

Si X->Y et X n'est pas superclé de R, on dit que X viole FNBC.

Exemple

Soit R une relation définie par

R(A,B,C) avec les DF F={A,B->C ,C-> A}

BD-SMI5 117 FSA-AGADIR


-On AB->C.

AB->C viole FNBC?

AB+={A,B,C}. Donc AB->C ne viole FNBC

C-> A viole FNBC?

C+={C,A} . Donc elle viole FNBC.

Donc

R n'est pas en FNBC.

4.8.2. Propriété

Toute relation en FNBC est en 3FN.

4.8.3. Théorème

Toute relation est décomposable en relations

en FNBC sans perte d'information.

4.8.4. Algorithme de décomposition en FNBC

Algorithme FNBC

Entrées Ri=<Ri,Fi>

Début

Tant qu'il existe dans Ri une FD x y qui viole FNBC faire

Décomposer Ri en

Ri1=(Ri1(x,y),xy) et Ri2=(Ri2(Ri-(y-x)), ab avec a et b Ri.

Fin tant que

Pour tout Ri, Rj

Si Ri C Rj alors

Supprimer Ri

fin si

fin pour

BD-SMI5 118 FSA-AGADIR


Fin.

Exercice

Soit R(A,B,C,D,E,F,G) et DF={A BC ; D EF; AD G}.

Chercher une décomposition de R=<R,DF>.

BD-SMI5 119 FSA-AGADIR


Références

1. Database James L.Johnson Oxford 1997

2. Oracle 8 les outils de C. McCullough-Dieter OEM 2000


développement

3. Bases de données Georges Gardarin Eyrolles 2001

4. Introduction aux requêtes Michael J. Hernandez et John L. Eyrolles 2001


SQL Viescas

5. Applications mobiles avec B. Vidal Eyrolles 2001


Oracle

6. Oracle 9i sous Windows Gilles Brillard Eyrolles 2003

BD-SMI5 120 FSA-AGADIR