Vous êtes sur la page 1sur 78

Bases de données

◼ Définition
• Une base de données est une collection de données,
interdépendantes, stockées sans redondance inutile,
cohérentes (en cas de modification), mises à la
disposition de plusieurs utilisateurs ou programmeurs,
organisées indépendamment des programmeurs
◼ Principe d’une base de données
• Nombreuses personnes peuvent y accéder, et
• Séparation nette entre la base elle-même et les
utilisateurs conduisent à la notion d’environnement
client/serveur
Assalé Adjé Louis Bases de données 1
Bases de données
◼ Environnement Client/Serveur
• Serveur informatique
✓ Est un dispositif informatique offrant des services à des clients
✓ Ces services peuvent être de différents types :
◼ Partage de fichiers
◼ Partage de données (BDD)
◼ Hébergeur web …
• Client
✓ Matériel logiciel ou informatique, permettant l’envoi de
requêtes à un serveur donné, et la réception des réponses
◼ Interface légère gérant de façon conviviale la communication avec le
serveur
Assalé Adjé Louis Bases de données 2
Bases de données
◼ Environnement Client/Serveur
• Architecture 3-tiers
✓ Évolution de l’architecture
client/serveur, dans laquelle on
a trois couches logicielles.
Le serveur est scindé en deux:
◼ Serveur1 : stockage de données
◼ Serveur2 : serveur métier, effectuant
la gestion logicielle
✓ Leclient communique avec le serveur métier qui lui-même
communique avec le serveur de stockage
◼ Les bases de données actuelles sont construites sur ce schéma

Assalé Adjé Louis Bases de données 3


Bases de données
◼ Généralités
• Modèle
✓ Sert à appréhender la réalité afin de la
matérialiser dans l’ordinateur
• Structure générale d’une base de données

Assalé Adjé Louis Bases de données 4


Bases de données
◼ Généralités
• Avantages d’une base de données
✓ Indépendance des données et des programmes
✓ Elimination des redondances
✓ Interface utilisateur évoluée
✓ Centralisation de contrôle sur les données, synchronisation des
accès (multi-utilisateurs), exclusion mutuelle
• Caractéristiques d’une base de données
✓ Maintient automatique de la cohérence des données
✓ Maintient de l’intégrité (vérification automatique)
✓ Sécurité, confidentialité par contrôle d’accès et par clés
✓ Fiabilité
Assalé Adjé Louis: en cas de pannes →données
Bases de journaux (points de reprise) 5
Bases de données
◼ Modèle relationnel
• Historique et notions de base
✓ Modèle inventé en 1970 par E. F. Codd, mathématicien à IBM
✓ Principe :
◼ les données d’un système de gestion de bases de données sont
représentées sous forme de tableaux de valeurs appelés relations
◼ Une ligne d’une relation est tuple, une colonne caractérisée par un nom
est appelée attribut

- La relation Etudiant contient


5 tuples sa cardinalité est 5
- Les attributs de la relation
sont : « NEtud », « Nom » et
« Prénom »

Assalé Adjé Louis Bases de données 6


Bases de données
◼ Modèle relationnel
• Définitions
✓ Le schéma d’une relation est défini par la liste de ses attributs.
◼ Ex: Etudiant(NEtud, Nom, Prénom) – Fournisseurs(NomF, Adresse)
✓ Dépendances fonctionnelles
◼ Soit R(C) un schéma de relation. (C est un ensemble d’attributs),
l’attribut X dépend fonctionnellement de l’attribut Y (Y→X) si et
seulement si, connaissant la valeur de Y, on connaît nécessairement la
valeur de X. on dit que l’attribut Y détermine l’attribut X.
◼ Peut-on dire que l’attribut Nom détermine l’attribut Prénom?
◼ Un ensemble d’attributs A dépend fonctionnellement d’un ensemble B
(B→A) si et seulement si deux tuples qui coïncident pour des valeurs
sur B, coïncident également sur A
◼ Par exemple : Catalogue (Four, Produit, Prix) Four, Produit → Prix
Assalé Adjé Louis Bases de données 7
Bases de données
◼ Modèle relationnel
• Dépendances fonctionnelles
✓ Propriété de la dépendance fonctionnelle
◼ Réflexivité X→X XY Y→X trivialité
◼ Transitivité X→Y et Y→Z  X→Z
◼ Projection X→Y, Z  X→Y et X→Z
◼ Augmentation X→Y  Z X, Z→Y
◼ Pseudo-transitivité X→Y et Y, Z→T  X, Z→T
◼ Additivité X→Y et X→Z  X→Y, Z

Assalé Adjé Louis Bases de données 8


Bases de données
◼ Modèle relationnel
• Dépendances fonctionnelles
✓ Dépendance fonctionnelle élémentaire
◼ Soit R un schéma de relation. Une dépendance fonctionnelle
R.A→R.B est élémentaire, notée , si et seulement si A’A
R.A’ → R.B
◼ Exemple: Catalogue (Four, Produit, Prix) Four, Produit Prix ?
◼ Notion de clé : Soit R(C) un schéma de relation, un sous-ensemble K
de C, est une clé de R si et seulement si R.K R.C
◼ Exemple : Etudiant (N°Etud, Nom, Prenom, Adresse)
N°Etud Nom, Prenom, Adresse

Assalé Adjé Louis Bases de données 9


Bases de données
◼ Modèle relationnel
• Dépendances fonctionnelles
✓ Dépendance fonctionnelle élémentaire directe
◼ Une dépendance fonctionnelle élémentaire R.A R.B est directe,
notée , si et seulement s’il n’existe pas A’≠A tel que : (A’ non clé de
la relation) R.A → R.A’ → R.B
◼ Exemple : R (Four, Produit, Adresse, Poids, Prix)
Four, Produit Prix ? Four Adresse? Produit Poids ?
• Exercices
✓ Voir fiche de TD : Modèle relationnel

Assalé Adjé Louis Bases de données 10


Bases de données
◼ Modèle relationnel
• Dépendance multivaluée
✓ Définition
◼ Etant donnée une relation R(C), si à une valeur de A peuvent
correspondre plusieurs valeurs de B, on dit qu’il existe une dépendance
multivaluée de A vers B et on note : A →→ B
◼ Exemple : Assuré (N°Assur, Nom, DDN, Sinistre, Véhicule)
N°Assur →→ Véhicule car un assuré peut posséder plusieurs véhicules
◼ La dépendance fonctionnelle est un cas particulier de la dépendance
multivaluée

Assalé Adjé Louis Bases de données 11


Bases de données
◼ Modèle relationnel
• Normalisation
✓ principe
◼ La normalisation a pour but d’éliminer de la redondance et d’éviter des
anomalies de stockage dans un schéma relationnel
◼ On distingue plusieurs degrés de forme normale. La mise en place de la
base de données va consister à obtenir des relations en forme normale
de plus haut degré possible. Un schéma relationnel est à la nième forme
normale si chaque relation ou table est à cette forme normale
✓ Les différentes formes normales
◼ 1ère forme normale : une relation est en première forme normale (1FN)
si chacun de ses attributs contient une valeur atomique ; les attributs
sont monovalués

ASSALE Adjé Louis Bases de données 12


Bases de données
◼ Modèle relationnel
• Normalisation
✓ Les différentes formes normales
◼ 1ère forme normale : exemple

ASSALE Adjé Louis Bases de données 13


Bases de données
◼ Modèle relationnel
• Normalisation
✓ Les différentes formes normales
◼ 2ème forme normale : une relation est en deuxième forme normale
(2FN) si elle est d’abord en 1FN et si de plus, les attributs n’appartenant
pas à la clé primaire (lorsque celle-ci est constituée d’un groupe
d’attributs) ne dépendent pas fonctionnellement d’une partie de la clé

Car N°Four → NomFour alors que


(N°Four, N°Produit) clé

On décompose en supprimant l’attribut dépendant NomFour de la table et en créant


une table contenant les attributs de la dépendance.
Vendre (N°Four, N°Produit, Prix) et Four (N°Four, NomFour)

ASSALE Adjé Louis Bases de données 14


Bases de données
◼ Modèle relationnel
• Normalisation
✓ Les différentes formes normales
◼ 3ème forme normale : une relation est en 3FN, si elle est d’abord en 2FN
et si, de plus, tout attribut non clé ne dépend pas fonctionnellement d’un
autre attribut non clé

LIVRE (N°Liv, Titre, Auteur, Pays, Genre) pas en 3FN car Auteur → Pays

On décompose en supprimant l’attribut dépendant Pays de la table et en


créant une table contenant les attributs de la dépendance.
LIVRE (N°Liv, Titre, Auteur, Genre) et AUTEUR (Auteur, Pays)

ASSALE Adjé Louis Bases de données 15


Bases de données
◼ Modèle relationnel
• Normalisation
✓ Les différentes formes normales
◼ Avantage de la 3ème forme normale : en supposant que notre base de
données contient environ 100 auteurs avec chacun en moyenne 10 livres

La table LIVRE en 2FN contient 1000 tuples. Chaque tuple comptant 5


valeurs on a 5x1000 = 5000 données

Pour les 2 tables LIVRE et AUTEUR en 3FN. On a pour LIVRE 1000 tuples
avec 4 attributs donc 4x1000 = 4000 données et Auteur 100 tuples avec 2
attributs donc 2x100 = 200 données. Ce qui nous fait un total de 4200 données

ASSALE Adjé Louis Bases de données 16


Bases de données
◼ Modèle relationnel
• Normalisation
✓ Les différentes formes normales
◼ forme normale de Boyce-Codd (BCFN) : c’est une 3FN dans laquelle,
aucun attribut membre de la clé ne dépend fonctionnellement d’un
attribut non membre de cette clé

ADRESSE (Code_post, Ville, Rue) en 3FN mais pas en BCFN car « Ville »
membre de la clé dépend fonctionnellement de « Code_post » non membre de
la clé On décompose en supprimant Code_post de la relation ADRESSE et en
créant une relation CODE (Code_post, Ville)
• Exercices
✓ Voir fiche de TD : Normalisation

ASSALE Adjé Louis Bases de données 17


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ La modélisation consiste à déterminer à partir du système :
◼ Les entités
◼ Les associations et élaborer un diagramme dit Entité-Association
◼ Les cardinalités
✓ Entité
◼ Une entité est une classe d’objets pourvue d’existence propre dans le
système et possédant des caractéristiques (propriétés ou attributs). Elle
est représentée par un rectangle à 2 compartiments, exemple l’entité
Etudiant(NEtud, Nom, Prénom) ETUDIANT
N_Etud <pi> Characters (7) <M>
L’identifiant d’une entité est la ou les propriété(s) permettant
Nom Characters (20)
de déterminer de manière unique un élément de l’entité. Prnoms Characters (50)
L’identifiant est souligné dans l’entité N_Etud <pi>
Assalé Adjé Louis Bases de données 18
Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Association
◼ Une association entre entités est une relation perçue dans le monde réel
EMPRUNT entre deux ou plusieurs entités. Elle est dépourvue d’existence propre –
Sortie Date elle peut posséder des propriétés. Elle est représentée par un cercle
Retour Date exemple l’association Emprunt
◼ Une association entre 2 entités est dite binaire

◼ Une association d’une entité avec elle-même est dite réflexive

◼ Une association entre plus de 2 entités est dite n-aire

ETUDIANT LIVRE
N_Etud <pi> Characters (7) <M> N_Liv <pi> Characters (15) <M>
EMPRUNT
Nom Characters (20) 0,n Titre Characters (50)
Prnoms Characters (50) Sortie Date 0,n Auteur Characters (20)
Retour Date Genre Characters (20)
N_Etud <pi>
Prix Long integer
N_Liv <pi>
Assalé Adjé Louis Bases de données 19
Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalité
◼ Une cardinalité est un couple de valeur (a, b) placé à côté de chaque
entité participant à une association. Elle exprime les règles de gestion
◼ La valeur a exprime le nombre de fois minimum qu’un élément de
l’entité participe à l’association. Elle est 0 ou 1
◼ La valeur b exprime le nombre de fois maximum qu’un élément de

l’entité participe à l’association. Elle est 1 ou n (plusieurs)


VOITURE
ETUDIANT Immat <pi> Characters (10) <M>
N_Etud <pi> Characters (7) <M> Type Characters (15)
Nom Characters (20) 0,n POSSEDE 0,1 Marque Characters (15)
Couleur Characters (10)
Prnoms Characters (50)
Puissance Characters (7)
N_Etud <pi>
Immat <pi>

Assalé Adjé Louis Bases de données 20


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalités – différents types d’association
◼ Association 1-N (père-fils)
◼ Association binaire avec cardinalité maxi est N d’un coté et 1 de

l’autre VOITURE
ETUDIANT Immat <pi> Characters (10) <M>
N_Etud <pi> Characters (7) <M> Type Characters (15)
Nom Characters (20) 0,n POSSEDE 0,1 Marque Characters (15)
Couleur Characters (10)
Prnoms Characters (50)
Puissance Characters (7)
N_Etud <pi>
Immat <pi>

Assalé Adjé Louis Bases de données 21


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalités – différents types d’association
◼ Association 1-1
◼ Association binaire particulière avec cardinalité maxi de 1 de part

et autre de l’association
CARTE_ELECTEUR
ETUDIANT Num_Elect <pi> Characters (20) <M>
Nom Characters (20)
N_Etud <pi> Characters (7) <M> 0,1 DETENIR
Prenoms Characters (30)
Nom Characters (20) 1,1 Date_Nais Date
Prnoms Characters (50)
Lieu_Vote Characters (20)
N_Etud <pi> Bureau_Vote Characters (2)
Num_Elect <pi>

Assalé Adjé Louis Bases de données 22


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalités – différents types d’association
◼ Association N-N
◼ Association binaire avec cardinalité maxi est N de chaque coté de

l’association
ETUDIANT LIVRE
N_Etud <pi> Characters (7) <M> N_Liv <pi> Characters (15) <M>
EMPRUNT
Nom Characters (20) 0,n Titre Characters (50)
Prnoms Characters (50) Sortie Date 0,n Auteur Characters (20)
Retour Date Genre Characters (20)
N_Etud <pi>
Prix Long integer
N_Liv <pi>

Assalé Adjé Louis Bases de données 23


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalités – différents types d’association
◼ Association N-aire sans contraintes
◼ Association entre n (n>2) entités avec une cardinalité maxi de N de

chaque coté de l’association


DEPARTEMENT LOGICIEL
Code_Dept <pi> Characters (4) <M> Nom_Logi <pi> Characters (15) <M>
Nom_Dept Characters (30)
Editeur Characters (30)
Budget Long integer
Nom_Logi <pi>
Code_Dept <pi>

0,n
0,n
INSTALLER
Date_Inst Date

1,n

SERVEUR
Nom_Serv <pi> Characters (10) <M>
Type_Serv Characters (15)
Nom_Serv <pi>

Assalé Adjé Louis Bases de données 24


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Cardinalités – différents types d’association
◼ Association N-aire avec contraintes
◼ Association entre n (n>2) entités avec une cardinalité maxi de 1 sur

une et une seule entité


DEPARTEMENT LOGICIEL
Code_Dept <pi> Characters (4) <M> Nom_Logi <pi> Characters (15) <M>
Nom_Dept Characters (30)
Editeur Characters (30)
Budget Long integer
Nom_Logi <pi>
Code_Dept <pi>

0,n
0,n
INSTALLER
On a la contrainte suivante : Date_Inst Date

« le logiciel d’un département 1,1

ne peut être installé que sur SERVEUR

un serveur » Nom_Serv <pi> Characters (10) <M>


Type_Serv Characters (15)
Nom_Serv <pi>

Assalé Adjé Louis Bases de données 25


Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Diagramme Entité-Association ou modèle conceptuel des
données
◼ C’est la représentation graphique des entités, des associations et des
cardinalités obtenues lors de la conception
◼ Soit à modéliser les emprunts de livre à une bibliothèque universitaire
par des étudiants pouvant posséder des voitures :
◼ on détermine les entités Livre, Etudiant et Voiture

◼ on détermine les associations Emprunt entre Livre et Etudiant,

Possède entre Etudiant et Voiture


◼ enfin on détermine les cardinalités des associations Emprunt et
Possède.
◼ On obtient le schéma Entité-Association ci-après
Assalé Adjé Louis Bases de données 26
Bases de données
◼ Conception de B.D. relationnelles
• Entités – Associations et Cardinalités
✓ Diagramme Entité-Association ou modèle conceptuel des
données
◼ On obtient le schéma Entité-Association ci-après
LIVRE
N_Liv <pi> Characters (15) <M> ETUDIANT
EMPRUNT
Titre Characters (50) N_Etud <pi> Characters (7) <M>
Auteur Characters (20) 0,n Sortie Date
0,n Nom Characters (20)
Genre Characters (20) Retour Date
Prnoms Characters (50)
Prix Long integer
N_Etud <pi>
N_Liv <pi>

0,n

POSSEDE

0,1

VOITURE
Immat <pi> Characters (10) <M>
Type Characters (15)
Marque Characters (15)
Couleur Characters (10)

Assalé Adjé Louis Bases de données 27


Puissance Characters (7)
Immat <pi>
Bases de données
◼ Conception de B.D. relationnelles
• Schéma relationnel ou modèle logique des données
✓ Ensemble des tables ou relations constituant la base de données
✓ Règles de passage du diagramme E-A ou schéma relationnel
◼ règle 1 concernant les entités : toute entité se transforme en table ou
relation, l’identifiant de l’entité devient la clé de la table
◼ règle 2 : une association de dimension supérieure ou égale à 2 dont la
cardinalité de chaque entité participant à l’association est de la forme 0,
N ou 1,N (i.e. cardinalité maximale est n partout) devient une table ou
relation, la clé est composée au moins de la concaténation des
identifiants des entités participant à l’association

Assalé Adjé Louis Bases de données 28


Bases de données
◼ Conception de B.D. relationnelles
• Schéma relationnel ou modèle logique des données
✓ Règles de passage du diagramme E-A ou schéma relationnel
◼ règle 3 : une association de dimension supérieure ou égale à 2 dont la
cardinalité d’une et une seule des entités participant à l’association est
0,1 ou 1,1 (i.e. une seule cardinalité maxi est 1) ne devient pas une
table. Les identifiants des entités et les attributs de l’association sont
dupliqués dans l’entité de cardinalité 0,1 ou 1,1
◼ règle 4 : une association de dimension 2 dont la cardinalité de chaque
entité participant à l’association est de type 0,1 ou 1,1 (i.e. les 2
cardinalités maxi sont à 1) ne devient pas une table. On privilégie l’une
des 2 entités en faisant migrer l’identifiant de l’un dans l’autre

Assalé Adjé Louis Bases de données 29


Bases de données
◼ Conception de B.D. relationnelles
• Schéma relationnel ou modèle logique des données
✓ Application des règles de passage à notre diagramme E/A
donne le schéma relationnel suivant :
◼ LIVRE(NLiv, Titre, Auteur, Genre, Prix)
◼ ETUDIANT(NEtud, Nom, Prénom)

◼ VOITURE(NV, Type, Marque, Couleur, Puissance, #NEtud)

◼ EMPRUNT(#NEtud, #NLiv, Sortie, Retour)

◼ Dans le schéma relationnel, les clés étrangères (clés provenant d’une


autre table) sont précédées d’un dièse (#).
• Exercices
✓ Voir fiche de TD : Modèle Entité-Association

Assalé Adjé Louis Bases de données 30


Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Définition
✓ Langage des Bases de Données
◼ est issu de l’algèbre relationnelle qui est elle-même un sous-ensemble
de la théorie des ensembles
◼ Manipule des ensembles typés dont tous les éléments sont du même
type
◼ Exemple : {(a, b), (a,d) } est admis mais pas {(a), (a,b)}
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs ensemblistes
◼ Ce sont l’union (), l’intersection () et la différence (- ou \)
◼ Pour les appliquer il faudrait que les tables ou relations aient même
nombre d’attributs et correspondance de type deux à deux.
Assalé Adjé Louis Bases de données 31
Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs ensemblistes
◼ Ils sont définis comme suit :
◼ R (A, B)S (C, D) = {(x, y) / (x, y)  R ou (x, y)  S}

◼ R (A, B)S (C, D) = {(x, y) / (x, y) R et (x, y) S}

◼ R (A, B)-S (C,D) = {(x, y) / (x, y)  R et (x, y)  S}

✓ Les opérateurs unaires


◼ Ils sont applicables à une seule table ou relation
◼ Projection () : coupure verticale de la table – on choisit certains
attributs Exemple : EMPLOYE (N°Emp, Nom, Prénom, Salaire)
On veut la liste des noms et prénoms des employés

Assalé Adjé Louis Bases de données 32


Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs unaires
◼ Sélection () : coupure horizontale de la table – on choisit certains
tuples Exemple : dans la table EMPLOYE, on désire les informations sur
Konan
◼ La condition de sélection (Nom = Konan) est une formule de
calcul de propositions
◼ Les propositions sont des expressions de la forme (attribut 
constante ou attribut  attribut) avec   {=, ≠, ≤, ≥, <, >, …}
◼ Les propositions sont reliées entre elles par des opérateurs logiques
Et (˄), Ou (˅), Non () et Implique ()
Employés qui se prénomme Alain et qui ont un salaire
supérieur à 100 000
Assalé Adjé Louis Bases de données 33
Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs unaires
◼ On peut combiner une projection et une sélection, dans ce cas on écrit la
projection avant la sélection, mais on applique la sélection avant la
projection : Exemple Nom et Prénom des employés qui ont un salaire
compris entre 200 000 et 500 000

Assalé Adjé Louis Bases de données 34


Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs binaires
◼ Produit cartésien (x): c’est la multiplication de 2 tables, en terme de
colonnes c’est les colonnes de la 1ère table suivis de celles de la 2ème
table. En terme de tuples c’est le produit des nombres de tuples
une relation D = R x S si et seulement si D (A, B) = R (A) x S (B) =
{z = (x, y) / x R, yS et x’R, y’S,  z’ = (x’, y’)}

Assalé Adjé Louis Bases de données 35


Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs binaires
◼ Jointure (): c’est un produit cartésien auquel on applique une
condition de sélection particulière (un attribut de 1ère table est comparé à
un attribut de même type de la 2nde table). On a diverses sortes de
jointures :
◼ Equi-jointure où la condition de sélection est une égalité

◼ Jointure naturelle : equi-jointure où les attributs comparés ont le

même nom. Elle n’est pas spécifiée


◼ Têta-jointure : jointure autre que l’égalité

Assalé Adjé Louis Bases de données 36


Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs binaires
◼ Jointure (): exemple
EMPLOYE (N°Emp, Nom, Prénom, Salaire)
PROJET (N°Pers, Intitulé, %temps)
Dept (N°Pers, Nom_dept)

◼ Exercice, jointure avec renommage : soit la relation


TRAJET (VD, VA, HD, HA) qui enregistre tous les voyages d’une
compagnie de transport. On désire connaître tous les trajets avec
correspondance
Assalé Adjé Louis Bases de données 37
Bases de données
◼ Algèbre relationnelle – Langage des B.D.
• Les opérateurs de l’algèbre relationnelle
✓ Les opérateurs binaires
◼ Division (÷): une relation D = R ÷ S si et seulement si
D (A) = R (A, B) ÷ S(B) = {x / y  S, (x, y)  R}
=

• Exercices
✓ Voir fiche de TD : Algèbre relationnelle

Assalé Adjé Louis Bases de données 38


Bases de données
◼ Le Langage SQL
• Sera étudié à travers le SGBDR MySQL :
✓ C’est un SGBDR (Système de Gestion de Bases de Données
Relationnelles) libre et gratuit
✓ Rapide, multithread, robuste et multi-utilisateurs
✓ Conçu par une société suédoise MySQL AB
✓ Fonctionne sur pratiquement toutes les plateformes
✓ Les tables peuvent être de différents types : MyISAM,
MERGE, HEAP, ISAM, InnoDB, Berkley DB, MEMORY
✓ Accessible en utilisant la plupart des langages de
programmation du marché

Assalé Adjé Louis Bases de données 39


MySQL - Administration
◼ Connexion
• En tant que root
✓ On lance MySQL command Line et on rentre le mot de passe

• Utilisateur : (chemin d’accès à MySql défini dans PATH)


✓ En ligne de commande : mysql –u <nom_util> -p [–D
<nom_base>]

• Exécution de fichier de commandes


✓ mysql> source nom_fichier;
Assalé Adjé Louis Bases de données 40
MySQL - Administration
◼ Création d’une base de données
• Syntaxe
✓ create database <nom_base> / drop database <nom_base>

• Utilisation d’une base de données


✓ use <nom_base>

• Visualisation des bases de données


✓ show databases;

• Exemples :
✓ create database mabase;
✓ use mabase;
✓ create table …
Assalé Adjé Louis Bases de données 41
MySQL - Administration
◼ Création d’utilisateurs
• Syntaxe de création
✓ create user <nom_utilisateur> [identified by [password]
'mot_de_passe'] [, <nom_utilisateur> [identified by [password]
'mot_de_passe']]…
✓ <nom_utilisateur> de la forme <'nom'>[@'hôte']
◼ hôte adresse à partir de laquelle utilisateur va se connecter:
- localhost : à partir de la machine du serveur
- @IP : à partir de la machine dont l’adresse IP est spécifiée
- %.nom_domaine : n’importe quelle machine du domaine
- % : n’importe quel hôte valeur par défaut

Assalé Adjé Louis Bases de données 42


MySQL - Administration
◼ Création d’utilisateurs
• Suppression d’un utilisateur
✓ drop user <nom_utilisateur>

• Renommer un utilisateur :
✓ rename user <ancien_nom> to <nouveau_nom> [,
<ancien_nom> to <nouveau_nom> ]…
• Exemples :
✓ create user assale identified by 'louis09', koffi identified by
'alexis',kone@'localhost';
✓ rename user assale to adje;
✓ drop user adje;

Assalé Adjé Louis Bases de données 43


Administration
◼ Privilèges
• Utilisateurs et leurs privilèges stockés dans base mysql
✓ Les utilisateurs sont stockés dans la table user
✓ Les privilèges sont stockés dans 4 tables à différent niveau :
◼ db: privilèges au niveau des bases de données
◼ tables_priv : privilèges au niveau des tables
◼ columns_priv : privilèges au niveau des colonnes
◼ proc_priv : privilèges au niveau des routines (procédures et fonctions)
✓ On peut gérer les utilisateurs et leur droits en utilisant des
requêtes INSERT, UPDATE et DELETE directement sur les
tables user, db, tables_priv, columns_priv et proc_priv

Assalé Adjé Louis Bases de données 44


Administration
◼ Privilèges
• Quelques privilèges :
✓ SELECT, INSERT, UPDATE et DELETE sur une table avec
possibilités de restrictions au niveau colonne
✓ CREATE DATABASE, CREATE, CREATE TEMPORARY
TABLE, CREATE VIEW, ALTER (tables) , DROP (tables,
vues et bases)
✓ CREATE ROUTINE (procédures et fonctions stockées),
ALTER ROUTINE, EXECUTE, INDEX (création d’index de
tables), TRIGGERS (déclencheurs), LOCK TABLES
(verrouillage de tables), CREATE USER

Assalé Adjé Louis Bases de données 45


Administration
◼ Privilèges
• Accord de privilèges
✓ GRANT privilege [(liste_colonnes)] [, privilege
[(liste_colonnes)], ...] ON [type_objet] niveau_privilege TO
utilisateur [IDENTIFIED BY mot_de_passe][, …];
◼ privilège : le privilège à accorder (SELECT, EXECUTE, CREATE…)
◼ (liste_colonnes) : listes colonnes auxquelles le privilège s’applique
◼ niveau_privilege : niveau auquel le privilège s’applique
*.* : niveau global à tous les objets de toutes les bases
*: si aucune base sélectionnée avec (use nom_base)  à *.*
nom_base.* : tous les objets de la base
nom_base.nom_table : la table de la base de données spécifiée
nom_table : la table de la base de données courante
nom_base.nom_routine : la routine de la base spécifiée
Assalé Adjé Louis Bases de données 46
Administration
◼ Privilèges
• Accord de privilèges
◼ type_objet : on peut préciser le type de l’objet
◼ Si utilisateur n’existe pas il est créé avec ou sans mot de passe
◼ Si utilisateur existe et clause IDENTIFIED BY mot_de_passe est
spécifiée le mot de passe est modifié
✓ Exemples :
◼ GRANT SELECT, UPDATE (nom, sexe), DELETE, INSERT ON
mabase.etudiant TO 'kone'@'localhost' IDENTIFIED BY 'salif';
◼ GRANT SELECT ON TABLE mabase.Etudiant TO 'assale';
◼ GRANT CREATE ROUTINE, EXECUTE ON mabase.* TO 'koffi';

Assalé Adjé Louis Bases de données 47


Administration
◼ Privilèges
• Revocation de privilèges
✓ REVOKE privilege [, privilege, ...]
ON niveau_privilege FROM utilisateur [, …];
✓ Exemples :
◼ REVOKE DELETE ON mabase.Etudiant FROM 'kone'@'localhost';
• Les privilèges ALL, USAGE et GRANT OPTION
✓ ALL ou ALL PRIVILEGES : tous les droits sauf GRANT
OPTION
✓ USAGE : aucun droit
✓ GRANT OPTION : permet d’utiliser la commande GRANT

Assalé Adjé Louis Bases de données 48


MySQL - Administration
◼ Travaux Pratiques N0
• Créer une base de données mabase
• Créer les utilisateurs : ing01à connexion local avec mot
de passe ing01 et ing02 à connexion à partir de n’importe
quel poste avec pour mot de passe ing02
• Donner les droits de création, modification et suppression
de tables à ing01 et ing02 sur la base de données mabase.
Donner les droits de création et exécution de programmes
à ing02.

Assalé Adjé Louis Bases de données 49


Langage SQL : L.D.D.
◼ Les types de données
• Chaine de caractères
✓ CHAR(n) : longueur fixe n
✓ VARCHAR(n) : longueur variable maximale n
✓ TEXT : texte de longueur quelconque

• Numériques
✓ INTEGER, INT, UNSIGNED : entier
✓ DECIMAL(e, p), FLOAT(e,p), DOUBLE(e,p) : réels

• Dates
✓ DATE : date au format AAAA-MM-JJ
✓ TIME : heure au format HH:MM:SS
Assalé Adjé Louis
✓ DATETIME Bases de données
: format AAAA-MM-JJ HH:MM:SS 50
Langage SQL: L.D.D.
◼ Les types de données
• Énumérations
✓ ENUM(valeur1, valeur2, …) : choix d’1 seule valeur dans liste
✓ SET(valeur1, valeur2, …) : choix plusieurs valeurs dans la liste

◼ Base de travail

Le schéma relationnel associé est :


CLASSE(Code_Cl, Intitule, Effectif)
ETUDIANT(Matricule, Nom, Prenoms, Sexe, Code_Cl#)
LIVRE(Code_Liv, Titre, Auteur, Genre, Prix)
EMPRUNT(Matricule#, Code_Liv#, Sortie, Retour)
Assalé Adjé Louis Bases de données 51
Langage SQL: L.D.D.
◼ Création d’objets
• Création de tables
✓ Create [temporary] Table [if not exists] <nom_table>
(<attribut1><type attribut1>[<contrainte1>],

<attributN><type attributN>[<contrainte>]) [ENGINE =
nom_engine];
• Exemple :
✓ Create table etudiant (Matricule varchar(6) primary key, Nom
varchar(20) not null, Prenoms char(40));

Assalé Adjé Louis Bases de données 52


Langage SQL: L.D.D.
◼ Création d’objets
• Création de vue
✓ Create view <nom_vue> [(liste de colonnes)]
AS <requête de sélection>;
• Exemple :
✓ Create view roman AS Select Code_Liv, Titre, Auteur, Prix
From Livre Where genre = 'roman';
• Création de table à partir d’une autre table
✓ Create table <nom_table> As <requête de sélection>;

Assalé Adjé Louis Bases de données 53


Langage SQL: L.D.D.
◼ Création d’objets
• Création d’index
✓ Create [unique] Index <nom_index> on <nom_table>
(<col1><ordre>[, <col2><ordre> …]);
◼ Unique → chaque valeur de l’index est unique
◼ <ordre> ASC ou DESC par défaut ASC
• Exemple
✓ Create Index Ind_Etud on Etudiant (nom, Prenoms Desc);

• Suppression d’objets
✓ Drop Table [if Exists] <nom_table>;
✓ Drop View <nom_vue>;
✓ Drop Index <nom_index>;
Assalé Adjé Louis Bases de données 54
Langage SQL: L.D.D.
◼ Modification de schéma de table
• Commandes Alter Table
✓ Alter Table <nom_table> Add (<col><type>[<contrainte>], …)
✓ Alter Table <nom_table> Modify <col><type_col>;
✓ Alter Table <nom_table> Drop [column] <col>;
✓ Alter Table <nom_table> Change [column] <col> <nouv_nom>
[<nouv_type_col];
✓ Alter Table <nom_table> rename [to|as] <nouveau_nom>;

• Exemples
✓ Alter table Etudiant Add Sexe char(1);
✓ Alter table Etudiant Modify Prenoms varchar(40);

Assalé Adjé Louis Bases de données 55


Langage SQL: L.D.D.
◼ Spécification de contraintes de table
• Contrainte de domaine Default
✓ Create Table <nom_table> (…, <col><type> default <valeur>,
…);
• Contrainte d’application Check
✓ Create table <nom_table>(…, <col><type> check (<col> <op>
<valeur>), …);
✓ Contrainte acceptée mais pas prise en compte par MySQL on
utilise plutôt ENUM ou SET
✓ Create table <nom_table>(…, <col><type> <col> Enum
(<valeur1>, …, <valeur>N), …);

Assalé Adjé Louis Bases de données 56


Langage SQL: L.D.D.
◼ Spécification de contraintes de table
• Contraintes d’entité :
✓ Create Table <nom_table> (…, <col><type> {not null | unique |
primary key}, …);
• Contraintes d’entité : Unique primary key sur +sieurs col
✓ Create table <nom_table>(…, <col><type>, {unique | primary
key}(<col1> [,…]), …);
• Contrainte de création d’index
✓ Create table <nom_table>(…, <col><type>, Index [unique]
[<nom_index>](<col1> [,…]), …);

Assalé Adjé Louis Bases de données 57


Langage SQL: L.D.D.
◼ Spécification de contraintes de table
• Contrainte de référence : references et/ou foreign key
✓ Valable seulement sur le moteur InnoDB de mySQL
✓ Create Table <nom_table> (…, <col><type> references
<nom_table2>[(<col>)] {[on Delete [restrict | cascade | set null]
| [on Update [restrict | cascade | set null]}, …);
✓ Create table <nom_table>(…, <colN><type>, …, foreign key
(<col1> [,…]) references <nom_table2>[(<col1> [,…]) ] {[on
Delete [restrict | cascade | set null] | [on Update [restrict |
cascade | set null]}, …);
◼ Restrict : rejette la modification avec un message d’erreur
◼ Cascade : répercute la modification sur la table référencée
◼ Set null : effectue l’action et annule la clé sur la table référençant
Assalé Adjé Louis Bases de données 58
Langage SQL: L.D.D.
◼ modification de contraintes de table
• Ajout de contraintes
✓ Alter Table <nom_table> Add([constraint
<nom_contrainte>][,…]);
◼ Alter Table <nom_table> Add primary key(<col1>[, …]);
◼ Alter Table <nom_table> Add index [<nom_index>](<col1>[, …]);
◼ Alter Table <nom_table> Add unique [<nom_index>](<col1>[, …]);
• Suppression de contraintes
✓ Alter table <nom_table> Drop primary key;
✓ Alter table <nom_table> Drop foreign key [<nom_contrainte>];
✓ Alter table <nom_table> Drop index [<nom_index>];

Assalé Adjé Louis Bases de données 59


Langage SQL: L.D.D.
◼ Travaux Pratiques N1
• Créer la table Classe avec les contraintes de clé primaire,
et default 0 et valeur>=0 sur effectif
• Compléter les attributs manquants de la table Etudiant et
spécifier les contrainte de foreign key, et changer le type
de sexe pour n’autoriser que 'M' et 'F' comme valeurs
• Créer la table Livre avec les contraintes de clé primaire,
et default 1000 pour le prix
• Créer la table Emprunt avec les contraintes de clés
primaire et étrangères.

Assalé Adjé Louis Bases de données 60


Langage SQL: L.M.D.
◼ Insertion de données
• Une ligne à la fois
✓ Insert Into <nom_table> [(<liste de colonnes>)]
values (<liste de valeurs>);
• Plusieurs lignes à la fois
✓ Insert Into <nom_table> [(liste de colonnes>)]
<requête de sélection>;
• Exemples :
◼ Insert into etudiant values(‘ET001’,’Assalé’,’Adjé’,’M’,’M1’);
• N.B. :
◼ Autant de colonnes dans liste de colonnes que de valeurs
◼ Spécifier valeur NULL pour ne pas renseigner une colonne
Assalé Adjé Louis Bases de données 61
Langage SQL: L.M.D.
◼ Travaux Pratiques N2
• Insérer 2 classes
• Insérer 5 étudiants dont 2 de nom Koffi, Zié et un 3ème de
nom Jules et de prénoms Kanga
• Insérer 5 livres
• Insérer 10 emprunts avec 4 sans date de retour et 6 avec
date de retour – 2 mêmes livres empruntés par Koffi et
Zié – le livre numéro 4 est emprunté 2 fois par koffi, la
2ème fois sans date de retour

Assalé Adjé Louis Bases de données 62


Langage SQL: L.M.D.
◼ Modification/suppression de données
• Mise à jour de données
✓ Update <nom_table> set <col1>=<expr1>
[, <col2>=<expr2>…] where <condition> [limit <val>];
✓ Condition : expressions combinées de la forme
<col><op><expr>, (<col1>, <col2>, …)<op> (<expr1>,
<expr2>, …) ou (<col1>, <col2>, …) <op> (Select…) à l’aide
des opérateurs And – Or et Not.
✓ Exemples:
◼ Update etudiant set nom=‘Kone’, prenom=‘Moussa’
where matricule=‘et001’;

Assalé Adjé Louis Bases de données 63


Langage SQL: L.M.D.
◼ Modification/suppression de données
• Suppression de données
✓ Delete from <nom_table> where <condition> [limit <val>];
✓ Delete t1, t2 [,…] from t1 join t2 join t3 [join…] where …;
✓ Truncate Table <nom_table>; : supprime tout le contenu
✓ Exemples :
◼ Delete from etudiant where nom=‘Kone’;

Assalé Adjé Louis Bases de données 64


Langage SQL: L.M.D.
◼ Travaux Pratiques N3
• Le nom et prénoms de Kanga Jules on été inversés,
comment y remédier?
• Koffi vient de rendre le livre numéro 4

Assalé Adjé Louis Bases de données 65


Langage SQL: L.M.D.
◼ Sélection de données
• Syntaxe générale
✓ Select [Distinct | All] <liste de colonnes>
From <liste de tables>
[where <condition>]
[Group by <liste de colonnes>]
[Having <condition>]
[Order By <critère d’ordre>]
[Limit <valeur>];
✓ Distinct affiche un seul exemplaire des lignes en double – All
est la valeur par défaut
✓ Limit nombre de valeurs retournées par la requête

Assalé Adjé Louis Bases de données 66


Langage SQL: L.M.D.
◼ Sélection de données
• Clause Select (obligatoire)
✓ Liste de colonnes (opérateur projection) peut être
◼ * pour toutes les colonnes (pas de projection)
◼ Noms de colonnes (précédé de nom ou alias de table) séparé par (,) :
nom_table.col – alias_table.col
◼ Colonne peut être calculée : Count(col), …
• Clause From (obligatoire)
✓ Liste de tables (opérateur produit ou jointure)
◼ Tables séparées par (,) – table peut être suivi d’alias : Etudiant e, Livre l
◼ Ou table peut être requête Select nommée : (Select …) As nom_requête
◼ Si plus de 2 tables dans from penser à une jointure condition à spécifier
dans le where sinon système effectue produit cartésien
Assalé Adjé Louis Bases de données 67
Langage SQL: L.M.D.
◼ Sélection de données
• Clause Where (facultative)
✓ Condition (opérateur sélection) combinaison de
◼ Condition de jointure : <alias1.col> <op> <alias2.col>
◼ Condition de sélection mormale <alias.col> <op> <expr>
◼ <op> peut être tout opérateur arithmétique/logique et les suivants:
BETWEEN – [NOT]IN – IS[NOT]NULL – LIKE
◼ <col> between <val1> and <val2> - <col> Is Null

◼ <col> In (<liste valeurs>) - <col> Like <valeur> : valeur doit

contenir ‘%’ (+sieurs caractères) ou ‘_’ (1 seul caractère)


◼ Condition sous requête : <col> <op> (Select …)
◼ Si <op> {=,<,>,…} Select doit renvoyer 1 et 1 seule ligne

◼ Si <op> {=,<,>,…}{any|all} ou <op> {in, not in} elle peut

renvoyer plusieurs lignes


Assalé Adjé Louis Bases de données 68
Langage SQL: L.M.D.
◼ Sélection de données
• Exemples :
✓ Select numéro, nom from clients;
✓ Select * from articles where prix between 20 and 100;
✓ Select * from clients where nom like '%y%';
✓ Select * from clients where nom not in ('Assale', 'Koffi', 'Zie');
✓ Select * from clients where code_postal is null;
✓ Select designation, prix*1.20 as "Prix TTC" from articles;

Assalé Adjé Louis Bases de données 69


Langage SQL: L.M.D.
◼ Sélection de données
• Clause Where (facultative)
✓ Condition (opérateur sélection) combinaison de
◼ Condition sous requête corrélée : Where [not] exists (Select …)
◼ Select peut contenir plusieurs colonnes et peut renvoyer plusieurs
lignes
◼ Condition peut être : (<col1> [, <col2>, …]) <op>
(<expr1>[,<expr2>,…])
◼ Ou (<col1> [, <col2>, …]) <op> (Select,…)
• Clause Group By (facultative)
✓ Fait des partitions et s’utilise avec des fonctions d’agrégats :
Count() – Sum() – Avg() – Min() – Max() …
✓ Liste de colonnes : colonnes du Select sauf colonnes calculées
Assalé Adjé Louis Bases de données 70
Langage SQl : L.M.D.
◼ Sélection de données
• Clause Group By (facultative)
✓ Exemple : Soit la Table1
Select col1, col2, count(col3)
Col1 Col2 Col3 col4 From Table1
Group by …
a b 2 1
a c 4 1 Select col1, col2, count(distinct col3)
a b 3 2 From Table1
Group by …
e a 2 2
a c 3 3
Select col1, col2, count(*), sum(col4)
a b 2 4
From Table1
e a 2 1 Group by …
Assalé Adjé Louis Bases de données 71
Algorithme
◼ Sélection de données
• Clause Group By (facultative)
Col1 col2 Compte_col3 col1 col2 Count_distinct_col3
a b 3 a b 2
a c 2 a c 2
e a 2 e a 1

col1 col2 Compte_ligne Somme_col4


4
a b 3 7
a c 2 4
e a 2 3

Assalé Adjé Louis Bases de données 72


Langage SQL: L.M.D.
◼ Sélection de données
• Clause Having (facultative)
✓ Ne peut s’utiliser que quand il y a Group By
✓ Condition (opérateur de sélection pour les agrégats | partitions)
◼ Autorise fonctions d’agrégats sur colonnes dans la condition
✓ Exemple :
Select col1, col2, count(col3)
From Table1
col1 col2 Count_col3
Group by col1, col2
Having count(col3)>2 a b 3

Assalé Adjé Louis Bases de données 73


Langage SQL: L.M.D.
◼ Sélection de données
• Clause Order By (facultative)
✓ Trie le résultats selon des colonnes
✓ Critère d’ordre:
◼ nom ou numéro d’ordre de colonne du Select suivi de ASC ou DESC
• Clause Limit (facultative)
✓ Valeur : spécifie le nombre de lignes à afficher dans le résultat

Assalé Adjé Louis Bases de données 74


Langage SQL: L.M.D.
◼ Sélection de données
• Exemples :
✓ Select nom_client, count(*) from clients cl, commandes co
where cl.num_cl=co.num_cl group by nom_client;
✓ Select co.num_cmde, count(num_art) from commandes co,
ligne_cmde li where co.num_cmde=li.num_cmde
group by co.num_cmde having count(num_art)>10;
✓ Select num_art, désignation from articles where prix> (Select
avg(prix) from articles);
✓ Select num_art, désignation from articles where prix> any
(Select prix from articles where couleur = 'rouge');
✓ Select num_art, désignation from articles where num_art not in
(Select num_art from ligne_cmde);
Assalé Adjé Louis Bases de données 75
Langage SQL: L.M.D.
◼ Sélection de données : opérateurs
ensemblistes
• Union : effectue l’union de 2 requêtes
✓ <requête_selection1>
Union
<requête_selection2>;
◼ Les requêtes doivent avoir même nombre de colonnes avec
correspondance de type
• Intersect – Except|Minus
✓ Non implémentés par MySQL
✓ Remplacés par Where [not] Exists (Select…)

Assalé Adjé Louis Bases de données 76


Langage SQL: L.M.D.
◼ Sélection de données : opérateurs
ensemblistes
• Exemples
✓ Select num_art, designation from ligne_cmde li, articles art
where li.num_art= art.num_art and num_cmde='005' union
Select num_art, designation from ligne_cmde li, articles art
where li.num_art= art.num_art and num_cmde='006' ;
✓ Select num_art from ligne_cmde l, commandes c where
l.num_cmde= c.num_cmde and num_cl='CL02' except Select
num_art from ligne_cmde l, commandes c where l.num_cmde=
c.num_cmde and num_cl='CL10';

Assalé Adjé Louis Bases de données 77


Langage SQL: L.M.D.
◼ Travaux Pratiques N4
• Ecrire les requêtes SQL pour les questions suivantes :
✓ Les étudiants avec les titres de livres empruntés
✓ Les étudiants avec les titres de livres en cours d’emprunt
✓ Combien de livres chaque étudiant a emprunté?
✓ Combien chaque auteur a gagné avec la bibliothèque?
✓ Quels sont les mêmes livres empruntés par Zié et Koffi?

Assalé Adjé Louis Bases de données 78

Vous aimerez peut-être aussi