Académique Documents
Professionnel Documents
Culture Documents
Polycopié de Cours
Bases de Données
Niveau : 2ème année licence en Informatique
i
2.2. Fermeture transitive (Transitive closure) ............................................................................ 16
2.3. Couverture minimale (Minimal cover) ................................................................................ 16
2.4. Clé de relation ......................................................................................................................... 17
2.5. Contrainte d’intégrité ............................................................................................................. 18
2.6. Formes normales ................................................................................................................... 18
2.6.1. Première Forme Normale (First normal form) 1FN .............................................. 19
2.6.2. Deuxième Forme Normale (Second normal form) 2FN ....................................... 20
2.6.3. Troisième Forme Normale (Third nomal form) 3FN ............................................ 20
2.6.4. Forme Normale FN de Boyce-Codd BCNF (Boyce-Codd normal form) .......... 21
2.7. Schéma de base de données.................................................................................................. 22
3. Modèle relationnel logique (SQL) .............................................................................................. 23
3.1. Table, colonne et ligne ......................................................................................................... 23
3.2. Description de SQL (Structured Query Langage) ............................................................ 23
3.3. Définition de données .......................................................................................................... 24
3.3.1. Création de table (CREATE) .................................................................................... 24
3.3.1.1. Contrainte de colonne ................................................................................... 25
3.3.1.2. Contrainte de table ........................................................................................ 25
3.3.2. Modification de schéma (ALTER, DROP) ............................................................ 26
3.3.2.1. Suppression d’une table ................................................................................ 26
3.3.2.2. Modification d’une table ............................................................................... 27
3.4. Manipulation des données (INSERT, DELETE, UPDATE) ........................................ 27
3.4.1. INSERT INTO ........................................................................................................... 27
3.4.2. UPDATE ..................................................................................................................... 28
3.4.3. DELETE...................................................................................................................... 29
Chapitre 3
1. Définition de l’algèbre relationnelle ........................................................................................... 30
2. Opérations de base ....................................................................................................................... 30
2.1. Opérations et opérateurs unaires (spécifiques) ................................................................. 30
2.1.1. Sélection (Restriction) ............................................................................................... 30
2.1.2. Projection .................................................................................................................... 31
2.1.3. Thêta Jointure ............................................................................................................. 32
ii
2.1.4. Jointure naturelle ............................................................................................................ 33
2.1.5. Traduction en SQL ........................................................................................................ 34
2.1.5.1. Requêtes simples (SELECT-FROM) ............................................................. 34
2.1.5.2. Sélection de colonne (clause WHERE) .......................................................... 34
2.1.5.3. Tri de résultats (ORDER BY) .......................................................................... 36
2.2. Opérations ensemblistes (binaires) ...................................................................................... 36
2.2.1. Union ............................................................................................................................ 36
2.2.2. Différence..................................................................................................................... 36
2.2.3. Produit cartésien (Cartesian product)....................................................................... 38
3. Opérations dérivées ...................................................................................................................... 39
3.1. Intersection ............................................................................................................................ 39
3.2. Jointure externe ..................................................................................................................... 40
3.3. Semi jointure .......................................................................................................................... 42
3.4 Division ................................................................................................................................... 43
4. Le langage algébrique ................................................................................................................... 44
5. Traduction en SQL ....................................................................................................................... 44
5.1. Union ...................................................................................................................................... 44
5.2. Intersection ............................................................................................................................ 45
5.3. Différence .............................................................................................................................. 45
5.4. Produit cartésien (sans jointure) ......................................................................................... 45
5.5. Jointure de tables (condition de jointure) .......................................................................... 46
5.5.1. Thêta jointure .............................................................................................................. 46
5.5.2. Jointure naturelle ......................................................................................................... 47
5.5.3. Jointure externe ........................................................................................................... 47
6. Fonctions d’agrégat ...................................................................................................................... 48
7. Clause GROUP BY …HAVING .............................................................................................. 49
7.1. La clause GROUP BY ......................................................................................................... 49
7.2. La clause HAVING .............................................................................................................. 49
Séries d’exercices ............................................................................................................................... 51
iii
Liste des figures et Tableaux
1. Notion de fichier
1.1. Définition
La notion de fichier (File) a été introduite en informatique durant les années50.
Un fichier est un récipient d’information caractérisé par un nom, constituant une mémoire secondaire
idéale, permettant d’écrire des programmes d’application indépendants des mémoires secondaires [1].
Il y avait deux types de fichiers :
1. Fichier des données : des séquences d’enregistrements dont l’accès est séquentiel ou indexé.
2. Fichier de traitement : un ensemble d’instructions permettant la manipulation des données des
fichiers (e.g., assembleur, Cobol).
1.2. Intérêt
L’objectif des fichiers était de simplifier l’utilisation des mémoires secondaires des ordinateurs. Les
fichiers fournissent des récipients de données plus manipulables aux programmes et sont gérées par
un système de gestion de fichiers.
Suite à la sophistication des systèmes informatiques, les données stockées dans des fichiers
(informations système ou utilisateur) sont devenues structurées. En effet, aujourd’hui, les fichiers sont
à la base des systèmes d’information. De ce fait, le premier niveau d’un SGBD (Système de Gestion
de Base de Données) est la gestion de fichiers. Le SGBD sera présenté dans les paragraphes suivants.
Les données gérées par l’entreprise et les programmes spécifiant les traitements sur les données sont
stockés dans des fichiers gérés par le système informatique. Par exemple, le traitement de l’application
de comptabilité d’une entreprise de livraison de produits (gestion des comptes des clients et édition
des factures, etc.).
La gestion des fichiers permet de traiter et de stocker des quantités importantes de données, et de les
partager entre plusieurs programmes. De plus, elle sert de base au niveau interne des Systèmes de
Gestion de Bases de Données.
1.3. Limites des systèmes de fichiers
Cette approche a souffert des problèmes suivants :
Suite à la redondance des données (i.e. les doublons) dans les fichiers, le volume des données et
le temps d’accès aux données augmentent et la validité du système diminue.
La mise à jour dans l’approche système de fichier est pénible parce que le changement d’une
donnée entraine la nécessité de la changer partout pour conserver la validité du système (e.g.,
si l’adresse d’un client change, il faut la mettre à jour partout).
Lorsqu’il s’agit des applications nouvelles, l’utilisateur doit : écrire de nouveaux programmes, créer de
nouveaux fichiers contenants peut être des informations qui existe déjà. Par conséquent, toute
mise à jour de la structure des enregistrements (e.g., ajout d’un champ) conduit à la réécriture
de tous les programmes dédiés à la manipulation de ces fichiers.
Manque de sécurité : Dans le cas où tout programmeur peut accéder d’une manière directe
aux fichiers, il n’est pas possible d’assurer la sécurité et l’intégrité des données.
Dans un environnement où plusieurs utilisateurs accèdent aux mêmes fichiers, des problèmes
de concurrence d’accès se posent.
Plusieurs définitions ont été proposées, en peut citer entre autres les définitions suivantes :
Selon Gardarin [1], une base de données est un ensemble de données modélisant les objets
d’une partie du monde réel et servant de support à une application informatique. Pour mériter
le terme de base de données, un ensemble de données non indépendantes doit être
interrogeable par le contenu, c’est-à-dire que l’on doit pouvoir retrouver tous les objets qui
satisfont à un certain critère.
Une Base de données est un ensemble structuré de données apparentées qui modélisent un
univers réel. Une BD est faite pour enregistrer des faits, des opérations au sein d'un organisme
(administration, banque, université, hôpital, ...). Les BD ont une place essentielle dans
l'informatique [9].
Une Base de données (BD) est un ensemble cohérent, intégré, partagé de données structurées
défini pour les besoins d’une application [10].
Une Base de données est un gros ensemble d’informations structurées mémorisées sur un
support permanent [4].
- Niveau interne : Ce niveau appelé aussi niveau physique permet la gestion : du stockage des
données sur des supports physiques, des structures de mémorisation (fichiers) et d'accès
(gestion des index, des clés, etc.).
- Niveau externe : Ce niveau est aussi appelé niveau vue, c’est le plus haut niveau d’abstraction
de la base de données. A la différence du niveau conceptuel et interne dont les schémas
décrivent toute une base de données, les schémas externes décrivent seulement la partie des
données présentant un intérêt pour un utilisateur ou un groupe d’utilisateurs. En d’autres
termes, le niveau externe associe à un utilisateur ou à un groupe d’utilisateurs une vue partielle
du monde réel. En conséquence, il y a plusieurs vues d’une même BDD.
Note : Pour une BDD, la description conceptuelle et le schéma interne sont uniques. Par contre,
plusieurs schémas externes en général peuvent être définis.
La Figure 1.2 présente les trois schémas d’une BD centralisée.
applications n’est pas obligatoire dans le cas de modification des caractéristiques du niveau
physique.
Manipulation des données : permettre à tous types d’utilisateurs d’accéder à la base selon
leurs besoins et connaissances. Par conséquent, un ou plusieurs :
- Administrateurs de la base doivent avoir la possibilité de décrire les données aux niveaux
interne et logique,
- Développeurs d’applications écrivent des programmes d’application pour les utilisateurs
finaux ou pour eux-mêmes, cela est à partir du niveau conceptuel ou externe,
- Utilisateurs peuvent manipuler les données via un langage simple dont ils ont besoin.
En effet, la centralisation des descriptions de données faites par un groupe spécialisé entraine
une difficulté d’organisation. Le SGBD permet de décentraliser cette description à travers des
outils. Pour cela, un dictionnaire de données dynamique peut aider les concepteurs de BD.
Dans une approche BD, les données ne sont pas indépendantes (i.e. il peut exister certaines
dépendances entre ces données). En d’autres termes, souvent une donnée ne peut pas prendre
une valeur quelconque.
Exemples : une note doit être supérieur ou égale à 0 et ne doit pas dépasser 20, un salaire
mensuel doit être supérieur à 40 000 Dinar et doit raisonnablement rester inférieur à 200 000
Dinar.
Un SGBD doit veiller à ce que ces règles soient respectées par les applications lors des
modifications des données et ainsi assurer la cohérence des données. Ces règles sont appelées
contraintes d’intégrité.
L’objectif est ici de permettre le partage des données entre différents utilisateurs et
applications. Un utilisateur n'a pas à se soucier si quelqu'un d'autre travaille sur les mêmes
informations au même moment et peut accéder aux données en consultation ou en mise à jour
comme s'il était seul. Le système doit gérer les conflits en refusant ou en retardant
éventuellement un ou plusieurs accès. Il faut assurer que le résultat d’une exécution simultanée
de transactions est le même que celui d’une exécution séquentielle. Par exemple, ne pas
autoriser la réservation du même siège pour deux passagers différents.
Les Entrées/Sorties disque reste problématique dans les systèmes de BD car une E/S disque
coûtent quelques dizaines de millisecondes. L’interrogation et la mise à jour de la BD en
utilisant des langages non procéduraux très puissants est une autre limite. Le SGBD prend en
charge l’optimisation du coût et le nombre d’accès (E/S) d’une requête
Avant qu’une BDD prend sa forme finale (i.e. une forme utilisable par un SGBD), il faut passer par
une étape de conception afin de décrire les objets de la réalité ainsi que les relations entre ces objets.
Pour cela, la modélisation à travers des modèles est nécessaire.
Le modèle entité-association, permet de modéliser des situations du monde réel décrites en langage
naturel. Les noms correspondent aux entités, les verbes aux associations et les adjectifs ou
compléments aux propriétés.
Par exemple : Le client a commandé un produit, ici deux entités sont identifiées : client et produit (voir
Figure 1.6).
Le paragraphe suivant décrit les composant du diagramme entité/association.
Entité
Une entité correspond à un objet du monde réel (matériel ou immatériel) défini en général par un nom
(e.g., voiture, commande, etc.). Ces entités sont identifiables de manière unique, interagissent et font
ou subissent des actions. La Figure 3 montre la représentation schématique d’une entité.
Par exemple : voiture, étudiant, patient, etc.
Nom de l’entité
Liste des propriétés
entité ou type association prenne la même valeur pour deux entités (respectivement deux associations)
distinctes.
Par exemple : numéro de client pour un client, code article pour un article, le code ISBN d’un livre
pour un livre, numéro de sécurité sociale pour une personne.
Personne
NSS
Nom
Prénom
DDN
0,n : Une occurrence du type entité peut exister mais n’est pas impliquée dans aucune
association et peut être impliquée, sans limitation, dans plusieurs associations.
0,1 : Une occurrence du type entité ne peut exister que si elle est impliquée dans au moins une
association.
1,n : Une occurrence du type entité ne peut exister que si elle est impliquée dans au moins une
association.
Le modèle hiérarchique (ou arbre) organise les données dans une structure arborescente, où chaque
enregistrement n’a qu’un seul parent (racine). Les enregistrements frères et sœurs sont triés dans un
ordre particulier. Ce modèle convient à la description de plusieurs relations du monde réel. Exemple :
ADABASE (1970), System 2000 (1967).
Modèle réseau ou graphe est un modèle hiérarchique étendu qui autorise relations transverses (i.e.
relations plusieurs-à-plusieurs entre des enregistrements liés). Un enregistrement peut être un membre
ou un enfant dans plusieurs ensembles. Cela permet de traduire des relations complexes. Ex : TOTAL
(1978).
Dans le modèle relationnel, les informations décomposées et organisées sont stockées dans des tables.
Exemple : 80% des SGBD sont relationnelles, ORACLE (85% du marché), DB2, SQL Server,
ACCESS, etc. Le schéma relationnel est l'ensemble des RELATIONS qui modélisent le monde réel ;
tel que les relations représentent les entités du monde réel (par exemple : des personnes, des objets,
etc.) ou les associations entre ces entités.
Le passage d'un schéma conceptuel E-A à un schéma relationnel se fait suivant des règles qui seront
présentées dans le prochain chapitre.
Le nom de la relation de l’exemple ci-dessus est Enseignant, cette relation décrit les enseignants tel
que chaque ligne de la table correspond à une occurrence.
Par exemple : <40, Taleb, Mohammed, Informatique>.
Attribut : Le nom donné à une colonne d’une relation est appelé attribut. L’attribut prend sa
valeur dans un domaine. Par exemple : NEns et Nom sont des attributs de la relation
Enseignant.
Tuples : Les lignes d’une table sont appelées n-uplet ou tuples en anglais.
Domaine : Un domaine est un ensemble de valeurs que peut prendre un attribut. Cet ensemble
de valeurs peut être finies ou infinies (e.g., chaine de caractère, entier, etc.).
Par exemple : Le domaine des couleurs primaires : DC= {rouge, bleu, jaune}.
Le domaine des booléens : DB= {0,1}.
Relation : Une relation est un ensemble de tuples déterminé par un nom et qui peut être
exprimée en intension ou en extension. En d’autres termes, une relation est un sous-ensemble
du produit cartésien d’une liste de domaines caractérisé par un nom.
Exemple de relation :
Client
N0Cli Nom Prénom Datnais
101 Talbi Ahmed 02/03/2000
102 Dali Mohammed 05/06/1999
Le degré de la relation indique son nombre d’attributs (e.g., le degré de la relation Client est 4).
Le nombre de tuples d’une relation représente la cardinalité de cette relation (e.g., la cardinalité
de la relation Client est 2).
1.4. Passage du modèle Entité/ Association au modèle relationnel
Le passage du modèle E/A vers le relationnel est possible via des règles de transformation.
Règle 1 : Toute entité devient une relation dans laquelle l’identifiant de l’entité devient clé primaire de
la relation et les attributs de l'entité deviennent attributs de la relation (voir l’exemple dans la figure
2.1).
Membre Departement
C-MEMBRE 1,1 1,N C-DEP
Nom Travailler
Nom
Prenom Faculte
DDN
Clé étrangère
Fille Membre (C-MEMBRE, Nom, Prenom, DDN, # C-DEP)
Mère Département (C-DEP, Nom, Faculte)
Membre Publication
C-MEMBRE 1,N 1,N C-DEP
Nom Publi
Nom
Prenom Date-publi
Faculte
DDN
2. Normalisation
Limitation des redondances des tuples, ce qui permet la réduction de l’espace de stockage.
Suppression des valeurs NULL et par conséquent, suppression des difficultés sur les jointures
et les fonctions d’agrégation.
Pour limiter les incohérences au sein des données.
Limitation des problèmes de mise à jour et amélioration des performances des traitements.
Les dépendances fonctionnelles (Functional dependency) permettent l’établissement des liens entre
attributs ou groupe d’attributs.
2.1.1. Définition
Soit R (A1, A2… An) avec n ≥2 un schéma de relation, soit X et Y deux sous-ensembles d’attribut de
{A1, A2… An} tel que X∩Y=A. On dit que X → Y (X détermine Y, ou Y dépend fonctionnellement
de X) si : Ɐ les tuples (x,y) et (x’,y’) de R, x=x’ → y=y’.
Par exemple : Type → Marque.
Cela veut dire qu’à chaque valeur de X dans R correspond une seule valeur de Y. Les DFs déterminent
les contraintes entre les attributs (e.g., deux individus peuvent avoir le même nom et le même prénom
mais jamais le même numéro). Les dépendances fonctionnelles sont spécifiées théoriquement par
l’administrateur puis contrôlées par les SGBD.
2.1.2. Propriétés des DFs
Les trois règles suivantes sont connues sous le nom d’axiomes d’Armstrong et permettent d’effectuer
des inférences de DFs à partir d’autre DFs :
Réflexivité : pour tout Y⊆ X ⇒ X → Y : tout ensemble d’attributs détermine lui-même ou une
partie de lui. Par exemple :
NE, NP → NE, NP
NE, NP → NE
Union : si X → Y et X → Z ⇒ X → Y,Z.
Exemple : NumEtud → Nom, Prenom et NumEtud → AnneeEtud
Alors NumEtud → Nom, Prenom, AnneeEtud
Pseudo-transitivité : si X → Y et WY → Z ⇒ WX → Z.
Exemple : NumEns → Grade et Grade, NomEns → Salaire
Alors NumEns, NomEns → Salaire
Décomposition : si X → Y et Z ⊆ Y alors X → Z.
Exemple : Titre_Film → Genre_Film, Année
Par décomposition : Titre_Film → Genre_Film
2.1.3. Types des DFs
o DF triviale : X → Y est triviale si Y ⊆ X.
o DF canonique : une DF X→ Y est dite canonique si ca partie droite est réduite à un seul
attribut. Toute DFs qui n’est pas canonique peut être transformées par décomposition en DFs
canoniques. Par exemple : NumCli→NomCL, PrénomCl, AgeCl n’est pas canonique, par
décomposition, elle donne trois DFs canoniques :
NumCli →NomCL
NumCli →PrénomCl
NumCli →AgeCl
o DF directe : une DF X→ Y est dite directe si elle est élémentaire et Y ne dépend pas par
transitivité de X. Autrement dit, la dépendance entre X et Y ne peut pas être obtenue par
transitivité (∄ Z/ X→Z et Z →Y).
TVA
Figure 2.4. Graphe de dépendance fonctionnelle.
- Pièce (N°pièce, prix-unit, libellé, catégorie).
- Catégorie (catégorie, TVA).
2.2. Fermeture transitive (Transitive closure)
La fermeture transitive d’un ensemble F de DF est un ensemble notée F+ composé de F et de
l’ensemble des DFs déduits par transitivité.
Exemple : à partir de l’ensemble de DF :
F = {NV → TYPE ; TYPE → MARQUE ; TYPE → PUISSANCE}
On déduit la fermeture transitive : F+ = F ∪ {NV → MARQUE ; NV → PUISSANCE}.
Remarque : Si deux ensembles de DFs ont la même fermeture transitive, alors ils sont équivalents.
Par suite, il est intéressant de déterminer un sous-ensemble minimal de DFs permettant de générer
tout les autres. C’est la couverture minimale d’un ensemble de DFs [1].
2.3. Couverture minimale (Minimal cover)
La couverture minimale appelée aussi couverture irredondante et notée IRR(F) est un ensemble F de
DFEs (élémentaires) associé à un ensemble d’attributs vérifiant les propriétés suivantes :
- Aucune dépendance dans F n’est redondante. Cela signifie que pour toute DF f de F, F – {f}
n’est pas équivalent à F.
- Toute DFE des attributs est dans la fermeture transitive de F.
La couverture minimale est un sous-ensemble minimal de DFEs permettant de générer toutes les
autres.
Cet algorithme détaille la notion de redondance de DFs. On dit donc qu'une Df f est redondante si la
fermeture de sa partie gauche sur l'ensemble des DFs restantes (F-f) comporte la partie droite de f.
Cela signifie que pour une DF X→Y et même en enlevant f, le lien sémantique entre X et Y est
conservé.
La couverture minimale va constituer un élément essentiel pour composer des relations sans perte
d’informations directement à partir des attributs.
2.4. Clé de relation
Dans le modèle relationnel, la clé de relation est un concept de base. En effet, La clé d’une relation R
est un ensemble minimal d’attributs de R permettant de déterminer tous les attributs de R. Une
définition plus formelle de la clé d’une relation est comme suit :
Soit R une relation ayant l’ensemble des attributs A et soit X un sous-ensemble de A. X est une clé de
R si Ɐ a∈ A, X→ a.
Clé minimale : Un sous-ensemble d’attributs X d’une relation R est dit clé minimale si :
X est une clé ;
Clé candidate/ primaire : Une relation R peut avoir plusieurs clés appelées clés candidates.
Parmi les clés candidates une est choisi comme en général comme clé primaire.
Superclé : Tout ensemble d’attributs incluant tous les attributs de la clé primaire est dit superclé.
Notons que l’ensemble de tous les attributs d’une relation est une superclé. En outre, la clé
primaire est une superclé.
Clé étrangère : Afin de permettre au SGBDR de maintenir la cohérence des lignes de deux
relations, la clé étrangère sert de lien entre deux relations d’une même BDD.
Unicité de clé : une relation doit posséder une clé primaire dont la valeur est unique. C’est un
groupe d’attributs non nul dont la valeur permet de déterminer un tuple unique dans une table
Contrainte Référentielle : représente une association entre deux tables dites de clé étrangère
imposant que la valeur d'attribut de la relation R1 apparaît comme valeur de clé dans une autre
relation R2.
Contrainte de domaine : permet de restreindre les valeurs d’un domaine (e.g., une note doit être
comprise entre 0 et 20).
Contrainte de non nullité : la valeur d’un attribut doit être renseignée. Un attribut d’une clé ne doit
pas posséder de valeurs nulles (vides).
Exemple :
- Le nombre d’exemplaires de chaque OUVRAGE doit être supérieur à 0 (zéro).
- Chaque OUVRAGE doit avoir au moins un auteur.
La normalisation sert à concevoir d’une manière correcte le schéma d’une base de données
relationnelle. Les trois premières formes normales ont pour objectif de permettre la décomposition
de relations sans perdre d’informations, à partir de la notion de dépendance fonctionnelle [6]. Chaque
forme normale est une progression vers des relations présentant moins de redondances.
Cette décomposition permet d’éliminer la redondance des données ainsi que les anomalies de mise à
jour.
Exemples :
Soit la relation universelle (i.e. relation qui regroupe toutes les informations à stocker) suivante :
Etudiant (NEtud, Nom, Prénom, Matière, Note)
NEtud Nom Prénom Matière Note
101 Nasri Ahmed Bases de données 10
101 Nasri Ahmed Réseaux 13
101 Nasri Ahmed Génie Logiciel 08
102 Haddad Omar Bases de données 09
102 Haddad Omar Réseaux 11
102 Haddad Omar Génie Logiciel 07
On remarque que le numéro de l’étudiant, son nom et son prénom, sont répétés autant de fois que
le nombre des matières ⇒ redondance des données.
Soit la relation : Livraison (N°fourn, adrF, N°prod, prixP, qté)
N°fourn adrF N°prod prixP qté
3 Annaba 52 65 100
22 Alger 10 15 50
22 Alger 33 10 120
3 Annaba 33 10 50
3 Constantine 10 15 200
Si un fournisseur change d’adresse et qu’un seul tuple est mis à jour, ou si un nouveau tuple
est inséré pour un fournisseur connu avec une adresse différente ⇒ incohérence.
Si un fournisseur n'a pas de livraison en cours ⇒ perte d’adresse.
La normalisation est un processus qui permet d’éviter la redondance, la perte et l’incohérence de données
dans le modèle relationnel.
2.6.1. Première Forme Normale (First normal form) 1FN
Une relation est en première forme normale si :
Une relation en 2FN traduit le fait que les attributs non clé dépendent complétement de la
clé.
Une relation en 2FN peut contenir des informations redondantes. Donc, la 2FN ne permet
pas d’éviter toutes les redondances.
Exemple 1 :
Soit : Enseignant (NumEns, Non, Prénom, Grade, ChargeHoraire).
Avec : Grade → ChargeHoraire. La relation n’est pas en 3FN car un attribut non clé détermine un
attribut non clé.
Cette relation doit être scindée en deux relations :
Enseignant (NumEns, Non, Prénom, Grade)
Charge (Grade, ChargeHoraire).
Exemple 2 :
Soit : R(Vol, AéroportDépart, Appareil, AéroportArrivée).
Avec : Vol, AéroportDépart → AéroportArrivée et Vol →Appareil.
R n’est pas en 2FN car une partie de la clé détermine un attribut non clé. La décomposition de R
donne : R1(Vol →Appareil) et R2(Vol, AéroportDépart, AéroportArrivée).
La 3FN est insuffisante lorsqu’une relation admet plusieurs clés candidates, car des anomalies peuvent
avoir lieu. Pour cela, Boyce et Codd ont introduit la forme normale BCNF.
Notes :
- Il n’est pas toujours possible d’aboutir à une décomposition en BCNF sans perte
d’information et qui préserve les DFs.
- On mesure la qualité d'une relation par son degré de normalisation.
Figure 2.4. Différence entre Schéma de base de données et Base de données [12].
RELATION = TABLE
A1 B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
A4 B4 C4 D4
LIGNE A1 B1 C1 D1
1 élément
ATTRIBUT = COLONNE
A1
A2
A3
COLONNE
Attribut ou Propriété
SQL (Structured Query Langage ou bien langage de requête structuré) est un langage informatique
standard. Il permet la communication avec les SGBDRs et a été défini par l’ANSI (American National
Standard Institute) et l’ISO (International Standards Organization).
Le succès du langage SQL est dû essentiellement à sa simplicité et au fait qu’il s’appuie sur le schéma
conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la stratégie d’exécution [3].
SQL est un langage déclaratif qui permet d’interroger une base de données sans se soucier de la
représentation interne (physique) des données, de leur localisation, des chemins d’accès ou des
algorithmes nécessaires [4].
Néanmoins, le langage SQL ne possède pas la puissance d’un langage de programmation :
entrées/sorties, instructions conditionnelles, boucles et affectations. Pour certains traitements il est
donc nécessaire de coupler le langage SQL avec un langage de programmation plus complet [3].
SQL est un langage relationnel, c’est-à-dire, il manipule des tables via des requêtes et produisent des
tables.
Des versions différentes ont été proposées :
SQL 1 86 : la base.
SQL 1 89 : l’intégrité.
SQL 2 92 : la nouvelle norme.
SQL 3 99 : les évolutions objets.
SQL se compose de cinq parties (voir Tableau 2.1).
TCL
Set Transaction, Commit, rollback
DDL DML DCL
Create Insert Connect
Alter Update Grant
Drop Delete Revoke
Select
Programmation SQL
Declare, Fetch, Prepare, Describe, Execute
Data Definition Language (Langage de Définition des Données) est la partie du SQL
permettant la création des bases de données, etc.
Data Manipulation Language (Langage de Manipulation des Données) est la partie de
traitement des données (ajout, suppression, etc.).
Data Control Language (Langage de contrôle des Données).
TCL pour gestion des transactions.
La programmation SQL dynamique.
Interdictions des valeurs nulles (existence des valeurs) des attributs en utilisant le mot clé
NOT NULL.
Utilisation de la clause UNIQUE afin de s’assurer de l’unicité des valeurs des attributs (pas
de valeurs dupliquées dans les colonnes).
CHECK (condition) pour vérifier que l'attribut réalise la condition lors de l'insertion de n-
uplets.
PRIMARY KEY : Clé primaire.
DEFAULT value pour spécifier la valeur par défaut de l'attribut.
3.3.1.2. Contrainte table
La contrainte de table peut être :
FOREIGN KEY (colonne…) REFERENCES table [(colonne…)]
Soit les deux tables :
Personne Ordre
L’attribut "PersonID" est commun entre les deux tables et il est clé primaire dans la table "Personne".
L’attribut "PersonID" est une clé étrangère dans la table "Ordre"
La requête SQL suivante créer une clé étrangère dans la colonne "PersonID" lorsque la table "Ordre"
est créé :
CREATE TABLE Ordre (
OrdreID int NOT NULL,
NumeroOrdre int NOT NULL,
PersonID int,
PRIMARY KEY (OrdreID),
FOREIGN KEY (PersonID) REFERENCES Personne(PersonID)
);
Les types de données utilisés lors de la création des tables en SQL dans ACCESS sont comme suit :
- Booléen : BIT
- Nombre entier : SHORT(entier), SMALLINT(entier), LONG(enter long), INTEGER(entier
long).
- Nombre réel : SINGLE(réel simple), DOUBLE(réel double), Numeric(réel double).
- Monétaire : CURRENCY, MONEY.
- Date/heure : DATE, TIME, DATETIME.
- Texte : VARCHAR(255) : taille variante, CHAR(n) ou Text(n) : n est le nombre de caractères.
Exemple 1 :
Exemple 2 :
L’instruction ALTER TABLE permet de modifier la structure des tables SQL en ajoutant ou en
modifiant la structure d’une table. La syntaxe est comme suit :
ALTER TABLE nom-table modification ;
Plusieurs situations peuvent avoir lieu comme suit :
Syntaxe Explication
ALTER TABLE nom_table Insérer à la table un attribut att qui contient des
ADD att type NOT NULL ; données correspondant à type.
Exemple :
ALTER TABLE utilisateur
ADD adresse_rue VARCHAR(255) ;
ALTER TABLE nom_table Changer le nom d’un attribut en un nouveau nom.
RENAME COLUMN att TO nouvel
att;
Dans le cas où la liste des noms de colonnes est omise (n’est pas spécifiée), tous les attributs de la
relation doivent être fournis dans l’ordre de déclaration. Si uniquement quelques colonnes sont
spécifiées, les autres sont insérées avec la valeur NULL.
Exemples :
- Insertion d’une seule ligne aves spécification des colonnes.
INSERT INTO client (prenom, nom, ville, age) VALUES ('Talbi', 'Ahmed', 'Boumerdes', 20)
- Insertion d’une seule ligne sans spécification des colonnes.
INSERT INTO client VALUES ('Talbi', 'Ahmed', 'Boumerdes', 20)
- Insertion de plusieurs lignes.
INSERT INTO client (prenom, nom, ville, age)
VALUES
('Talbi', 'Ahmed', 'Boumerdes', 20),
('Mansouri', 'Ridha', 'Oran', 24),
('Salem', 'Omar', 'Alger', 29)
3.4.2. UPDATE
La commande UPDATE permet la mise à jour (Modification des lignes) des valeurs d’attributs de
tuples existants. La modification peut concerner tous les tuples de la table en fournissant des valeurs
à changées, ou en élaborant des valeurs via une expression. On peut définir des conditions de mise à
jour dans une clause WHERE qui est une clause optionnelle. La syntaxe de la commande UPDATE
est la suivante :
UPDATE nom_table
SET nom_col_1 = {expression_1 | ( SELECT ...) },
nom_col_2 = {expression_2 | ( SELECT ...) },
...
nom_col_n = {expression_n | ( SELECT ...) }
WHERE predicat
Exemple 1 :
Modifier l’email de l’auteur Ahmed Talbi.
UPDATE Auteur
SET Mail= 'Ahmed.Talbi@gmail.com'
WHERE Nom='Talbi' AND Prénom='Ahmed'
Exemple 2 :
Ajouter deux points aux étudiants qui ont une note inférieure à 8.
UPDATE Etudiant
SET note=note+2
WHERE note<8
3.4.3. DELETE
La commande DELETE permet d’enlever (supprimer) d’une relation des tuples existants. La
syntaxe de la commande est la suivante :
Tout les tuples pour lesquelles le prédicat est évalué à vrai sont supprimés. Par contre si la clause
WHERE ne figure pas dans la commande, tous les tuples de la relation sont supprimés.
Exemple 1 :
Supprimer toutes les lignes de la table Etudiant.
Exemple 2 :
Supprimer les étudiants dont la Moyenne est inférieure à 10.
Opérations de base permettent de déduire les autres. Il existe deux types d’opérations de base ;
opérations ensemblistes et opérations spécifiques.
Les opérations ensembliste ou binaire englobent : l’union, la différence et le produit cartésien.
Alors que les opérations spécifiques ou unaires concernent : la projection, la sélection, la thêta
jointure et la jointure naturelle.
Opérations dérivées (obtenues par combinaison des opérations de base). Parmi ses
opérations, on a : l’intersection, la jointure externe, la semi-jointure et la division.
2. Opérations de base
2.1. Opérations et opérateurs unaires (spécifiques)
Les opérations spécifiques sont les opérations unaires, cela veut dire que à partir d’une relation, une
autre est construite.
2.1.1. Sélection (Restriction)
La restriction (sélection) consiste à créer à partir d’une relation R1(A1, A2,.., An), une relation R2(A1,
A2,…,An) de même schéma, mais dont les tuples sont ceux de R1 vérifiant une condition C. Les
conditions sont du type :
<Attribut> <Opérateur> <Valeur>
Où l’opérateur appartient à l’ensemble {=, <, ≤, ≥, >, ≠}.
Notations
σcondition (R1)
R1[Condition]
RESTRICT(R1, Condition)
Notation graphique
σAge>30 (Client)
NumC Nom Age
101 Ahmed 38
104 Mohammed 40
2.1.2. Projection
La projection d’une relation R1(A1,…,An) sur les attributs (Ai,…,Am), m<n, consiste à créer une
relation R2 de schéma Ai,…,Am obtenus en supprimant de la relation R1 les attributs non-mentionnés
en opérandes et en éliminant les tuples en double risquant d’apparaître dans la nouvelle table.
Notations
Notation graphique
Employé Chef
NomE SalaireE NomC SalaireC
Taleb 20000 Dali 25000
Mansouri 10000 Tir 12000
Benmohammed 6000
Employé Chef
SlaireE>SalaireC
La jointure naturelle entre deux relations R1 et R2 qui n’ont pas forcément le même schéma, forme
une troisième relation R3 dont les attributs sont obtenus par concaténation des attributs de R1 et R2.
Les tuples de R3 sont ceux de R1 et de R2 ayant mêmes valeurs pour les attributs de même nom
(respectant une équijointure entre les attribut communs). Ces attributs communs ne sont pas dupliqués
dans la relation R3, mais fusionnés en une seule colonne.
Notation
JOIN(R1,R2)
Représentation graphique
R = Ami Cadeau
Nom Prénom Age Article Prix
Taleb Amira 6 Montre 320
Mansouri Ali 40 Parfum 120
Benmohammed Farid 20 Garniture 82
Merouani Mouna 6 Montre 320
WHERE permet de spécifier les critères de sélection. Cette clause indique les conditions que doivent
satisfaire les n-uplets pour faire partie du résultat. En SQL ces critères sont très riches, dans ce cours
nous nous contentons de présenter les plus utilisés. Notons que * veut dire toutes les colonnes.
Notons que l’omission de la clause WHERE nous permet d’afficher l'intégralité d'une table, et avoir
ainsi toutes les lignes et toutes les colonnes, on peut lister tous les attributs ou utiliser le caractère *
ayant la même signification.
Conditions possibles dans la clause WHERE :
Condition de base de comparaison à l'aide des opérateurs {=, ≠, <, >, <=, >=} :
Équivalent à :
WHERE monnaie IN (‘Euro’, ‘Dollar’, ‘Dinar’)
La condition EXISTS (sous-requête) renvoi vrai quand le résultat de la sous-requête n’est pas vide.
Le contraire NOT EXISTS (sous-requête).
Exemple : Soient les deux relations :
Fournisseur (FournisseurID, FournisseurNom, ContactNom, Address)
Produit (ProduitID, NomP, FournisseurID, CategoriID, Unite, Prix)
Donner les fournisseurs ayant fourni des produits dont le prix est inférieur à 20.
SELECT FournisseurNom
FROM Fournisseur
WHERE EXISTS (SELECT NomP FROM Produit WHERE Produit.FournissurID=
Fournissur.FournissurID AND Prix < 20);
La clause ORDER BY permet de trier les n-uplets du résultat d'une requête. Une liste d’attributs
servant de critère au tri doit suivre cette clause qui a la syntaxe suivante :
Les opérations de thêta jointure et de la jointure naturelle seront traduites dans la section 5.5.
Les opérations ensemblistes sont des opérations binaires (i.e. à partir de deux relations, une troisième
relation peut être construite).
2.2.1. Union
L’union de deux relations R1 et R2 ayant le même schéma, est une nouvelle relation R. Les tuples de
la nouvelle relation R appartiennent à : R1 ou R2 ou bien R1 et R2.
Notation
R= R1 ⋃ R2
UNION(R1,R2)
APPEND (RELATION1, RELATION2)
Modélisation graphique
Résultat
Relation1 Relation2
Exemple : Soit les deux relations Acteur1 et Acteur2 dont l’extension est comme suit.
Acteur1
Nom Prénom Datenaissance
DiCaprio Leonardo 11/11/1974
Spacey Kevin 26/ 07/1959
Eastwood Clint 31 /05/ 1930
Freeman Morgan 1/06/ 1937
Acteur2
Nom Prénom Datenaissance
Freeman Morgan 1/06/ 1937
Johnny Depp 9 /06/ 1963
Acteur1 ⋃Acteur2= UnionActeur
Nom Prénom Datenaissance
DiCaprio Leonardo 11/11/1974
Spacey Kevin 26/ 07/1959
Eastwood Clint 31 /05/ 1930
Freeman Morgan 1/06/ 1937
Johnny Depp 9 /06/ 1963
2.2.2. Différence
La différence est une opération qui porte sur deux relations R1 et R2 de même schéma servent à
construire une nouvelle relation R3 de même schéma. Les tuples de la relation résultante R3
appartiennent à R1 et n’appartiennent pas à R2. Il est à noter que l’ordre des relations opérandes est
important car la différence est un opérateur qui n’est pas commutatif (i.e. R2−R1≠R1−R2).
Notation
R3= R1 – R2
DIFFERENCE (R1, R2)
REMOVE (R1, R2)
MINUS (R1, R2)
Représentation graphique
Résultat
-
Relation1 Relation2
R1 X R2
PRODUCT (R1, R2)
TIMES (R1, R2)
Représentation graphique
Résultat
×
Relation1 Relation2
Remarque : Si les deux relations R1 et R2 ont un attribut de même nom, on renomme cet attribut ou
bien en spécifie le nom de la relation à laquelle il appartient (e.g., R1.A, R2.A).
3. Opérations dérivées
3.1. Intersection
L’intersection de deux relations de même schéma R1 et R2 est une nouvelle relation R3 de même
schéma ayant pour tuples ceux appartenant à R1 et à R2.
Notation
R1 ∩ R2
INTERSECT (R1, R2)
AND (R1, R2)
Modélisation graphique
Résultat
Relation1 Relation2
LivreB2
NLIV TITRE NOMAUT
101 La basilique de Paris Victorien
102 Le soir des fourmis Bertrand
210 Le roi de la forêt Aiglon
104 Les 10 mousquetaires Artagnan
le même nom qu’une seule fois. Les tuples de R3 sont ceux obtenus avec une jointure naturelle entre
R1 et R2 et ceux de R 1 et de R2 ne participants pas à la jointure en représentant par des valeurs nulles
ceux de l’autre relation.
Dans le but de conserver les tuples quand les relations jointes n’ont pas de projection identique sur
l’attribut de jointure, Codd a introduit les jointures externes qui sont nécessaires en particulier pour
composer des vues sans perte d’informations.
La jointure externe entre deux relations R1 et R2 génère une relation R3 qui a comme :
Commande
NumCommande NumClient Total
C001 1001 1800,00
C002 1003 2364,76
C003 1001 3000,00
Comme les clients 1002 et 1004 n’ont pas de commandes dans la table Commande, les attributs
NumCommande et Total prennent la valeur NULLE. Cette opération a permis de garder les clients
sans commande. Donc, elle est utile en pratique.
3.3. Semi jointure
La semi-jointure de deux relationsR1 et R2 est une relation R3 ayant le schéma de R1 et les tuples sont
ceux de R1 participant à la jointure naturelle entre R1 et R2. Ici encore, R1et R2 sont de schéma de
quelconque.
Notation
R1 R2
SEMI-JOIN (R1, R2)
Présentation graphique
Résultat
R1 R2
Figure 3.10. Modélisation graphique de la semi jointure.
Exemple :
Client
NumClient NomClient PrénomClient NumTel
1001 Mansouri Ali 032482223
1002 Ahmed Salem 032485760
1003 Mohammed Talbi 032488080
1004 Yacine Hafsa 032486666
Commande
NumCommande NumClient Total
C001 1001 1800,00
C002 1003 2364,76
Client Commande
NumClient NomClient PrénomClient NumTel
1001 Mansouri Ali 032482223
1003 Mohammed Talbi 032488080
Note : Lorsqu’il n’est pas nécessaire de conserver tous les attributs des deux relations (i.e. seuls les
attributs d’une des deux relations sont conservés en résultat), la semi-jointure est très utile afin
d’optimiser l’évaluation des questions.
3.4. Division
C’est une opération portant sur deux relations R1 et R2, telles que le schéma de R2 est inclus
strictement dans celui de R1. La relation générée R3 aura le schéma de R1 moins les attributs de R2 et
est formée de tous les tuples qui concaténés à chaque tuple de R2 donnent toujours un tuple de R1.
La relation R2 ne peut pas être vide. Si R1 est vide, la relation résultante de la division est vide.
L’intérêt de cette opération réside dans le fait qu’elle permet de rechercher dans une table les sous-
tables qui sont complétées par tous ceux d’une autre table et de répondre à des requêtes de la forme :
« quel que soit X, trouver Y ».
Notation
R1/R2
DIVISION(R1,R2)
Modélisation graphique
Résultat
÷
Relation1 Relation2
4. Le langage algébrique
Le langage algébrique est un langage d’interrogation de BDD. Les opérations de base de l’algèbre
relationnelle constituent un langage complet. Une expression algébrique peut être représentée sous
forme d’arbre dont : la racine correspond à la requête, les nœuds correspondent aux opérateurs
algébriques et les feuilles correspondent aux relations. L’objectif est de mieux comprendre
l’optimisation logique de requête.
Exemple : tiré des sources de la société Oracle.
EMP(ENO, ENOM, PROF, DATEEMB, SAL, COMM, DNO).
DEPT(DNO, DNOM, DIR, VILLE).
Donner les numéros des employés travaillant à Boston.
R= ΠENO(EMP⋈σVILLE=’Boston’(DEPT)).
L’arbre algébrique est :
5.2. Intersection
L'opérateur d'intersection permet d’obtenir les lignes communes de deux tables et se traduit en SQL
comme suit :
SELECT * FROM relation_1 INTERSECT SELECT * FROM relation_2
Exemple : Soient les relations
Donner les numéros des étudiants qui ont soutenu l'examen de numéro cours 02 et aussi l'examen
de numéro cours03.
INTERSECT
5.3. Différence
L'opérateur MINUS permet d’effectuer la différence entre deux tables et se traduit SQL par la requête
suivante :
SELECT * FROM relation_1 EXCEPT SELECT * FROM relation_2
Exemple :
Donner les numéros des étudiants qui ont soutenu l'examen de Numéro Cours 02 mais qui n'ont pas
soutenu l'examen de Numéro Cours 03.
(SELECT NumEtud FROM Examen WHERE NumCour = 02)
EXCEPT
(SELECT NumEtud FROM Examen WHERE NumCour = 03) ;
5.4. Produit cartésien (sans jointure)
Le produit cartésien Relation1 × Relation2 se traduit en SQL par une simple requête entre deux tables
comme suit :
Il peut aussi s'écrire en utilisant le mot-clé JOIN destiné aux jointures comme suit :
Remarque : SQL ne comporte pas d’opérateurs spécifiques permettant de réaliser directement une
division. Néanmoins, il est possible d’exprimer la sémantique de la division en utilisant les opérateurs
logiques.
5.5. Jointure de tables (condition de jointure)
La requête SELECT avec une seule relation dans la clause FROM permet de réaliser des sélections et
des projections. Par contre, avec plusieurs relations dans la clause FROM réalise une jointure (et
produit cartésiens). Afin d’exprimer des jointures avec SQL, il existe plusieurs manières dont la syntaxe
globale possible est la suivante :
table_1 [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] JOIN table_2 ON predicat [...]
table_1 [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] JOIN table_2 USING (colonnes) [...]
table_1 NATURAL [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] JOIN table_2 [...]
La thêta-jointure est exprimée avec une condition sur les colonnes communes des deux tables dans la
clause Where en utilisant une requête simple. La thêta-jointure utilise n’importe quel opérateur de
comparaison pour joindre deux tables.
Ou plus simplement :
SELECT ...
FROM <table gauche>
[INNER]JOIN <table droite>
ON <condition de jointure>
Exemple 1 :
Exemple 2 :
Exemple 3 :
Les numéros des fournisseurs et des clients qui sont situés dans la même ville. L’attribut ville est
commun entre les deux relations.
SELECT ...
FROM <table gauche>
NATURAL JOIN <table droite>
[USING <noms de colonnes>]
Soient les deux relations : Realisateur(id_real, nom, prenom) et Film(id_film, id_real, titre).
La jointure naturelle entre la table film et la table realisateur est comme suit:
Il est possible aussi d’exprimer la jointure naturelle avec une thêta-jointure en mentionnant dans la
clause USING les colonnes en commun comme suit :
Les jointures externes à gauche, à droite et globale sont obtenues avec la clause: left | right | full outer
join ...ON condition. La syntaxe est comme suit :
SELECT ...
FROM <table gauche>
LEFT | RIGHT | FULL OUTER JOIN <table droite>
ON condition de jointure
Exemple : Donner les avions, y compris ceux qui ne sont affectés à un vol.
SELECT Num
FROM Avion LEFT OUTER JOIN Vol
ON Avion.Num=Vol.Num;
6. Fonctions d’agrégat
Les fonctions d’agrégat sont un ensemble de fonctions qui permettent d’effectuer des statistiques sur
le résultat d’une requête [8] (MIN : minimum, MAX : maximum, SUM : somme, AVG : moyenne,
COUNT : nombre, etc.).
Exemples :
Soit la base de données suivante qu’on va utiliser pour exemplifier les fonctions d’agrégat :
Emp (Eno, Ename, Title, City).
Project (Pno, Pname, Budget, City).
Pay(Title, Salary).
Works (Eno, Pno, Resp, Dur).
Q1. Quel est le nombre des employés Constantinois ?
SELECT COUNT(*)
FROM Emp
WHERE City='Constantine';
Q2. Quel est le plus grand salaire et le plus petit salaire de toutes les professions ?
SELECT MAX(Salary), MIN(Salary)
FROM Pay;
Q3. Quels sont les noms des professions qui payent le plus et les salaires correspondant) ?
SELECT Title, Salary
FROM Pay
WHERE Salary = (SELECT MAX(Salary)
FROM Pay);
Q4. Donner les budgets totaux des budgets des projets d’Alger ?
SELECT SUM(Budget)
FROM Project
WHERE City = 'Alger';
Q 5. Quels sont les noms des projets dont le budget est supérieur au budget moyen?
SELECT Pname
FROM Project
WHERE Budget > (SELECT AVG(Budget)
FROM Project);
La clause GROUP BY permet de définir des groupes pour partitionner les n-uplets résultats en
fonction des valeurs de certains attributs en groupes homogènes.
Cette clause est utile lorsqu’on veut effectuer des calculs sur des groupes de lignes (e.g., le salaire moyen
le plus bas par profession, etc.). Notons que la clause GROUP BY doit être utilisée lorsqu’en utilise
des calculs au niveau de la clause SELECT sinon, le résultat n’aura pas un sens.
SELECT MIN(AVG(SAL))
FROM EMP
GROUP BY PROF ;
La clause HAVING spécifie un filtre (i.e. condition de regroupement des n-uplets) sur les résultats en
exprimant des conditions sur le groupe de lignes générés. Le but est de ne sélectionner que certains
groupes. Cette clause se place après la clause GROUP BY.
Une requête de groupement qui comporte une clause GROUP BY, peut contenir une clause WHERE
et une clause HAVING. Dans ce cas : D’abord, la clause WHERE est appliquée afin de sélectionner
les lignes. Puis, les groupes seront constitués à partir des lignes sélectionnées, ensuite, les fonctions de
groupe seront évaluées. Enfin, et la clause HAVING sera enfin appliquée pour sélectionner les
groupes. La condition ne porte pas sur chaque tuple de la table comme pour le where mais sur
l’ensemble des tuples d’un groupe.
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING <condition>
Exemple 1 : Soit la table “Achat” qui contient les achats de différents clients avec le coût du panier
pour chaque achat.
id Client tarif date_achat
1 Ahmed 102 2018-10-23
2 Ali 47 2018-10-27
3 Asma 18 2018-11-05
4 Asma 20 2018-11-14
5 Ahmed 160 2018-12-03
Q1 . Donner la liste des clients qui ont commandé plus de 40 Dinar, toute commande confondue.
Résultat :
client SUM(tarif)
Ahmed 262
Ali 47
Exemple 2 :
Soit la relation : Pays(Nom, Capital, Population, Surface, Continent).
Q 2. Donner la population totale par continent, tel que chaque continent a une population > 50.
SELECT continent, SUM(population)
FROM PAYS GROUP BY continent
HAVING SUM(pop) > 50 ;
Question : Donner deux avantages d’un SGBD par rapport à un système de gestion de fichiers
classique.
Exercice 1 :
Un avion a un numéro d'immatriculation, un type et une localisation (la ville de l'aéroport d'attache de
l'avion). Chaque type d'avion est décrit par son nom (Boeing 747, Airbus A340 ...), son poids, sa
capacité et son rayon d'action. Un technicien de la compagnie a un nom, un matricule, une adresse (la
ville de résidence), un numéro de téléphone, un salaire et est expert sur un ou plusieurs types d'avion
pendant une période donnée (date début et date fin). Un pilote est décrit par les mêmes attributs
qu'un technicien. De plus il doit passer un examen médical annuel. Chaque avion doit également passer
un certain nombre de tests de bon fonctionnement. Chaque test a un numéro qui l'identifie, un nom
et une valeur minimale (un seuil à atteindre). Nous souhaitons conserver la date et l'état de chacun des
tests. Chaque vol est commandé par un seul pilote et concerne un seul avion. Un vol a une ville de
départ (ville_dep) une ville d'arrivée (ville_arr) et une heure de départ (h_dep) une heure d'arrivée
(h_arr)
Q 1. Proposer un schéma conceptuel des données (modèle entités associations). Ne pas oublier les
cardinalités et de souligner les clés.
Q 2. Traduire le modèle obtenu en un modèle relationnel.
Exercice 2 :
Cantine Scolaire : La cuisine centrale à Montpellier voudrait gérer les données relatives à la cantine
scolaire à l'aide d'une base de données relationnelle. Elle explique que le prix du repas dépend de la
tranche dans laquelle l'enfant se situe et du type d'école (jardin d'enfant, maternelle, primaire). La
tranche est définie en fonction du quotient familial. Chaque enfant à une carte de cantine personnelle
avec un numéro. Les familles approvisionnent la carte d'un certain montant. La cuisine centrale
voudrait enregistrer tous les paiements journaliers, puis par la suite mettre à jour l'information du
montant total versé. Chaque jour, elle voudrait établir et archiver une liste des enfants ayant mangé à
la cantine ainsi que le menu du jour. Le menu est composé d'une entrée, d'un plat et d'un dessert.
Q 1. Elaborer le modèle entités associations.
Q 2. Traduire ce modèle en un modèle relationnel.
Une entreprise veut améliorer sa gestion du matériel ainsi que celle des commandes de ces clients.
Pour cela, elle envisage les orientations suivantes :
Elle veut connaître à tout instant la quantité disponible d’un matériel dans un magasin donné. Les
matériaux sont classés en catégories pour faciliter leur gestion.
On doit pouvoir connaître les composants d’un matériel et les matériaux dans lesquels on trouve un
composant donné. Lors d’une rupture de stock, un matériel peut être remplacé par un matériel de
substitution.
Chaque client a un seuil maximal de commandes autorisé (droit d’approvisionnement) par catégorie
de matériel pour une période donnée. Un client ne peut s’approvisionner que dans un magasin et un
seul. Une commande est définie par un numéro : elle concerne un seul client et différents matériaux,
et précise la quantité commandée.
Q 1. Elaborer le modèle entités associations.
Q 2. Traduire ce modèle en un modèle relationnel.
Exercice 4 :
Une société travaille avec des transporteurs et dessert 50 destinations. Lorsqu'une commande est
passée par un client, le responsable des expéditions se charge de l’enregistrer et de rechercher le
transporteur le plus adéquat pour transporter cette commande. Deux critères sont pris en compte
pour choisir le transporteur : la vitesse de livraison (i.e., distance entre le transporteur et le client) ou
le coût de livraison (i.e., tarifs (au km) de chaque transporteur concurrent). Note : la distance est
calculée ville à ville.
Dans le but de gagner du temps, le responsable des expéditions ainsi que son directeur ont été
convaincu de l'intérêt d'un système d'information. Ce dernier, permettra la gestion rapide des
commandes de la société.
Q 1. Donner le modèle entités associations.
Q 2. Traduire ce modèle en un modèle relationnel.
La relation suivante décrit des commandes faites par des clients, avec les produits et quantités
commandés par client.
Commandes (NumCom, DateCom, NumCli, AdrCli, NumProd, Prix, Qte)
Exercice 4 :
Soit la relation :
Projection (NoFilm, TitreFilm, DuréeFilm, NoSalle, CapacitéSalle, TypePlace, PrixPlace,
DateProjection, HeureDeb) exprime que le film NoFilm intitulé TitreFilm dure dureeFilm et est projeté
dans la salle NoSalle ayant une capacité Capacité places.
Le film est projeté à la date DateProjection à HeureDeb heures. Deux films peuvent avoir le même titre.
Le prix de la place est fonction de son type.
Exercice 5 :
Questions :
(a) Calculez la fermeture de A ; AC ; B ; C ; F sous F.
(b) Identifiez toutes les clés candidates de R.
Exercice 1 :
Soit la base de données relationnelle Appartement/ Ecole :
IMMEUBLE (ADI, NBETAGES, DATEC, PROP)
APPIM (ADI, NAPR, OCCUP, TYPE, SUPER, ETAGE)
PERSONNE (NOM, AGE, PROF, ADR, NAPR)
ÉCOLE (NOMEC, ADEC, NBCLASSES, DIR)
CLASSE (NOMEC, NCL, MAITRE, NBEL)
ENFANT (NOMP, PRENOM, AN, NOMEC, NCL)
Remarque : ADI : adresse d’immeuble, clé. NBETAGES : nombre d’étages d’un immeuble.
DATEC : date de construction. PROP : nom du propriétaire de l’immeuble qui est une personne
APPIM (Appartement). ADI : adresse d’immeuble. NAPR : numéro d’appartement.
OCCUP : occupant de l’appartement (nom de la personne). SUPER : superficie de l’appartement.
NOM : nom de personne, clé. PROF : profession de la personne (directeur d’école n’est pas une
profession). ADR : adresse de la résidence d’une personne. NBEL : nombre d’élèves dans la classe.
Question :
Exprimer les requêtes suivantes à l’aide de l’algèbre relationnelle.
1. Donner l’adresse des immeubles ayant plus de 10 étages et construits avant 1970.
2. Donner les noms des personnes qui habitent dans un immeuble dont ils sont propriétaires
(occupants et habitants).
3. Donner le nom et la profession des propriétaires d’immeubles où il y a des appartements
vides.
4. Donner la liste des occupants (nom, âge, profession) des immeubles possédés par Ahmed.
Exercie 1 : Soit la base de données d’un festival de musique : Dans une représentation peut
participer un ou plusieurs musiciens. Un musicien ne peut participer qu’à une seule représentation.
Exercice 2 :
Soit la base de données suivante :
1. Quelle est la composition de l'équipe Festina (Numéro, nom et pays des coureurs) ?
2. Quel est le nombre de kilomètres total du Tour de France 97 ?
3. Quel est le nombre de kilomètres total des étapes de type "Haute Montagne"?
4. Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
5. Quels sont les noms des coureurs qui ont participé à toutes les étapes ?
6. Quel est le classement général des coureurs (nom, code équipe, code pays et temps des
coureurs) à l'issue des 13 premières étapes sachant que les bonifications ont été intégrées
dans les temps réalisés à chaque étape ?
7. Quel est le classement par équipe à l'issue des 13 premières étapes (nom et temps des
équipes) ?
Exercice 4 :
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d'une promotion d'étudiants:
Remarque : les clés primaires sont soulignées et les clés étrangères sont marquées par Exprimez en
SQL les requêtes suivantes :
1. Les informations relatives aux étudiants (Code, Nom et Date de naissance) selon l’ordre
alphabétique croisant du nom
2. Les noms et les grades des enseignants de la matière dont le nom est ‘BD’.
3. La liste distincte formée des noms et les coefficients des différentes matières qui sont
enseignées par des enseignants de grade ‘Grd3’.
4. La liste des matières (Nom et Coefficient) qui sont suivies par l’étudiant de code ‘Et321’.
5. Le nombre d’enseignants de la matière dont le nom est ‘Informatique’
Exercice 6 :
Soit la base de données intitulée « gestion_projet » permettant de gérer les projets relatifs au
développement de logiciels. Elle est décrite par la représentation textuelle simplifiée suivante :
1. D’afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion
de stock », triés dans l’ordre décroissant des prix
2. D’afficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la
colonne sera « cours total du projet ».
3. Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock »
4. Afficher les projets qui ont plus que 5 logiciels
5. Les numéros et noms des développeurs qui ont participés dans tous les projets.
6. Les numéros de projets dans lesquelles tous les développeurs y participent dans sa réalisation