Académique Documents
Professionnel Documents
Culture Documents
Pr : Aziz BAATAOUI
Plan
Chapitre 1 : Introduction aux bases de données
1
17/03/2020
Exemple :
Les données sont mémorisées dans un ordinateur, utilisé par de nombreuses personnes et
possédant une organisation régie par un modèle de données.
v etc …
Les langages et les outils logiciels pour effectuer ces opérations sont évolués et très
pratiques.
2
17/03/2020
Un modèle de BDD illustre la structure logique d'une BDD, y compris les relations et les
contraintes qui déterminent comment les données peuvent être stockées et accessibles.
Les modèles de BDD individuels sont conçus en fonction des règles et concepts du modèle
de données plus général adopté par les concepteurs.
La plupart des modèles de données peuvent être représentés par un diagramme de base de
données.
Il existe de nombreux types de modèles de bases de données. Parmi les plus courants:
v Modèle hiérarchique
v Modèle réseau
v Modèle relationnel
3
17/03/2020
Le modèle hiérarchique organise les données dans une structure arborescente (avec une racine
et plusieurs niveaux de sous-arbres), où chaque enregistrement dispose d'un seul parent
(racine).
Liaison père-fils Liaison père-fils
Avantages : Inconvénients :
vAdéquation du modèle avec les v Ne décrit pas toujours la réalité.
entreprises à structure arborescente (un v Accès fastidieux.
grand nombre d'organisations v Ne supporte pas les relations N-N.
v Anomalies pour les opérations de stockage .
économiques et sociales correspondent à
v La suppression d'un noeud entraîne la disparition
ce modèle).
des descendants.
vSimplicité du modèle et implémentation
v L'insertion d'une information impose la création d'un
facile. segment parent.
vAdéquation de la structure du schéma et v Le remplacement d'une information doit s'effectuer
des besoins des utilisateurs. pour toutes ses occurrences dans des arbres distincts.
Le modèle réseau est une extension du modèle hiérarchique qui autorise des relations
plusieurs-à-plusieurs entre des enregistrements liés, ce qui implique plusieurs
enregistrements parents..
Avantages : Inconvénients :
4
17/03/2020
Le modèle relationnel est le modèle le plus courant, trie les données dans des tables, que
l'on appelle aussi des relations, dont chacune se compose de colonnes et de lignes.
Avantages : Inconvénients :
vModèle simple vStructure de données trop simple : pas d'attribut
vLangage standard (SQL), complexe, ni multivalué
déclaratif. vPeu compatible avec les langages de programmation
vNiveau logique (essentiellement). vDonnées alphanumériques uniquement : pas
vTechnologie la plus répandue. d’images, sons, vidéo…
vEfficace pour les applications de vMécanisme de transactions inadapté aux nouvelles
gestion classique. applications.
Les données sont stockées sous forme d'objets (une collection d'objets, ou d'éléments
logiciels réutilisables, associés à des caractéristiques et des méthodes) et non pas tables,
c'est-à-dire de structures appelées classes présentant des données membres. Les champs
sont des instances de ces classes.
5
17/03/2020
Le modèle OR est une fusion entre les concepts présents dans le modèle relationnel et
La technologie a été introduite en 1992 (Informix achète Illustra qui développait une
version commerciale de PostGres, un sgbd relationnel étendu). Autres éditeurs (IBM DB2,
Oracle...).
Monde extérieure
niveau externe
niveau vue
6
17/03/2020
vAccès aux données : L’accès aux données se fait par un langage de manipulation de
données (DML), tel que SQL. Le langage doit être optimisé de manière à minimiser le
nombre d’accès disques, de façon transparente pour les utilisateurs . Efficacité et
rapidité au niveau des accès sur les supports.
vAdministration centralisée des données : toutes les données doivent être centralisées
dans un lieu de stockage commun à toutes les applications.
vNon redondance des données : chaque information ne doit être représentée qu’une seule
fois dans la base, pour éviter les problèmes lors des mises à jour.
vCohérence des données : Les données sont soumises à des contraintes d’intégrité pour
définir un état cohérent de la base. Elles doivent être exprimées simplement et vérifiées
à chaque insertion, suppression ou modification des données.
Exemple :
Salaire entre 5000Dhs et 10000Dhs,
ou
Nom de type alphabétique
ou
relations entre les données ex : prix de vente > prix d’achat).
7
17/03/2020
vPartage des données : plusieurs utilisateurs peuvent intervenir sur les données
simultanément. Plus particulièrement permettre la modification du contenu de la base.
vSécurité des données : associe des droits d’accès aux utilisateurs. Pour protéger l’accès à
certaines données.
vRésistance aux pannes : pouvoir récupérer les données après une panne, soit en
récupérant l’état de la BD avant la panne, soit terminer l’opération interrompue.
Introduction
Entité et type-Entité
Association et type-association
Attribut et valeur
Identifiant
Généralisation et spécialisation
8
17/03/2020
1. Réalisation d’un modèle conceptuel : c’est une phase d’analyse du problème réel. Cette
phase est assez délicate et permet de définir les données à utiliser, leur mode
d’évolution dans le temps et les relations entre elles.
q Certaines contraintes.
Exemple : un pilote ne doit vole que s’il détient une licence en cours de validité et une
qualification correspondant au type d’avion.
Le MCD est basé sur le Modèle Entité-Association (en anglais E-R pour Entity
Relationship).
Un MCD est un diagramme avec des entités et des associations. Pour le réaliser il faut
s’aider d’outils graphiques informatiques spécialisés
v Avec licence : - Microsoft Visio - Maestro SQL - Oracle Designer - PowerAMC (de
Sybase) - ERwin - ER/Studio …
9
17/03/2020
q Entité
v Une entité est un objet, une chose concrète ou abstraite ayant une existence propre
et conforme aux besoins de l ’application.
En+té
Alaoui Karim
Chahir Khalid En+té
Lamnii Loubna En+té
El Ouardi Hamid En+té
Il faut noter que les entités ne sont pas représentées sur un modèle entité-association.
Exemple : Les personnes, les livres, les voitures sont des type-entités.
Par abus de langage, le terme entité est régulièrement utilisé pour désigner le type-entité et
ses entités. Il ne faut cependant pas confondre ces deux notions.
10
17/03/2020
Entités probables :
Ø Salarié,
Ø Machine,
Ø Véhicule (de livraison),
Ø Entrepôt,
Ø Client,
Ø Produit,
Ø Commande.
Entités probables :
Ø Lieu d'entrainement,
Ø Entraineur,
Ø Match,
Ø Equipe,
Ø Joueur.
Nota bene : « catégorie », « division » et « poule » seront plus probablement des
propriétés de « équipe » et de « match ».
11
17/03/2020
12
17/03/2020
ü Association réflexive : C’est une association d’une entité sur elle-même. En effet, il
est parfaitement possible d’établir une association entre une entité et elle-même,
définissant par là une association cyclique.
Exemple : pour traduire le fait que Nisrine est la fille
de Asma, on pourra utiliser une association A-
POUR-MERE entre les deux entités représentant ces
personnes.
13
17/03/2020
v Plusieurs type :
ü attribut simple : un attribut qui n'est pas décomposé en d'autres attributs: ses
valeurs sont atomiques. Un domaine lui est associé.
Exemple : salaire, jour
ü attribut facultatif: un attribut qui peut ne prendre pas de valeur dans une
occurrence (cardinalité min=0).
Exemple : téléphone
14
17/03/2020
multivalué et obligatoire
v Règles :
ü Un attribut est une donnée élémentaire, ce qui exclut les données calculées ou
dérivées.
15
17/03/2020
v Règles :
16
17/03/2020
Min,Max
Il faut lire la cardinalité comme suit :
v Un adhérent peut Emprunter plusieurs livres.
v Un livre ne peut être Emprunté que par un seul adhérent.
v Règles :
ü L’expression de la cardinalité est obligatoire pour chaque patte d’un type-
association.
ü Si une cardinalité est connue et vaut 2 ou plus, alors nous considérons qu’elle
est indéterminée et vaut n.
17
17/03/2020
v Cette particularité indique que l’une des entités est totalement déterminée par la
connaissance d’une (ou plusieurs) autre entité présente dans l’association (On dit
aussi que la relation est porteuse d’une dépendance fonctionnelle).
Exemple : si on connaît une facture bien précise, on connaît un client bien précis...
18
17/03/2020
INGENIEUR,PILOTE, TECHNICIEN.
CAMIONS.
Le club sportif d’une école veut enregistrer les informations sur ses adhérents. Il lui
département (pour les enseignants), le service (pour les administratifs). On veut aussi
connaître les années d'adhésion précédentes, les sports pratiqués pour l'année en cours
19
17/03/2020
auxquels est affecté le personnel. Chaque service est décrit par son nom, son chef (qui est nécessairement un
cadre de l'entreprise) et la liste de ses locaux. Le personnel est réparti en trois catégories, les administratifs,
les techniciens et les cadres. Tous possèdent un numéro d'employé, un nom, un prénom, une adresse, une
identification bancaire (nom banque, nom agence, numéro de compte), un salaire et sont rattachés à un
service. Chaque catégorie possède en outre des renseignements qui lui sont propres:
- pour un cadre, son bureau, son numéro de poste téléphonique et l'(les) administratif(s) (s'il en existe) qui
20
17/03/2020
Modèle Entité-Association
q Diagramme Entité/Association
Exemple : Diagrammes E/A
Ce diagramme met en œuvre trois entités : étudiant, module et enseignant. Chaque entité
possède des attributs y compris un identifiant. Nous avons aussi deux associations
binaires entre les entités. L’association Inscrit est une association porteuse de données,
qui contient un attribut année-inscr dépendant des deux entités étudiant et module.
Introduction
Domaine
Attribut
Relation et sa représentation
Contraintes d’intégrité
21
17/03/2020
Exemple :
D1= {chaîne de caractères}
D2= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}
Exemple :
Domaine (Nom)= {chaîne de caractères}
Domaine (jour)= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}
22
17/03/2020
v Relation : Une relation n-aire sur les attributs A1, A2,..., An, de domaines
respectifs D1, D2,..., Dn, est un sous-ensemble du produit cartésien des domaines
D1, D2,..., Dn.
v Représentation d’une relation : Une relation est représentée sous la forme d’une
table de deux dimensions dans laquelle les n attributs correspondent aux titres des
n colonnes.
Relation CLIENT
Exemple :
numClient nomClient adresseClient
Cl1 Ali Fes
Cl2 Mohamed Meknes
Cl3 Salah Taza
v Chaque tuple est unique. Les duplications ne sont pas autorisées. L’ordre des
tuples est indifférent.
v Degré d’une relation : Le degré d’une relation est son nombre d’attributs
(Degre(CLIENT)=3).
23
17/03/2020
v Clé candidate : une clé candidate d’une relation est un attribut ou groupe
d’attributs minimal qui peut identifier de façon unique chaque tuple de la relation.
Chaque relation contient au moins une clé candidate.
v La valeur d’une clé candidate est distincte pour tous les tuples de la
relation. La notion de clé candidate est essentielle dans le modèle
relationnel.
v Contraintes d’intégrité : une contrainte d'intégrité est une règle qui définit la
cohérence d'une donnée ou d'un ensemble de données de la BDD. On distingue
les contraintes suivantes :
Ø Contraintes de domaines
Ø Contraintes de clés
24
17/03/2020
Ø Contraintes de domaines
v La valeur de chaque attribut dans un tuple est atomique (non divisible) et doit
respecter le format des données du domaine de l’attribut (entier, réel, date,
caractère)
Exemple :
ü CLIENT (numClient, nomClient, adresseClient, dateNaissance)
Ø Contraintes de clés
v Chaque tuple dans une relation doit être unique et toute relation doit posséder
une clé qui identifie un tuple de façon unique.
v Une clé peut être composée d’un seul attribut ou d’une liste d’attributs qui
caractérise un tuple (n-uplet) de la relation de manière unique.
25
17/03/2020
Ø Contraintes de clés
Exemple :
ü CLIENT (numClient, nomClient, prénomClient, adresseClient))
v Par convention, la clé primaire d’une relation est soulignée dans un schéma de
relation et stipulent qu'aucune clé primaire ne doit être nulle.
v Une clé étrangère est un ensemble d’une ou de plusieurs colonnes d’une table qui
fait référence à une clé primaire d’une autre table.
v Toutes les valeurs des clés étrangères apparaissent dans une autre relation comme
valeurs d’une clé primaire . C’est une contrainte d’intégrité référentielle.
v Par convention, la clé étrangère d’une relation est précédée (ou suivie) par le
symbole # dans un schéma de relation.
26
17/03/2020
v Une base de données relationnelle est une collection de relations. L’ensemble des
schémas des relations de la collection est appelé schéma relationnel de la BDD.
27
17/03/2020
v Règle 1 : Chaque entité qui figure dans le diagramme E/A est traduite par une
relation de même nom dans laquelle ses attributs traduisent les propriétés de
disparaître et on duplique l’identifiant de l’entité côté (*, n) dans celle (*, 1). Ce
28
17/03/2020
v Règle 3.1 : Toute association binaire de type [*, n : *, n], devient une relation
(table) ayant comme clé le couple composé par les deux relations issue des entités.
v Les éventuelles propriétés dans l'association deviennent des simples attributs
dans cette nouvelle relation.
PRODUIT(numProduit, désignationProduit,prixUnitaire)
COMMANDE(#numClient,#numProduit, quantité)
v Règle 3.2 : Dans une association à trois participants ou plus, l’association devient
une relation ayant comme clé le composé des clés de toutes les relations(tables)
issues des entités participantes à cette association.
v Les éventuelles propriétés dans l'association deviennent des simples attributs
dans cette nouvelle relation.
TYPE_TRAVAUX(numTypeTravaux, désignation)
29
17/03/2020
L’entité mère sera transformée en une nouvelle relation avec ses attributs.
Chaque entité fille Si sera transformée en une relation comportant comme clé
primaire l’identifiant de l’entité mère et comme attributs les attributs de Si.
SECRTAIRE(id#, vitesseFrappe)
INGENIEUR(id#, spécialité)
TECHNICIEN(id#, grade)
Contraintes de clefs étrangères :
SECRETAIRE.id ⊆ EMPLOYE.id
TECHNICIEN.id ⊆ EMPLOYE . id
INGENIEUR.id ⊆ EMPLOYE.id
30
17/03/2020
Chaque entité fille Si sera transformée en une relation comportant comme clé
primaire l’identifiant de l’entité mère et comme attributs les attributs de Si et les
attributs de l’entité mère. Cette règle pose un problème lorsque les sous-entités
ne sont pas disjointes.
31
17/03/2020
L’entité mère et ses entités filles seront transformées toutes en une seule relation
ayant comme clé primaire l’identifiant de l’entité mère et comme attributs les
Le problème posé par cette règle est que certains attributs risquent d'avoir une
valeur nulle.
32
17/03/2020
1,N
chefPilote
Le Modèle Relationnel
codeAer
nomAer
: Passage
1,N
du modèle E/A au modèle rela1onnel
R1 et R2 Pilote (Brevet, nom, fonction, compagnie, #chef)
ville
q Passage du modèle E/A au modèle relationnel
1,N
Distance
nautique
33
17/03/2020
v L ’identifiant de l’entité côté cardinalités (0,1) est dupliquée dans celle de côté
v L’identifiant de l’une des entités est dupliquée dans l’autre entité où elle devient
a
enseigne 0...n 0...n lieu
Professeur Cours
N° Salle Horaire
Nb heures
0...n
Nom Prénom
ID
ID 0...n
0...n Assiste
Nb Salle
heures a
0...n
0...n
0...n
Matière 0...n prend 0...n Etudiant Nom
Capacité
Numéro
ID
Nom ID Nom
Niveau
Prénom
Nb
matières
34
et textuel). Quelles sont les clés primaires et les clés étrangères ?
4. Ajouter dans le schéma relationnel les types de données possibles, en supposant
que : 17/03/2020
a. le code d un m dicament est de la forme ABC1234 (3 lettres et 4 chiffres)
b. le matricule d un m decin est de la forme 12345 (5 chiffres)
c. le num ro de s curit sociale est de la forme 12345678901234-56 , (13 + 2 chiffres)
d. le num ro d une consultation est un entier (incr ment chaque nou elle
consultation)
5. Donner un exemple de base de données qui suit le schéma relationnel précédent
LeetModèle Relationnel
qui illustre les questions 2.a, 2.b et 2.c. : Passage du modèle E/A au modèle rela1onnel
q Passage
Exercicedu
3 : modèle E/A au modèle relationnel
Exemple 2:
Soit le modèle entités/associations
Introduction
Dépendance fonctionnelle
Définition
DF élémentaire
DF transitive
Formes normales
35
17/03/2020
s'assurer que le schéma relationnel défini pour une base de données est correctement
construit.
v Un mauvais schéma relationnel peut en effet entrainer des anomalies lors des
manipulations.
ü Si un nouveau tuple est inséré pour un fournisseur connu, avec une adresse différente
è incohérence
ü Impossibilité d'enregistrer un nouveau fournisseur sans livraison (ou des valeurs
nulles).
36
17/03/2020
37
17/03/2020
v Les dépendances fonctionnelles sont une technique qui permet de vérifier la validité
d’un modèle entité association (MCD).
Est élémentaire
38
17/03/2020
v On dit que la DF X →Y est directe s'il n'existe pas un attribut A de R tel que X → A et
A→Y soient des DF, c-à-d qu'il ne faut pas qu'il y ait de DF transitive.
Exemple :
on a la DF A →C est directe
Ø Les trois premières propriétés sont connues sous le nom « Axiomes d’Armstrong ».
v Propriété 1 : Réflexivité
Y⊆X ⇒ X → Y ou X → X
Tout ensemble d’attributs détermine lui-même ou une partie de lui-même.
v Propriété 2 : Augmentation
v Propriété 3 : Transitivité
X → Y et Y → Z ⇒ X → Z.
39
17/03/2020
X → Y et X → Z ⇒ X → Y, Z
X → Y et W, Y → Z ⇒ W, X → Z
v Propriété 6 : Décomposition
v Exemple
Soit R (A, B, C, D, E, G, H) et
F= {A,B → C ; B → D ; C,D → E ; G → A ; D → H}
En utilisant les axiomes d’armstrong, montrer que l’on peut déduire les ensembles
suivants:
1. B → H
2. B,G → C
3. A,B → E
40
17/03/2020
v Soient X, Y deux attributs. X→Y est une dépendance fonctionnelle transitive s’il existe
Transi)vité
cv
X Y
Exemple :
COMMANDE (numCmd , dateCmd , numClient , codeArticle , prixU,quantité )
numCmd → dateCmd
numCmd codeAr/cle
numCmd → numClient
quan/té
41
17/03/2020
v La clé d’une relation est l’ensemble d’attributs dont les valeurs permettent de
caractériser les n-uplets de la relation de manière unique.
v Formellement :
ü Un attribut ou une liste d’attributs X est une clé pour la relation R(X,Y,Z) si
ü et X → Y, Z est élémentaire.
42
17/03/2020
43
17/03/2020
En résumé on a les DFE suivantes (on peut toujours utiliser l’axiome de décomposition
v C→PC
v (H,C)→S
v (H,S)→(C,P)
v (H,P)→(S,C)
v (C,E)→N
v (H,E)→(S,C,P,N)
Algorithme :
1. Initialiser (X)+ à X,
2. Trouver une DF(G→D)∈ F possédant en partie gauche des attributs inclus dans (X)+,
44
17/03/2020
Exemple :
Soit F={A → D ; A,B → E ; B,I → E ; C,D → I; E → C}
1. (AE)+= AE
3. Fin
Exemple 3:
45
17/03/2020
q Couverture minimale
2.Supprimer les DF redondantes : Une DF peut être supprimée de F s’il en résulte une
transformation de F en G telle que G+=F+ par rapport à R avec G=F-{DF}
46
17/03/2020
Exemple :
Algorithme de
Recomposition par jointure normalisation
Tables décomposée
47
17/03/2020
48
17/03/2020
v Une relation peut être en deuxième forme normale par rapport à une de ses clés
candidates et ne pas l’être par rapport à une autre.
v Une relation avec une clé primaire réduite à un seul attribut, ou contenant tous les
attributs, est forcément en deuxième forme normale.
49
17/03/2020
• CLIENT(numClient, nomClient)
50
forme normale ssi :
attribut contient une valeur atomique (unique) 1. elle est en 1ère forme
2. tout attribut non clé ne
dépend pas d'une partie
17/03/2020
PERSONNE NOM PROFESSION
de clé
DUPONT Ingénieur, Professeur
MARTIN Géomètre
R C1 C2 X Y
Forme normale
v Il s’agit du cas où une partie d’une cléForme
dépendNormale
d’un attribut nom clé.
R C1 C2 X Y
R C X Y Z
1
Formes normales (FN)
q Forme normale de BOYCE-CODD
Exemple : Soit, par exemple, le schéma de relation suivant :
51
17/03/2020
52
17/03/2020
• !(#$%&'('$%) *+,-./01
Exemple : L’étudiant avec l’identifiant 1
• !('&3(4&'5%(67) 8.9:/-1.
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
• "()/0<2=) 56789:;6
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
53
17/03/2020
• !(4565789:;+++) -./0123
• !(<5=9'>56?+;/+;/A+;B*∧<5=9'>56DB;/+;/A+;B*) -EF0GFHI1J
• !(<5=9'>56?+;/+;/A+;B*∧<5=9'>56DB;/+;/A+;B*∧9>56:K) -EF0GFHI1J
54
17/03/2020
• +(,-.-//01,…,,-.-//0/) 456789:;
Exemple : Les noms des étudiants
• +(/-<=>?@AB/>) C8DE97;8
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
Exemple : Les noms des étudiants et leurs âges
• +(/-<=>?@AB/>,BF0) C8DE97;8
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
55
17/03/2020
• #(94:8(;45) +<=.>=?@/A
56
17/03/2020
57
17/03/2020
3. Le salaire de « Slaoui »
58
17/03/2020
v Renomme le schéma d’une relation R(A1, ..., An) en R’(A1’, ..., An’) (dans le retour de
la requête)
• "# $ %$& …….%$) *
Exemple : Renomme une relation R en R’ : "+,-./00, (<=>?@AB=)
Etudiant Personne
idEtudiant nomEtudiant age idEtudiant nomEtudiant age
1 Alaoui 20 1 Alaoui 20
2 Slaoui 17 2 Slaoui 17
Exemple : Renomme les attributs d’une relation : Les noms des étudiants qui ont un âge
> 19
• "+,-./00, 12+,-./00,,0/4+,-./00, (6(1278921:08,0/478921:08) <=>?@AB=)
idEtudiant nomEtudiant age idPersonne nomPersonne
1 Alaoui 20 1 Alaoui
2 Slaoui 17 2 Slaoui
(Comme les a5ributs doivent être iden:ques, on doit renommer les a5ributs)
nom
Alaoui
Slaoui
Maths
Programmation
59
17/03/2020
1
• ! "#$%&#"'(% )*+,-./* ∩ ! "#1'%"è34 5.*-è67 = ∩ 1 =1
2
idEtudiant idMatière note
1 1 13
1 2 19
v La différence de deux relations avec des attributs identiques produit une relation qui
contient l’ensemble des éléments qui se trouvent dans la première relation mais ne se
trouvent pas dans la deuxième.
1
• ! "#$%&#"'(% )*+,-./* − ! "#1'%"è34 5.*-è67 = − 1 =2
2
idEtudiant idMatière note
1 1 13
2 1 19
60
17/03/2020
v Autrement dit, la division de R1 par R2 (R1÷R2) génère une relation qui regroupe tous
les tuples qui, concaténés à chacun des tuples de R2, donne toujours un tuple de R1.
v Tous les attributs de R2 doivent être présents dans R1 et R1 doit posséder au moins un
attribut de plus que R2 (inclusion stricte).
v Le résultat de la division est une nouvelle relation qui a tous les attributs de R1 sans
aucun de ceux de R2.
Exemple :
Enseignant
Etudiant
Enseignant Etudiant
Nom
El Koulali Hachimi
Charif
Benyasir Alaoui
Safir
Hamoumi Khaldi
Hamzaoui Charif
El Basri Idrissi
El machkouri Safir
Enseignant
Relation : Enseignant ÷ Etudiant El machkouri
Hamzaoui
61
17/03/2020
A B
A1 A2 A3 A1 A2 A3
1 2 4 1 2 4
2 3 5 4 2 2
8 8 6 4 9 5
9 9 0 9 9 0
4 5 1 2 3 5
A∪B A∩B
A1 A2 A3 A1 A2 A3
1 2 4 1 2 4
2 3 5 9 9 0
8 8 6 2 3 5
9 9 0
A-B
4 5 1
A1 A2 A3
4 2 2
8 8 6
4 9 5
4 5 1
62
17/03/2020
• ! "#$%&'(#.&%"#$%&'(#*+,#-.&%"#$%&'(# ./01234/×67/8
idEtudiant nomEtudiant age idEtudiant idMatière note
1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19
63
17/03/2020
9:;<=>?:×AB:C)
idEtudiant nomEtudiant age idEtudiant idMatière note
1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19
64
17/03/2020
v Elle va associer chacun des tuples (n-uplets) d’une relation R avec tous les tuples (n-
uplets) d’une relation S qui respectent une qualification (= une condition).
v La jointure naturelle (⋈) : La jointure naturelle de deux relations retourne les lignes
du produit cartésien de ces deux relations dont la valeur des attributs en commun est
égale. Ces attributs ne sont pas dupliqués lors du retour de la requête.
CDEFGHID×KLDM)
65
17/03/2020
66
17/03/2020
v Jointure externe : La jointure externe (OUTER JOIN) est une jointure de R et S qui
conserve :
ü les tuples (n-uplets) résultat de la jointure
ü ainsi que les tuples (n-uplets) de l’une ou l’autre des 2 relations, ou bien encore des
2, qui n’ont pas été joints.
67
17/03/2020
1 AliJointure 06 56 34 67
externe de 12
R et S 2 Malik Taza
68
17/03/2020
v La relation doit être renommée pourêtre utilisée 2 fois dans l’opération de jointure. Les
noms des attributs doiventêtre préfixés du nom de relation.
Exemple : Les paires d’étudiants qui ont le même âge :
• ("#($%&,()*&,+,-) /0123450) ⋈ ("#7($%8,()*8,+,-) /0123450)
E E’
id1 nom1 age id2 nom2 age
1 Alaoui 20 1 Alaoui 20
2 Slaoui 17
E⋈E’ 2 Slaoui 17
A E
a1 e1
69
17/03/2020
Introduction
Langage SQL
q Introduction
v Le langage SQL (en anglais : Structured Query Language) c’est un langage qui permet
de donner des ordres aux SGBDR afin d’accéder aux services qu’il offre :
v Le langage SQL s’appuie sur les opérateurs de l’algèbre relationnelle définis en 1970 par
as a Query Language).
70
17/03/2020
Langage SQL
q Introduction
ü SQL1 (SQL89) : première version avec quelques défauts corrigés dans la suivante
……….………………………
………………………………
Langage SQL
q Introduction
v Le langage SQL permet de couvrir tous les besoins d’accès aux bases de données
relationnelles grâce à 5 groupes d’ordres SQL :
v Langage de Définition de Données (LDD) (Data Definition Language (DDL)): permet la
gestion des tables de la base de données (création, Ajouter des colonnes, supprimer des
colonnes, etc.)
71
17/03/2020
Langage SQL
q Introduction
START
CREAT INSERT INTO SELECT GRANT
TRANSACTION
ü CREATE, pour créer de nouveaux objets du schéma (tables, types, index …).
72
17/03/2020
v SQL permet de créer des relations sous forme de tables et de définir lors de la création
des contraintes d’intégrité variées sur les attributs.
v Une commande de création permet donc de préciser le nom de la table et de définir les
éléments de la table correspondant aux colonnes ou aux contraintes.
Syntaxe :
CREATE TABLE <nomdelatable> (
nom_colonne_1 type_colonne_1 [contrainte d'a-ribut1],
nom_colonne_2 type_colonne_2 [contrainte d'a-ribut2],
……..,
nom_colonne_n type_colonne_n [contrainted'a-ributn],
[contrainte1 de table]
[, contrainte2 de table]
………………………………..);
v Contraintes d’intégrité :Une contrainte d’intégrité est une règle qui permet de
contrôler la validité et la cohérence des valeurs entrées dans les différentes tables de la
base. Elle peut être définie sous deux formes :
• Sur un attribut : La contrainte porte sur un seul attribut. Elle suit la définition de
l’attribut.
• Sur une table : La contrainte porte sur un ensemble d’attributs d’une même table,
une virgule sépare la définition d’une contrainte de table des définitions des
attributs.
73
17/03/2020
v PRIMARYKEY :L’attribut est une clé primaire pour la table et elle peut être remplacée
par UNIQUE et NOTNULL.
v CHECK: C’est une contrainte associée à une condition qui doit être vérifiée par toutes
les valeurs de l’attribut (domaine des valeurs de l’attribut).
v UNIQUE (attr, attrj, ……) : L’unicité porte sur le n-uplet des valeurs.
v PRIMARY KEY (attri, attrj, ……) : Clé primaire de la table (Clé composée).
Il est possible de donner un nom à une contrainte grâce au mot clé CONSTRAINT suivi
du nom que l’on donne à la contrainte, de telle manière à ce que le nom donnés affiche en
cas de non-respect de l'intégrité, c'est-à-dire lorsque la clause que l’on a spécifiée n’est pas
validée.
74
17/03/2020
v Si un nouveau tuple est inséré sans la valeur de l’attribut budget, il prendra la valeur
par défaut 20000.00
75
17/03/2020
v Quand une contrainte doit s'appliquer à plusieurs attributs, elle doit être exprimée
comme contrainte de table.
76
17/03/2020
v Remarque : Toutes les contraintes sur attribut (ou sur table) peuvent être nommées.
v Il est en principe interdit de supprimer un tuple référencé par un autre tuple dans le
schéma relationnel.
v Avant de supprimer le tuple référencé, il faut d'abord supprimer tous les tuples qui le
référencent.
v Exemple: Avant de supprimer l'employé 1023, il faut supprimer toutes ses affectations.
77
17/03/2020
Ø Suppression en cascade
78
17/03/2020
§ CHAINES DE CARACTERES
§ NOMBRES
§ DATES ET HEURES
§ CHAINES DE BITS
§ OBJETS VOLUMINEUX
79
17/03/2020
–INTEGER ou INT: nombres entiers sur 32 bits (en général), de (-231) à (232-1).
v Réels:
–REAL, FLOAT, DOUBLE PRECI nombre décimal approché (la conversion en binaire
fait perdre une certaine précision ) ; ce type ne devrait jamais être utilisé pour des
montants ou des quantités précises !SION :
80
17/03/2020
v Objets volumineux
81
17/03/2020
ü Ajouter une ou plusieurs colonnes (ADD (col1 type1[, col2 type2 …]))
ü Modifier une ou plusieurs colonnes (MODIFY (col1 type 1[, col2 type2…]))
82
17/03/2020
v Supprime la table Employé et tous les tuples qu'elle contient. A ne pas confondre avec
l'instruction DELETE.
Exemple :
v Remarque : Il est interdit de supprimer une table référencée par une autre table.
v Pour supprimer les tables Employe, Projet et Affectation, il faut d'abord supprimer la
table Affectation et ensuite les tables Employe, Projet.
DROP TABLE Affectation;
DROP TABLE Employe;
DROP TABLE Projet;
v Sinon, il faut d'abord supprimer les contraintes d'intégrité référençant une table avant
de supprimer cette table.
83
17/03/2020
ü nomCol1, nomCol2, nomCol3, ...: liste des noms de colonne est optionnelle.
• Si elle est omise, la liste des colonnes sera par défaut la liste de l’ensemble des
colonnes de la table dans l’ordre de la création de la table.
• Si une liste de colonnes est spécifiée, les colonnes ne figurant pas dans la liste
auront la valeur NULL.
ü val1, val2, val3, ...: liste des valeurs associées chacune à une colonne de la table ;
toutes les colonnes doivent avoir une valeur qui leur correspond (dans l’ordre
défini dans la table) ; on peut ainsi ajouter plusieurs lignes.
84
17/03/2020
v Il est possible d’insérer dans une table des lignes provenant d’une autre table.
Syntaxe :
Exemple :
ü En l’absence d’une clause WHERE, toutes les lignes sont mises à jour.
Exemple : mise à jour la fonction de l’employé numéro 1009
85
17/03/2020
WEHRE predicat;
ü Toutes les lignes pour lesquelles le prédicat est évalué à vrai sont supprimées.
Exemple :
Syntaxe :
v La commande SELECT permet d’interroger les tables de la BDD. Cette commande est
une combinaison d’une ou de plusieurs clauses. Les clauses sont généralement
introduites par des mots-clés.
Syntaxe :
86
17/03/2020
v WHERE : sélectionner les lignes qui nous seront effectivement utiles (sélection)
v HAVING : sélectionner les lignes après que les calculs d’agrégats ont été réalisés
(sélection)
v listeDeColonnes : colonnes retournées par la requête, séparées par une virgule (sauf la
dernière)
87
17/03/2020
88
17/03/2020
Opérateur Déscription
89
17/03/2020
ü On peut ainsi effectuer les types de comparaison suivants, et tester que la valeur
d’une colonne...
• Commence par ’xx’ : colonne LIKE ’xx%’
• Contient ’xx’ : colonne LIKE ’%xx%’
• Se termine par ’xx’ : colonne LIKE ’%xx’
• Contient un ’x’ au caractère 2 : colonne LIKE ’_x%’
• Contient un ’x’ en avant dernier caractère : colonne LIKE ’%x_’
• a une longueur exacte de n caractères , par exemple 4 : colonne LIKE ’____’
Opérateur Déscription
Opérateur ALL(liste) teste si l’opérateur s’applique à toutes les valeurs
de la liste
Opérateur ANY(liste) teste si l’opérateur s’applique à au moins une des
valeurs de la liste
Opérateur EXISTS(liste) teste si la liste n’est pas vide
90
17/03/2020
91
17/03/2020
92
17/03/2020
93
17/03/2020
94
17/03/2020
95
17/03/2020
96
17/03/2020
97
17/03/2020
v L’opération de renommage est utilisée afin de rebaptiser des tables ou des colonnes
afin de lever une ambiguïté lorsque, dans une requête, un même identificateur de
colonne est utilisé plusieurs fois, ou un même nom de table apparait plusieurs fois.
v Alias de table : L’alias de table est un nouveau nom donné à une table au sein d’une
requête, et valable seulement dans la requête.
Syntaxe :
v L’alias de table est utilisé essentiellement dans les jointures où des colonnes de noms
identiques proviennent de table différentes : un alias court, d’une seule lettre par
exemple, permet de rendre la requête plus lisible.
98
17/03/2020
Exemple : Les nom, prenom et date dentrée des personnes qui habite à Fes
99
17/03/2020
v UNION: permet de fusionner deux requêtes (ou table ) ayant le même schéma.
Syntaxe :
• Sans doublons
SELECT Requête1 UNION Requête2;
• Les doublons sont conservés
SELECT Requête1 UNION ALL Requête2;
Exemple : Les personnes entrées en janvier et celles habitant à Fes
SELECT * FROM Personne WHERE dateEntree BETWEEN (‘2008-01-01 and ‘2008-01-30’)
UNION
SELECT * FROM Personne WHERE ville=‘Fes’;
Résultat numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
4 Safir Jawad Fes 8500.00 2008-09-07 H
Remarque 2: La division n’est pas implanté dans les SGBDR : il est nécessaire d’utiliser
une sous-requête pour mettre en oeuvre cette notion.
100
17/03/2020
Remarque 2 : Si des attributs portent le même nom sans toute fois avoir le même sens,
on obtient une jointure incohérente...
101
17/03/2020
102
17/03/2020
Tehéta - Jointure :.
Syntaxe :
SELECT * FROM
(Etudiant INNER JOIN Inscrire ON Etudiant.numero=Inscrire.numero;
Résultat numero nom prenom dateEntree numero code
1 Alaoui Samir 1990-01-01 1 INFO
9 Elkhaldi Fouad 1994-03-15 9 INFO
34 Safir Jawad 1995-09-07 34 INFO
1 Alaoui Samir 1990-01-01 1 MATH
23 Slaoui Karima 1992-04-20 23 MATH
34 Safir Jawad 1995-09-07 34 MATH
1 Alaoui Samir 1990-01-01 1 PHCH
103
17/03/2020
Tehéta - Jointure : Lorsque la (ou les) colonne(s) de jointure porte(nt) le même nom
dans les 2 tables jointures, il est possible d’utiliser une notation plus simple en SQL92, et
qui supprime le doublon de colonne(s) de jointure :
Syntaxe :
104
17/03/2020
105
17/03/2020
v Les noms des attributs doivent être préfixés du nom de relation afin d’éviter toute
ambiguïté ou bien être renommés.
Syntaxe :
106
17/03/2020
107
17/03/2020
v Il n’existe pas d’opérateur spécifique pour cette forme de jointure : une simple
projection permet de conserver les colonnes d’une des 2 tables.
Syntaxe :
108
17/03/2020
Personne Salaire
1 8000
2 25000
3 9400
Maximum des salaires
4 7000 dans la table Salaire
5 5000 “Personne” 25000
6 4900
7 8100
8 5900
109
17/03/2020
vRemarque 2 : Les fonctions de groupe ne peuvent pas être utilisées dans les clauses
FROM, WHERE et GROUP BY
Fonction Description
SUM( [DISTINCT | ALL] n ) Retourne la somme de toutes les valeurs du
groupe n
MIN( [DISTINCT | ALL] expr ) Retourne la plus petite valeur du groupe expr
MAX( [DISTINCT | ALL] expr ) Retourne la plus grande valeur du groupe expr
110
17/03/2020
111
17/03/2020
v Les fonctions de groupe peuvent être utilisées pour retourner les informations
relatives à chaque groupe.
Syntaxe :
112
17/03/2020
Syntaxe :
113
17/03/2020
vLa clause WHERE peut être utilisée pour pré-exclure des enregistrements avant la
division en groupes.
vLes colonnes de la clause SELECT qui ne sont pas inclues dans une fonction de groupe
doivent être présentes dans la clause GROUP BY.
vLes alias de colonne ne peuvent pas être utilisés dans la clause GROUP BY.
vPar défaut, la clause GROUP BY classe les enregistrements par ordre croissant.
L'ordre peut être changé en utilisant la clause ORDER BY nom_col DESC.
Syntaxe :
114
17/03/2020
vFonctions mathématiques
115
17/03/2020
116
17/03/2020
117
17/03/2020
Exemple :
SELECT DATEDIFF (DAY,'11/30/2015','01/31/2016' )
retourne comme resultat 62.
v DAY ( date ) : retourne un entier qui représente la partie jour de la date spécifiée. Les
données retournées par cette fonction sont de type int.
Exemple :
SELECT DAY ( '10/ 23/2016')
retourne comme resultat 23.
118
17/03/2020
v MONTH ( date ) : retourne un entier qui représente la partie mois d'une date
spécifiée. Les données retournées par cette fonction sont de type int.
Exemple :
SELECT MONTH ( '10/23/2016')
retourne comme resultat 10.
v YEAR ( date ) : retourne un entier qui représente la partie année de la date spécifiée.
Les données retournées par cette fonction sont de type int.
Exemple :
SELECT DAY ( '10/ 23/2016')
retourne comme resultat 2016.
• Produit (numP, libP, coul, poids, PU, Qtes): Désigne l’ensemble des produits.
119
17/03/2020
v Effectuer une sous-requête consiste à effectuer une requête à l’intérieur d'une autre,
ou en d'autres termes d'utiliser une requête afin d’en réaliser une autre (on entend
parfois le terme de requêtes en cascade).
v Une sous-requête doit être placée à la suite d’une clause WHERE ou HAVING, et doit
remplacer une constante ou un groupe de constantes qui permettraient en temps
normal d'exprimer la qualification.
120
17/03/2020
v Une sous-requête est une requête incluse dans une autre requête(principale), i.e., la
requête principale utilise le résultat de la sous-requête
• SELECT(à condition que pour chaque ligne sélectionnée par la requête principale,
on ne sélectionne qu’une ligne dans la sous-requête)
• Scalaire
• Corrélées.
121
17/03/2020
Sous-requête scalaire
q Sous req)ê+,- ∶ /012134,
Dans une sous-requête scalaire le résultat de la sous-
requête comporte une seule et unique valeur. Elle
consiste souvent à effectuer une opération statistique
v Retourne une seule valeur (une ligne et une colonne (attribut))
qui retourne un unique résultat : moyenne, minimum,
maximum, somme, etc (Tableau 3). Ce résultat peut
être utilisé dans une comparaison, dans la restriction
de la requête S’utilise
vprincipale (généralement)
(Figure 2). là où une requête attend un nom d’attribut ou une constante.
Reprenons l’exemple de l’extraction des livres dont
le prix est supérieur au prix moyen. Vous avez vu que
deux requêtesv On peutd’obtenir
permettent utiliser la sous-requête
le résultat. La pre- Figurescalaire dansde latrois
1. Extrait du schéma base declauses (WHERE, FROM, SELECT)
données biblio
mière calcule le prix moyen, la seconde utilise le résul-
tat du calcul (22,5 euros) pour extraire l’information :
122
17/03/2020
Exemple : Les établissements qui sont dans la même ville que INPT
nomE ville effectif
FSR Rabat 36000
SELECT * INPT Rabat 15000
FROM E
Exemple : Les établissements qui sont dans la même ville que INPT
nomE ville effectif ville
FSR Rabat 36000 Rabat
123
17/03/2020
si la requête est corrélée (cf Sous-requête corrélée). Le Elle est équivalente à la requête :
17/03/2020
• vrai s’il existe un b parmi les lignes renvoyées par sous_requete tel que :
Attribut Opérateur b soit vrai.
v [NOT] EXISTS(sous_requete)
125
17/03/2020
idE nomEleve
123 Chaoui
234 Khaldi
678 Mellouli
765 Raoui
876 Slaoui
898 Iraqui
126
17/03/2020
SELECT *
FROM E
WHERE effectif >= ALL (SELECT effectif FROM E );
127
17/03/2020
Fiche technique
Opérateur IN / NOT IN
L’opérateur de comparaison multi-lignes IN retourne
vrai si la valeur à gauche de l’opérateur fait partie de
la liste des valeurs placée à droite de l’opérateur : val
IN (val1, val2, ...). Utilisé dans une restriction,
il permet de sélectionner les lignes dont la valeur d’un
Exemple : requête retourne plusieurs colonnes
Figure 4. Sous-requête ligne champ est incluse dans la liste. Par exemple, la requête
ci-après affiche le titre des livres dont le genre est ro-
SELECT nomE, ville La requête interne (sous-requête) doit être placée entre man, théâtre ou fantastique :
parenthèses. Quand elle est utilisée dans une comparai-
FROM E son, comme c’est le cas dans cet exemple, nomEelle doit obli-ville
SELECT titre FROM livre WHERE
gatoirement apparaître du côté droit de l’opérateur. La genre IN ('roman', 'fantastique', 'theatre');
requête interne est toujours exécutée en FSTF
premier, saufFes
WHERE ville = ‘Fes’; si la requête est corrélée (cf Sous-requête corrélée). Le Elle est équivalente à la requête :
résultat obtenu est utilisé dans la requête externe (princi-
pale) qui est donc exécutée en dernier. Il peut y avoir plu- SELECT titre FROM livre WHERE
sieurs sous-requêtes imbriquées dans une requête. Elles genre = 'roman' OR genre = 'fantastique' OR
seront exécutées de la plus interne à la plus externe. genre = 'theatre';
Les sous-requêtes peuvent être utilisées dans diffé-
rentes parties d’une requête SELECT externe : dans les Précédé par la négation NOT, l’opérateur IN retourne
clauses de restriction WHERE et HAVING, après le FROM vrai lorsque la valeur du champ ne fait pas partie de la
(cf. section sous-requête FROM), et dans une expres- liste. Par exemple, la requête ci-après retournera les ti-
Langage SQL :Langage d’Interrogation des Données (LID) sion créant une colonne dérivée. Par exemple, il est tres des livres dont le genre ne fait pas partie de ceux
possible de créer une colonne qui affiche la différence listés, c’est-à-dire uniquement les livres dont le genre
de prix par rapport au prix moyen pour tous les livres de est historique ou policier dans l’exemple du Tableau 1 :
la table :
idE nomE departementSELECT titredécision
q Sous req)ê+,- ∶ /)0+1 − 340455,-(4) 0175,) FROM livre WHERE
123 AVG(prix)
SELECT titre, prix - (SELECT FSR Informatique
FROM genre NOT INO('roman', 'fantastique',
idE nomEleve MoyenneLycee effectifLycee
123
livre) AS diff FROM livre; INPT Electronique
'theatre'); N
Exemple : Les établissements avec même ville et même effectif que INPT
128
17/03/2020
Exemple : Les établissements avec même ville et même effectif que INPT
SELECT *
FROM E
WHERE (ville, effectif )= (SELECT ville, effectif FROM E WHERE nomE=‘INPT’);
v Une sous-requête peut également retourner une table : plusieurs lignes et plusieurs
colonnes. La comparaison se fait sur chaque ligne et chaque colonne. Ces sous-
requêtes sont généralement utilisées pour extraire les lignes correspondant à des
Fiche technique
maxima ou des minima dans des regroupements.
129
pour extraire les lignes correspondant à des maxima ou genre);
des minima dans des regroupements.
Il est possible de regrouper des lignes en fonction Sous-requête corrélée
d’une ou plusieurs valeurs de champs en utilisant la Dans les sous-requêtes étudiées jusqu’à présent, les
clause GROUP BY. Des fonctions statistiques peuvent colonnes de la requête interne faisaient toutes partie
17/03/2020
Exemple de corrélation :
SELECT *
FROM E aliasE
130
17/03/2020
SELECT e.nomE
FROM Ee
WHERE EXISTS (SELECT * FROM C c WHERE c.nomE=e.nomE);
nomE
FSR
INPT
FSTF
INSA
131
17/03/2020
v Rechercher le nom et le salaire des employés qui gagnent plus que leur patron, et le
nom et le salaire de leur patron.
v Rechercher le nom et le salaire des employés qui gagnent plus que « Khaldi », et le
nom et le salaire de « Khaldi ».
SELECT X.nom, X.salaire, Y.nom, Y.SALAIRE
FROM Emp X, Emp Y
WHERE X.salaire > Y.salaire AND Y.NOM = ‘Khaldi';
132
17/03/2020
v Rechercher le nom et le titre des employés du service 31 qui ont un titre l'on ne
trouve pas dans le service 32.
133
17/03/2020
134