Академический Документы
Профессиональный Документы
Культура Документы
Introduction
Chapitre 1 7
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
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
BD-SMI5 3 FSA-AGADIR
Chapitre 6 101
Chapitre 7 109
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.
- 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.
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.
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.
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.
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.
nomEntité
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.
BD-SMI5 8 FSA-AGADIR
Livre
codeLivre
titre
auteur
éditeur
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.
nomAssociation
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 :
membre Livre
codeMembre codeLivre
emprunter
0,n titre
nom 0,n
prénom auteur
éditeur
membre Livre
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.
En général une association peut lier deux ou plusieurs entités ou une entité avec elle-même.
Exemple étendu
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
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.
Pour les expliquer, nous allons nous baser sur des exemples.
Association Un à Plusieurs
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).
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
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.
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.
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.
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.
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 :
Remarques
- U
tilisateurs standard
- A
dministrateurs
- D
éveloppeurs
- A
nalystes et programmeurs
Nous allons citer quelques avantages qui poussent les concepteurs et les développeurs à
stocker les informations dans une base de 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
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 :
D1 : A, B, C fich1
D2 : D, B, C fich2
D1 A, B, C
D2 A, B, D
D1
A, B, C, D
D2
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
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.
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.
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.
Soit le fichier prêt d’un système d’information d’une bibliothèque ou chaque membre peut
emprunter quatre livres au maximum.
int livre1;
int livre2;
int livre3;
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
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
Remarque
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.
BD
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).
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
Description
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é.
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).
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…).
1. Domaine
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.
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
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
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.
nomR elation(attr1,attr2,…).
Par exemple,
Num_auteur,
Nom_auteur et
Prénom_auteur.
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.
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
5.2. Exemple
BD-SMI5 22 FSA-AGADIR
A_ecrit(num_auteur, num_ouvrage).
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.
Chaque relation possède une clé primaire unique et non null. La clé primaire est soulignée dans
un schéma de relation.
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
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).
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),
A_ecrit(num_auteur, num_ouvrage).
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
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.
9. Dépendance fonctionnelle
9.1. Définition
Notation
X DF Y
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.
Soit X=(X1, X2,…) un attribut composé d'une relation R. Soit Y un autre attribut de R.
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
Ouvrage
Num_Four Num_livre Quantité
F1 1 12
F1 2 10
F2 3 9
F2 2 10
num_Four Quantité ni
num_livre Quantité
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
BD-SMI5 27 FSA-AGADIR
12. Dépendance fonctionnelle réflexive
12.1. Définition
Si X C Y C R alors Y X
X X
12.2. Exemples
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.
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
Pour éliminer cette anomalie, on décompose cette relation en deux relations qui lui représentent
un équivalent:
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 :
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 :
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
Num_auteur Num_ouvrage
prix titre
Nom_auteur Prénom_auteur
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
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)
16.2. Exercice 2
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…).
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.
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
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
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
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.
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
R1 R2
Exemple
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
Ouvrage
Num_ouvrage Titre Auteur
1 SGBD A. Belaid
2 Réseau B. Karam
3 OS H. Ahmed
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
Remarques
card(R) <=card(R1)+card(R2)
degré(R)= degré (R1)= degré (R2).
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
Exemple
Auteur
Num_auteur Nom Prénom
1 Bassil Ali
Remarque
Card(R) <=card(R1)
degré(R)= degré (R1)= degré (R2).
Notations possibles :
R=R1 R2
BD-SMI5 37 FSA-AGADIR
R= R1 intersect R2
And(R1,R2)
R1 R2
Exemple
Auteur
Num_auteur Nom Prénom
2 Balla Ahmed
Remarque
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
Exemple
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
Exercices
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".
R2=sélection (R1/condition)
R2=Restrict (R1/condition)
R2= σ condition (R1)
Notation graphique
BD-SMI5 40 FSA-AGADIR
R2
R1
Exemple
Reliure1
TypeReliure PrixReliure
luxe 200
cartonne 150
Remarques
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.
R1
b
ouvrage avec b ( nbrepage 300)et titre ' sgbd '
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 '
R1.Ai op R.Bj
Notations possibles
R=R1 R2
C
R=join(R1,R2/C)
Notation graphique
BD-SMI5 42 FSA-AGADIR
R
R1 R2
Remarque
Degré(R)=degré (R1)+degré(R2)
BD-SMI5 43 FSA-AGADIR
Exemples
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
… … … …
… … … …
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
Exemple
R1
A B
a1 1
a2 1
a3 3
et
R2
B C
1 c1
4 c2
5 c3
BD-SMI5 46 FSA-AGADIR
R
A R1.B R2.B C
a1 1 1 c1
a2 1 1 c1
A R1.B R2.B C
a3 3 1 c1
Notation
Les notations symbolique et graphique sont les mêmes que pour la θ-jointure.
Exemple
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
Exemple
R1
A B
a1 1
a2 1
a3 3
et
BD-SMI5 48 FSA-AGADIR
R2
B C
1 c1
4 c2
5 c3
A B C
a1 1 c1
a2 1 c1
Exercice
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 externe complète ou jointure externe de deux relations R1 et R2 est une relation R
donnée par
Notation
R= R1 R2
BD-SMI5 50 FSA-AGADIR
Notation graphique
R1 R2
Exemple
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
Notation
R= R1 R2
Notation graphique
BD-SMI5 52 FSA-AGADIR
R
R1 R2
Exercice
Notation
R= R1 R2
Notation graphique
R1 R2
BD-SMI5 53 FSA-AGADIR
Exercice
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 :
R1(ch_de_partionnement , agg-champ_de_calcul)
Exemple
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
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 :
Exercice
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 :
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 :
Exemple
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
Remarque
Exemple
BD-SMI5 57 FSA-AGADIR
R
emp service
Exercices
Donner l’arbre algébrique des requêtes suivantes (écrire tout d’abord la forme
algébrique) :
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.
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 :
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.
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
On peut aussi parler du langage de transactions composé des commandes commit et rollback.
Dans ce chapitre, nous allons étudier le LDD en respectant la syntaxe du SGBD Oracle.
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
Bases de données
Tables
Index
Vues
rôles
Schémas
Etc.
Pour créer une base de données, on utilise la syntaxe suivante (dépend de la version d’Oracle) :
Syntaxe
Exemple
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
Syntaxe
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.
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 constantes caractères sont délimitées par deux apostrophes comme ‘Ali’ et ‘Casa’.
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.
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
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).
'12/11/2005' ou '12-11-2005'
Constantes littérales:
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.
Default expression indique une valeur par défaut du champ. expression doit être du même que celui
du champ.
Contrainte
On continue la description de la syntaxe par expliquer les différentes types de contraintes colonne
(in line).
[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 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
Exemple 1
Nom varchar2(20),
Prénom varchar2(20),
Salaire number(10,2),
Exemple2
Nom varchar2(20),
Prénom varchar2(20),
Salaire number(10,2),
BD-SMI5 65 FSA-AGADIR
Exemple3
Nom varchar2(20),
Prénom varchar2(20),
Salaire number(10,2),
On reprend de nouveau la syntaxe de la commande create pour expliquer les contraintes table
(off line).
Nom varchar2(20),
Prénom varchar2(20),
Salaire number(10,2),
Genre char,
Nserv number(2),
BD-SMI5 66 FSA-AGADIR
constraint valsGenre check(lower(genre) in(‘f’,’m’)));
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
preserve rows : conserver les lignes après commit. Mais elles seront supprimées à la fin de la
session(exit, disconnect).
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
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é.
Description de la syntaxe
Exemples
Remarque
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
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
Base de données
Table
Index
Vues
rôles
Schéma
Pour supprimer une base et les objets qu’elle contient, on utilise la syntaxe suivante :
Drop database ;
Pour supprimer une table et les données qu’elle contient, on utilise la commande drop.
Syntaxe
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
La dernière commande supprime la table service et toutes les contraintes qui y font référence.
Syntaxe
Exemple
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
Syntaxe
|Rename to nouveauNomDeTable
|Drop (champ1|champ2,...)
|Modify (champ1…|champ2…,…)
BD-SMI5 71 FSA-AGADIR
|Enable | Disable Primary key | Constraint nomContrainte | unique(listeChamps) [Exceptions
into nomTableExceptions]
[cascade]
Description de la syntaxe
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 :
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
BD-SMI5 72 FSA-AGADIR
Alter table emp disable primary key;
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.
|rename to nouveauNom
|enable
|disable
Exemples
BD-SMI5 73 FSA-AGADIR
Alter index indexNom enable ;
Remarque
Pour modifier le mot de passe ou l’espace de stockage réservé à un utilisateur, on utilise la syntaxe
suivante :
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 :
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 :
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 :
values(liste_valeurs)
BD-SMI5 75 FSA-AGADIR
Insert into nom_table[(liste_colonnes)]
expression_sélection ;
Description
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.
Expression_sélection : est une requête sélection quelconque que l’on va étudier dans ce chapitre.
Exemples
values(‘10’,’talbi’) ;
Construire une table temp et placer le nom , le numéro et la moyenne de chaque étudiant.
Numéro char(4),
Moyenne number(6,2)) ;
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] ;
Exemple
update cours
set nbre_heures=nbre_heures+10 ;
update resultat
set note=note+2
where code_cours=’4’;
update resultat
set note=note*1.1
from etudiant
where nom=’X’)
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
[where conditions];
Exemple
Delete
From enseignant ;
delete
From cours
Where nom=’réseau’ ;
4. La Commande select
Projection
Sélection
Projection+sélection
Utilisation des opérateurs ensemblistes
Jointures
Tri
Groupement
BD-SMI5 78 FSA-AGADIR
4.1. Projection simple
From nomTable;
Exemples
Select *
from Etudiant ;
ou bien
From étudiant ;
Select *
FROM Enseignant ;
Emploi de Distinct
Distinct permet d’obtenir des lignes distinctes. On peut aussi utiliser le mot unique.
Exemple
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
From cours ;
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 :
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.
Or , And et Not .
BD-SMI5 80 FSA-AGADIR
Remarque
La comparaison d’une expression avec la valeur null donne toujours une valeur null. :
Exemples
Donner toutes les informations sur les cours dont le nbre_heures dépasse 60.
Select *
FROM cours
Chercher les noms des cours de la 1ére année ayant un nbre_heures >60
Select Nom
FROM cours
Donner la liste des noms et prénom des Etudiant inscrits en 1ére année ou en 2éme année.
FROM Etudiant
Emploi de between
Cet opérateur cherche si une valeur se trouve dans un intervalle limité par deux autres valeurs.
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
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
Emploi de in
BD-SMI5 82 FSA-AGADIR
Cet opérateur cherche si une valeur se trouve parmi une liste de valeurs.
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
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.
Exemple
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
Donner le nom et prénom des étudiant dont le prénom ne contient pas la lettre ‘i’.
FROM Etudiant
Dans cette partie, on va montrer comment on exprime les opérateurs ensemblistes vus dans
l’algèbre relationnelle.
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 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’.
FROM Etudiant
UNION
FROM Etudiant
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
union
Select Nom
BD-SMI5 85 FSA-AGADIR
FROM cours
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 ]]
Exemple
Donner le nom et prénom des étudiant de la 2éme année et dont le nom contient ‘M’.
FROM Etudiant
BD-SMI5 86 FSA-AGADIR
Where (Année = ‘2’ )
intesect
FROM Etudiant
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
intersect
Select Nom
FROM cours
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 ]]
Exemple
Donner le nom et prénom des étudiant de la 2éme année et dont le nom ne contient pas ‘M’.
FROM Etudiant
minus
FROM Etudiant
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
minus
Select Nom
FROM cours
BD-SMI5 88 FSA-AGADIR
Where nbre_heures Between 60 And 70 ;
Select liste_colonnes
[where condition] ;
Exemple
select *
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.
La jointure naturelle entre les tables nom_Table1 et nom_Table2 ayant des colonnes communes
s’exprime par
Select liste_colonnes
[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
[Where condition] ;
Select liste_colonnes
[Where condition]
La jointure externe naturelle entre les tables nom_Table1 et nom_Table2 ayant des colonnes
communes s’exprime par
Select liste_colonnes
[Where condition] ;
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] ;
Select liste_colonnes
[Where condition]
Exemples
Select *
Obtenir les noms des enseignants spécialisés en SGBD qui donnent le cours n°1.
Select nom
4.4.2.3. Auto_jointure :
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 ;
Where X.code_enseignant<y.code_enseignant;
Select liste_expressions
From liste_tables
Where condition_avant_gropu
Group by liste_expression
Les fonctions d’agégation sont les mêmes vues dans l’algèbre relationnelle
BD-SMI5 92 FSA-AGADIR
Count : donne le nombre de valeur d’un champ donné
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 :
Exemples
Nous allons nous servir de la relation suivante pour développer certaines expressions
numériques :
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 .
FROM Employé
BD-SMI5 93 FSA-AGADIR
Where service=’1’ ;
From employé
Select AVG(age)
From Etudiant
Where (Annee=’1’);
Select Sum(salaire)
From Employé
BD-SMI5 94 FSA-AGADIR
Select nom ,AVG(NOTe) , code_Etudiant.
Where année=1
Donner pour chaque le nom des étudiants ayant une moyenne > 14
Having avg(note)>14 ;
Exercice:
FROM Résultat
BD-SMI5 95 FSA-AGADIR
Donner le nombre d’étudiants de l’établissement
Select count(*)
From etudiant ;
Exercice
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 ;
Numéro désigne l’ordre d’une colonne ou d’une expression dans la clause Select .
Exemples
BD-SMI5 96 FSA-AGADIR
Select Nom , Prénom
FROM Etudiant
Order by Nom ;
FROM Etudiant
Order by nom ;
Obtenir le nom , prénom des étudiant de la 1ére année ordonné par nom puis par prénom
descendant .
FROM Etudiant
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
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
Exemple
Donner le nom des étudiants de l’établissement en mettant la 1ère lettre en majuscule et les
autres lettres en minuscule.
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'.
Une constante date est une chaîne de caractères dont les formats comprennent
‘11/12/2001’ , ’11-12-01’
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.
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)
Exemples
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;
3,mercredi,28,087,03,mars ,7,07,2007
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é.
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.
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 :
2. Privilèges et rôles
Un privilège est un droit pour accéder à un objet de base de données ou pour exécuter une
commande SQL.
Exemples
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
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.
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.
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
Cette commande permet d'accorder des privilèges et des rôles aux utilisateurs.
Pour comprendre simplement l’utilisation de cette commande, on propose les syntaxes suivantes :
Exemples
Accorder aux responsables de l’examen(rôle exam) tous les droits de la table Etudiant :
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.
Donner à X le privilège pour créer des tables dans n'importe quel schéma.
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
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
Exemple
Les mots all privileges désignent l’ensemble des privilèges de la base de données
Exemple
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.
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.
FROM DBA_TAB_PRIVS
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
Le privilège grant any object privileges autorise à son possesseur d'accorder tout privilège
objet.
Cette commande permet de retirer des privilèges ou des rôles des utilisateurs ou des rôles. Ces
privilèges doivent exister.
Exemple
Supprimer le privilège qui a permis à "X" de créer des tables dans son schéma.
Supprimer le privilège qui a permis à "X" de créer des tables dans n'importe quel schéma.
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 :
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é.
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é.
As
Select *
From employe;
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
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
From employe
where salaire<5000 ;
UNION
Select *
From vue_2;
Grant select
On Vue_3
To Z;
Remarque
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
1. Dépendance fonctionnelle DF
1.1. Définition 1
Formellement
Notation
x y
Exemples
netu nom
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
Exemple
1.3. Définition 3
La dépendance
x y
Exemples
netu nom,prénom
netu nom
netu prénom
1.4. Notation
R R, F
Exemple
1.5. Définition 4
Exemple
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 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.
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
netu nom.
Si une dépendance x y appartient à F', elle est déduite à partir de F. Ceci se note par
F |=(x y)
Donc
Exemple
Remarque
3.2. Définition 2
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'.
(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
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.
Début
Fin.
Exemple
Exercice1
(B, E)'={B, E, C}
Exercice2
Exercice3
Exercice4
Exercice
Remarques
- G est le plus petit ensemble de DF qui permet de générer toutes les autres DF.
- G n'est pas unique.
Début
i. G=F;
ii. Remplacer tout x a1, a2, a3, …ap dans G par
x ai;
Fin.
Exercice
4. Normalisation de relations
4.1. Définition
R=R1 U R2 U R3….
Exemple
La relation R suivante
- F (nf, nomf,ville)
4.2. Propriétés
Exemple
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.
Exemple
On a p R1(F)={ netu->nom_etu}
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
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.
Algorithme de Normalisaion3FN;
Entrées R =<R,F>
Début
Pour chaque Gi construire un schéma Ri=<Ri,Gi> où Ri est constitué des attributs de figurant
dans Gi
Fin.
Exemple
Soit
R(A,B,C,D,E) et F={A B; A C; B D; B E}
G=F
G1={A B; A C} ; G2={B D; B E}
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
Exemple
Donc
4.8.2. Propriété
4.8.3. Théorème
Algorithme FNBC
Entrées Ri=<Ri,Fi>
Début
Décomposer Ri en
Si Ri C Rj alors
Supprimer Ri
fin si
fin pour
Exercice