Académique Documents
Professionnel Documents
Culture Documents
Enseignant : M. KEUMFACK
Programme de cours :
1 Objectifs fondamentaux d’une Base de données
2 Modélisation des données
3 Le Modèle relationnel
4 La Normalisation
5 Le Langage SQL
Présentation globale :
Ce support de cours s’adresse à tous ceux qui veulent concevoir, implanter, alimenter et
interroger une base de données (BD), et intégrer cette BD à une application. Dans un contexte
académique, il s’adresse aux étudiants en deuxième année. Dans un contexte professionnel, le
contenu du cours présente tout ce qu’il est nécessaire de maîtriser quand on conçoit une BD ou
que l’on développe des applications qui s’appuient sur une BD. Au-delà de ce public principal,
toute personne désirant comprendre les principes, méthodes et outils des systèmes de gestion
de données trouvera un intérêt à lire les chapitres consacrés à la conception, à l’interrogation et
à la programmation SQL, pour ne citer que les principaux.
Objectifs généraux :
Objectifs spécifiques:
Ce cours présente de façon claire et didactique toutes les données qui président à la
conception d’une base de données, à la mise en pratique et à la programmation BD. Ensuite
après une présentation générale des BD et de ces différents langages, il propose pour les
différents constituants un mode de fonctionnement et un moyen de gestion des ressources
associées ainsi que leurs caractéristiques.
par M. KEUMFACK P a g e 1 | 51
Base de données et SQL
Chapitre 1
Objectifs fondamentaux d’une Base de données
Objectif général : À la fin de ce chapitre, l’étudiant doit être capable de définir une base de
données et d’énumérer les rôles d'un SGBD, ainsi que les différents types qui existent
actuellement.
Dès les débuts de l’informatique, l’un des soucis majeurs de l’utilisateur fut de pouvoir
stocker massivement des données et de pouvoir en disposer régulièrement afin d’en extraire de
nouvelles informations, de les consulter et de les modifier. De 1950 à 1960, seul existait le
fichier pour satisfaire à cette demande. Les applications devaient donc être complétées par une
programmation qui se faisait souvent en langage machine (assembleur). Les SGFs ont montré
une insuffisance et des inconvénients ce qui a mené à l’apparition des bases de données dès
1960.
2. enjeux
Les bases de données ont pris une place importante en informatique, et particulièrement
dans le domaine de la gestion. L'étude des bases de données a conduit au développement de
concepts, méthodes et algorithmes spécifiques, notamment pour gérer les données en mémoire
secondaire (i.e. disques durs). En effet, dès l'origine de la discipline, les informaticiens ont
observé que la taille de la RAM ne permettait pas de charger l'ensemble d'une base de données
en mémoire. Car le volume des données ne cesse de s'accroître sous la poussée des nouvelles
technologies du WEB.
par M. KEUMFACK P a g e 2 | 51
Base de données et SQL
Il s’agit ici du Système qui permettant de gérer une BD partagée par plusieurs utilisateurs
simultanément.
3.1 Objectifs
Des objectifs principaux ont été fixés aux SGBD dès l'origine de ceux-ci, et ce, afin de
résoudre les problèmes causés par la démarche classique. Ces objectifs sont les suivants :
Indépendance physique : La façon dont les données sont définies doit être
indépendante des structures de stockage utilisées.
Indépendance logique : Un même ensemble de données peut être vu différemment
par des utilisateurs différents. Toutes ces visions personnelles des données doivent
être intégrées dans une vision globale.
Accès aux données : L’accès aux données se fait par l'intermédiaire d'un Langage
de Manipulation de Données (LMD). Il est crucial que ce langage permette d'obtenir
des réponses aux requêtes en un temps « raisonnable ». Le LMD doit donc être
optimisé, minimiser le nombre d'accès disques, et tout cela de façon totalement
transparente pour l'utilisateur.
Administration centralisée des données (intégration) : Toutes les données
doivent être centralisées dans un réservoir unique commun à toutes les applications.
En effet, des visions différentes des données (entre autres) se résolvent plus
facilement si les données sont administrées de façon centralisée.
Non-redondance des données : Afin d'éviter les problèmes lors des mises à jour,
chaque donnée ne doit être présente qu'une seule fois dans la base.
Cohérence des données : Les données sont soumises à un certain nombre de
contraintes d'intégrité qui définissent un état cohérent de la base. Elles doivent
pouvoir être exprimées simplement et vérifiées automatiquement à chaque insertion,
modification ou suppression des données. Les contraintes d'intégrité sont décrites
dans le Langage de Description de Données (LDD).
Partage des données : Il s'agit de permettre à plusieurs utilisateurs d'accéder aux
mêmes données au même moment de manière transparente. Si ce problème est
simple à résoudre quand il s'agit uniquement d'interrogations, cela ne l'est plus quand
il s'agit de modifications dans un contexte multiutilisateur, car il faut : permettre à
deux (ou plus) utilisateurs de modifier la même donnée « en même temps » et assurer
par M. KEUMFACK P a g e 3 | 51
Base de données et SQL
par M. KEUMFACK P a g e 4 | 51
Base de données et SQL
a. Modèle hiérarchique
Une base de données hiérarchique est une forme de système de gestion de base de
données qui lie des enregistrements dans une structure arborescente de façon à ce que chaque
enregistrement n'ait qu'un seul possesseur (par exemple, une paire de chaussures n'appartient
qu'à une seule personne).
Modèle hiérarchique.
Limites
Comme on le voit dans l'exemple cité plus haut, l'organisation hiérarchique des bases de
données est particulièrement adaptée à la modélisation de nomenclatures, mais si le principe
de relation « 1 vers N » n'est pas respecté (le canard n'appartient bien qu'à une seule famille
mais, par exemple, un malade peut avoir plusieurs médecins et un médecin a, a priori, plusieurs
patients), alors la hiérarchie doit être transformée en un réseau.
b. Modèle réseau
Le modèle réseau est en mesure de lever de nombreuses difficultés du modèle
hiérarchique grâce à la possibilité d'établir des liaisons de type n-n, les liens entre objets pouvant
exister sans restriction. Pour retrouver une donnée dans une telle modélisation, il faut connaître
le chemin d'accès (les liens) ce qui rend les programmes dépendants de la structure de données
Modèle réseau
par M. KEUMFACK P a g e 5 | 51
Base de données et SQL
c. Modèle relationnel
En informatique, une base de données relationnelle est une base de données où l'information
est organisée dans des tableaux à deux dimensions appelés des relations ou tables1, selon le
modèle introduit par Edgar F. Codd en 1970. Selon ce modèle relationnel, une base de données
consiste en une ou plusieurs relations. Les lignes de ces relations sont appelées des n-uplets ou
enregistrements. Les noms des colonnes sont appelés des attributs.
Les logiciels qui permettent de créer, utiliser et maintenir des bases de données
relationnelles sont des systèmes de gestion de base de données relationnels.
Pratiquement tous les systèmes relationnels utilisent le langage SQL pour interroger les
bases de données. Ce langage permet de demander des opérations d'algèbre Relationnelle telles
que l'intersection, la sélection, la jointure …
d. Modèle objet
La notion de bases de données objet ou relationnel-objet est plus récente et encore en phase
de recherche et de développement. Elle sera très probablement ajoutée au modèle relationnel.
Exercice 1 : Établissez le lien qui existe entre une base de données et un SGBD.
Exercice 2 : Quelles différences faites-vous entre un fichier et une base de données.
par M. KEUMFACK P a g e 6 | 51
Base de données et SQL
Chapitre 2
Modélisation des données
Le modèle entité/association a été proposé au milieu des années 1970 par le chercheur
Chen. Il se base sur un ensemble de symboles graphiques.
I- MERISE
MERISE (Méthode d'Étude et de Réalisation Informatique pour les Systèmes
d'Entreprise) est certainement le langage de spécification le plus répandu dans la communauté
de l'informatique des systèmes d'information, et plus particulièrement dans le domaine des
bases de données. Une représentation Merise permet de valider des choix par rapport aux
objectifs, de quantifier les solutions retenues, de mettre en œuvre des techniques d'optimisation
et enfin de guider jusqu'à l'implémentation. Reconnu comme standard, Merise devient un outil
de communication. En effet, Merise réussit le compromis difficile entre le souci d'une
modélisation précise et formelle, et la capacité d'offrir un outil et un moyen de communication
accessible aux non-informaticiens.
Un des concepts clés de la méthode Merise est la séparation des données et des traitements.
Cette méthode est donc parfaitement adaptée à la modélisation des problèmes abordés d'un
point de vue fonctionnel. Les données représentent la statique du système d'information et les
traitements sa dynamique. L'expression conceptuelle des données conduit à une modélisation
par M. KEUMFACK P a g e 7 | 51
Base de données et SQL
Merise propose une démarche, dite par niveaux, Ces niveaux de modélisation sont
organisés dans une double approche données/traitements. Les trois niveaux de représentation
des données, puisque ce sont eux qui nous intéressent, sont détaillés ci-dessous.
Niveau conceptuel : le modèle conceptuel des données (MCD) décrit les entités du monde réel,
en termes d'objets, de propriétés et de relations, indépendamment de toute technique
d'organisation et d'implantation des données. Ce modèle se concrétise par un schéma entités-
associations représentant la structure du système d'information, du point de vue des données.
Niveau logique : le modèle logique des données (MLD) précise le modèle conceptuel par des
choix organisationnels. Il s'agit d'une transcription (également appelée dérivation) du MCD
dans un formalisme adapté à une implémentation ultérieure, au niveau physique, sous forme de
base de données relationnelle ou réseau, ou autres. Les choix techniques d'implémentation
(choix d'un SGBD) ne seront effectués qu'au niveau suivant.
Niveau physique : le modèle physique des données (MPD) permet d'établir la manière concrète
dont le système sera mis en place (SGBD retenu).
– l’objet ou entité,
– l’association ou relation,
– la propriété (attribut).
L’objet est une entité ayant une existence propre. L’association est un lien ou relation entre
objets sans existence propre. La propriété est la plus petite donnée d’information décrivant un
objet ou une association.
1- Entité
On appelle entité un objet concret ou abstrait ayant une existence propre présentant un
intérêt particulier pour les informations à modéliser.
par M. KEUMFACK P a g e 8 | 51
Base de données et SQL
Le domaine d’application est perçu comme étant constitué d’entités concrètes ou abstraites.
Ainsi, dans le contexte du commerce, on peut cerner un domaine d’application dans lequel on
repère des clients, des commandes et des produits. On considère que chacun d’eux est une
entité du domaine. On pourra donc représenter graphiquement les entités Client, Commande
et Produit comme suit :
Une occurrence d’une entité est un élément individualisé appartenant à cette entité.
2- Association
Une association (ou une relation) est un lien entre deux ou plusieurs entités. Une
association est dépourvue d’existence propre.
Une association n’a d’existence qu’à travers les entités qu’elle relie. Elle peut relier deux entités
(association binaire) ou trois entités (association ternaire) ou plus (association n-aires).
Client Commande
NomCl DateC
par M. KEUMFACK P a g e 9 | 51
Base de données et SQL
Personne
3- Attribut
Un attribut ou une propriété est une donnée élémentaire que l’on perçoit sur une entité ou
sur une association entre objets.
par M. KEUMFACK P a g e 10 | 51
Base de données et SQL
Chaque client est caractérisé par un numéro et un nom. On modélisera ces faits en dotant
l’entité CLIENT des attributs NumCl, NomCl.
On spécifiera le type de chaque attribut : numérique, caractère, date… ainsi que sa longueur.
Un attribut d’une association est une propriété qui dépend de toutes les entités intervenant
dans l’association. Dans ce cas, l’association est dite porteuse de données.
4- Identifiant
Un identifiant, dit parfois clé, d’une entité est constitué par un ou plusieurs de ses attributs
dont les valeurs doivent identifier de manière unique cette entité : l’identifiant d’une entité est
un attribut particulier de l’entité tel qu’à chaque valeur de la propriété corresponde une et
une seule occurrence de l’entité.
5- Cardinalité
La cardinalité d’une entité par rapport à une association s’exprime par deux nombres
appelés cardinalité minimale et cardinalité maximale. La cardinalité d'une relation est le
nombre de fois qu’une entité est en relation avec une autre.
La cardinalité minimale est le nombre de fois minimum qu’une occurrence d’une entité
participe aux occurrences de l’association.
par M. KEUMFACK P a g e 11 | 51
Base de données et SQL
Si la cardinalité minimale est égale à 0, c’est qu’il existe parmi toutes les occurrences de
l’entité au moins une occurrence ne participant pas aux occurrences de l’association.
Un client passe au minimum une commande donc la cardinalité est égale à 1.N. Par contre,
une commande n’est passée que par un seul client d’où la cardinalité 1.1.
Client Commande
1.N 1.1
NumCl P asser NumC
NomCl DateC
AdrCl
7- Généralisation et hiérarchie
Un ensemble d’entités E1 est un sous-ensemble de E2 si toute occurrence de E1 est aussi une
occurrence de E2. L’ensemble d’entités E1 hérite des attributs de E2.
Un ensemble d’entités E est une généralisation de E1, E2,… En si chaque occurrence de E est
aussi une occurrence d’une et une seule entité E1, E2,… En. Les ensembles E1, E2,… En sont
des spécialisations de l’ensemble d’entités E. Les ensembles d’entité E1, E2,… En héritent des
attributs de E et possèdent en outre des attributs spécifiques qui expriment leur spécialisation.
par M. KEUMFACK P a g e 12 | 51
Base de données et SQL
Exemple1 : l’entité EMPLOYE est une généralisation des entités INGENIEUR, PILOTE,
TECHNICIEN.
8- Diagramme Entité/Association
Après l’analyse et l’étude du cas, le concepteur est capable de tracer le modèle E/A, et ce en
représentant les entités rencontrées par des rectangles contenant les attributs et l’identifiant,
les associations qui les relient par des ellipses, en spécifiant les cardinalités.
Pour ce faire, il faut préparer le dictionnaire des données. Le dictionnaire des données est la
liste les entités et leurs attributs, en spécifiant le domaine de chacun ainsi que leur catégorie :
- données élémentaires (information stockée)
- données d’information déduite ou calculée d’utilisation fréquente (ce qui évite de refaire
le calcul plusieurs fois) ainsi que les règles de calcul
- données calculées de type situation ou historique (total HT des commandes par
mois...)
- paramètres utilisés dans des cas particuliers (TVA) ...
Et pour avoir un modèle E/A cohérent, il faut respecter des règles de validation (vérification/
normalisation)
par M. KEUMFACK P a g e 13 | 51
Base de données et SQL
Règle 2 : Toutes les propriétés d’une entité, autres que l’identifiant, doivent être en
dépendance fonctionnelle complète et directe de l’identifiant.
Règle 4 : Un attribut ne peut apparaître qu’une seule fois dans un même modèle E/A,
c’est ainsi qu’il ne peut qualifier qu’une seule entité ou une association.
Règle 5 : Les attributs qui sont le résultat d’un calcul ne doivent pas, en principe,
figurer dans un modèle E/A sauf s’ils sont indispensables à la compréhension de celui-ci.
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.
9- Application
Le propriétaire d’un garage de voitures souhaite utiliser une base de données pour traiter les
informations concernant les clients, leurs voitures et les réparations effectuées sur ces voitures.
On connaît :
par M. KEUMFACK P a g e 14 | 51
Base de données et SQL
par M. KEUMFACK P a g e 15 | 51
Base de données et SQL
Chapitre 3
Le Modèle relationnel
Comprendre les concepts de base du modèle relationnel (domaine, relation, schéma, clé
primaire, clé étrangère...)
Le modèle relationnel a été proposé par Codd au début des années 70, avec comme objectif
essentiel l’accroissement de l’indépendance des programmes vis-à-vis de la représentation des
données.
I- Concepts de base
1- Domaine
Un domaine c’est un ensemble de valeurs atomiques (indivisibles) caractérisées par un nom.
Un domaine peut être défini en extension, en donnant la liste des valeurs composantes, ou en
intention en définissant une propriété caractéristique des valeurs du domaine.
Exemple : D1= {chaîne de caractères}
D2= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}
2- Attribut
Un attribut est une variable prenant ses valeurs dans un domaine.
Exemple :
Domaine (Nom)= {chaîne de caractères}
Domaine (jour)= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}
3- 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.
par M. KEUMFACK P a g e 16 | 51
Base de données et SQL
Chaque tuple est unique. Les duplications ne sont pas autorisées. L’ordre des tuples est
indifférent.
Exemple:
Relation Client
Exemple:
Le schéma de Client (voir exemple paragraphe précédent) est R = (NumCl, NomCl, AdrCl).
On pourra parfois attacher à une relation un ensemble P de propriétés que doit vérifier chacun
de ses tuples. Ces propriétés sont appelées Contraintes d’intégrité. A un schéma de relation sont
donc rattachées des contraintes d’intégrité.
Exemples :
• CLIENT (NumCl, NomCl, AdrCl, DateNaissance)
Pour ce schéma de relation, la date de naissance du client doit être inférieure à la date du jour.
par M. KEUMFACK P a g e 17 | 51
Base de données et SQL
Une clé peut être composée d’un seul attribut ou d’une liste d’attributs qui caractérise un tuple
(nuplet) de la relation de manière unique.
Une relation peut avoir plusieurs clés. Une clé comportant un minimum d’attributs sera choisie
comme étant clé primaire, les autres clés possibles sont appelées clés candidates. Par
convention, la clé primaire d’une relation est soulignée dans un schéma de relation.
Remarque : si on choisit pour clé (NomCl, AdrCl), la modélisation ne permet pas des
homonymes habitant la même ville.
7- Clé étrangère
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. Toutes les valeurs des clés étrangères
apparaissent dans une autre relation comme valeurs d’une clé. C’est une contrainte d’intégrité
référentielle.
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.
par M. KEUMFACK P a g e 18 | 51
Base de données et SQL
L’attribut NumCl dans la table Commande est une clé étrangère. Il prend ses valeurs dans le
domaine de valeurs de l'attribut NumCl qui se trouve, dans le schéma de relation Client. Une
commande est toujours passée par un Client existant dans la base de données.
Règle 1
Chaque entité qui figure dans le diagramme E/A est traduite par une relation de
même nom dans laquelle es attributs traduisent les propriétés de l'entité, et la clé
primaire traduit l'identifiant de l'entité
Exemple :
Client
par M. KEUMFACK P a g e 19 | 51
Base de données et SQL
Règle 2 :
Exemple :
Client Commande
1.N P asser 1.1
NumCl NumC
NomCl DateC
MontantC
AdrCl
Pour les associations de type N : N, il faut créer une nouvelle relation qui contiendra :
- L’identifiant de la 1ère entité
- L’identifiant de la 2ème entité
- Les données supplémentaires La clé de cette nouvelle relation est formée par la
concaténation de deux identifiants.
Exemple: :
Client Produit
par M. KEUMFACK P a g e 20 | 51
Base de données et SQL
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. Dans ce cas,
il peut y avoir duplication de certaines données. Certains problèmes d'incohérence peuvent alors
avoir lieu.
par M. KEUMFACK P a g e 21 | 51
Base de données et SQL
Exemple :
par M. KEUMFACK P a g e 22 | 51
Base de données et SQL
Chapitre 4
La Normalisation
Un schéma de relation est décrit par la liste de ses attributs et de leurs contraintes
d’intégrité éventuelles. La constitution de la liste d’attributs du schéma ne peut pas se faire
n’importe comment pour ne pas occasionner de redondance, avec toutes ses implications (perte
de place, risques d’incohérence et de perte d’informations). Les formes normales des relations
et les mécanismes pour les construire permettent d’obtenir des relations non redondantes. Ces
mécanismes sont fondés sur les notions de clés de relations et de dépendances entre données.
Ces dernières fournissent les conditions d’application d’un processus dit de normalisation qui
mène à des formes « correctes » de relations qui sont les formes normales.
PRODUIT (Refproduit, LibelleProduit, PU, Quantité, NumService, Adresse, Capacité) qui est
visiblement redondante.
RefProduit LibelleProduit PU Quantité NumService Adresse Capacité
• Redondance : un produit apparaît autant de fois qu’il sera livré par un service
• Mise à jour : faute de redondance, les mises à jour conduiront à des risques
d’incohérence et de non intégrité.
par M. KEUMFACK P a g e 23 | 51
Base de données et SQL
• Chaque relation décrit une information élémentaire avec les seuls attributs qui lui sont
directement liés
• Il n'y a pas de redondance d’information qui peuvent produire des problèmes de mise à
jour
I- Dépendance fonctionnelle
1- Définition
Un attribut ou une liste d’attributs Y dépend fonctionnellement d’un attribut ou d’une
liste d’attributs X dans une relation R, si étant donnée une valeur de X, il ne lui est associé
qu’une seule valeur de Y dans tout tuple de R.
Exemple
Propriété 1 : Réflexivité
Y⊆X ⇒ X→ Y
Propriété 2 : Augmentation
par M. KEUMFACK P a g e 24 | 51
Base de données et SQL
X→ Y ⇒ X,Z→ Y,Z
Si X détermine Y, les deux ensembles d’attributs peuvent être enrichis par un même troisième.
Propriété 3 : Transitivité
X → Y et Y → Z ⇒ X → Z.
Propriété 4 : Union
X → Y et X → Z ⇒ X → Y, Z
Propriété 5 : Pseudo-transitivité
X → Y et W, Y → Z ⇒ W,X → Z
Propriété 6 : Décomposition
X → Y et Z ⊆ Y ⇒ X→ Z
X→Y est une dépendance fonctionnelle transitive s’il existe un attribut Z tel que X→Z et Z→Y
Formellement :
Un attribut ou une liste d’attributs X est une clé pour la relation R(X,Y,Z) si
par M. KEUMFACK P a g e 25 | 51
Base de données et SQL
• et X → Y, Z est élémentaire.
Une relation peut avoir plusieurs clés. Une clé sera choisie et désignée comme clé primaire.
Un attribut d’une relation R est appelé attribut clé s’il appartient au moins à une clé de R.
Un attribut est dit attribut non clé s’il n’appartient pas à une clé de R.
- Tous les attributs ne contiennent qu’une seule valeur atomique (non divisible).
- Les attributs ne contiennent pas de valeurs répétitives.
Exemple :
Cette relation n’est pas en première forme normale, car Adresse n’est pas atomique. En effet
voici une représentation d’un fichier ainsi décrit :
par M. KEUMFACK P a g e 26 | 51
Base de données et SQL
Cette représentation si elle était mise en pratique générerait un accès aux données plus lent.
Le simple fait de vouloir extraire les habitants d’une ville précise devra mettre en œuvre des
procédures d’extraction de souschaînes sans fournir de garantie quant au résultat retourné.
Maintenant, récupérer les habitants d’une ville précise ne pose plus aucun problème, une simple
requête SQL y parviendra de façon rapide et fiable.
Autrement dit, toute propriété de la relation doit dépendre intégralement de toute la clé.
Exemple :
Est-elle en deuxième forme normale ? Non, car la propriété Désignation ne dépend pas
intégralement de la clé (Numcli, CodeArticle, Date).
par M. KEUMFACK P a g e 27 | 51
Base de données et SQL
Commandes :
1 Art1 28/02/2009 5
3 Art2 28/02/2009 9
5 Art3 28/02/2009 10
6 Art41 28/02/2009 15
Articles :
CodeArticle Désignation
par M. KEUMFACK P a g e 28 | 51
Base de données et SQL
Art41 Bouteille
d’acide
La troisième forme normale permettra d’éliminer les redondances dues aux dépendances
transitives.
Autrement dit, tous les attributs n’appartenant pas à la clé ne dépendent pas d’un attribut non-
clé. Exemple :
1 C1 Baptiste Art25
3 C5 Savary Art20
5 C2 Martinez Art10
6 C1 Baptiste Art15
1 C1 Art25
3 C5 Art20
5 C2 Art10
6 C1 Art15
Clients :
C1 Baptiste
C2 Martinez
C5 Savary
En d’autres termes une relation est en BCNF, si elle est en 3FN et qu’aucun attribut membre de
la clé ne dépend fonctionnellement d’un attribut non membre de la clé.
Exemple 1:
CodePostal → Ville
Elle est en 3FN (car elle est en deuxième forme normale, et tout attribut n’appartenant pas à
une clé ne dépendra pas d’un attribut non clé).
Cette relation n’est pas en BCNF car l’attribut ‘’Ville’’ (qui fait partie de la clé) dépend
fonctionnellement de CodePostal (qui est un attribut non membre de la clé).
par M. KEUMFACK P a g e 30 | 51
Base de données et SQL
Exemple 2:
Dans ces relations, nous n’avons aucun attribut clé qui dépend d’un attribut non clé. Donc elles
sont en BCNF.
Conclusion
Ce chapitre a été consacré à l’étude du processus de normalisation et à la présentation
des différents types de dépendances fonctionnelles et de leurs types. Ces dépendances
fonctionnelles sont vues comme des contraintes d’intégrité. Elles servent à réduire la
redondance des données et à éviter des risques d’anomalies à travers des schémas relationnels
« corrects ».
Dans le chapitre suivant nous allons étudier les possibilités d’interrogation et de création de
schémas relationnels normalisés à travers le langage SQL.
par M. KEUMFACK P a g e 31 | 51
Base de données et SQL
Chapitre 5
Le Langage SQL
Exécuter les tâches de base de la gestion des données, telle que l’insertion, la
modification et la suppression de données des tables
L’approche déclarative est beaucoup plus simple conceptuellement : elle consiste à décrire
les propriétés du point d’arrivée (le résultat) en fonction de celles du point de départ (les
données de la base, dans notre cas). La description de ces propriétés se fait classiquement par
des formules logiques qui indiquent commet l’existence d’un fait f1 au départ implique
l’existence d’un fait f2 à l’arrivée.
par M. KEUMFACK P a g e 32 | 51
Base de données et SQL
standard aux bases de données relationnelles. Ce langage permet l’accès aux données et se
compose de quatre sous-ensembles :
I- Principales Instructions
- Définitions (LDD)
- INTERROGATIONS (LMD)
SELECT
GRANT, REVOKE
- Gestion de transactions
COMMIT, ROLLBACK
par M. KEUMFACK P a g e 33 | 51
Base de données et SQL
Syntaxe :
nom_colonne_ntype_colonne_n) ;
Exemple :
A savoir :
• NOT NULL : empêche d’enregistrer une valeur nulle pour une colonne.
• DEFAULT : attribuer une valeur par défaut si aucune donnée n’est
indiquée pour cette colonne lors de l’ajout d’une ligne dans la table.
• PRIMARY KEY : indiquer si cette colonne est considérée comme clé
primaire.
• FOREIGN KEY : indique si cette colonne est considérée comme une clé
étrangère.
par M. KEUMFACK P a g e 34 | 51
Base de données et SQL
Exemple :
vue ;
3- Création d’index
La création d’un index permet d’accélérer les recherches d’informations dans la base. La
ligne est retrouvée instantanément si la recherche peut utiliser un index, sinon la recherche se
fait séquentiellement. Une autre utilité de la création d’index est de garantir l’unicité de la clé
en utilisant l’option UNIQUE.
Syntaxe :
par M. KEUMFACK P a g e 35 | 51
Base de données et SQL
Syntaxe :
nom_colonne n type_colonne n) ;
Exemple
Exemple
DROP nom_table ;
1- Syntaxe générale
La recherche d’information dans une base de données s’effectue à l’aide de la commande
SQL SELECT.
par M. KEUMFACK P a g e 36 | 51
Base de données et SQL
Dans ce cours, nous présenterons une syntaxe simplifiée de l’instruction SELECT ainsi
que d’autres.
SQL SELECT
L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données.
Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableau de
résultat. Cette commande peut sélectionner une ou plusieurs colonnes d’une table.
Commande basique
L’utilisation basique de cette commande s’effectue de la manière suivante :
SELECT nom_du_champ
FROM nom_du_tableau
Exemple
Imaginons une base de données appelée « client » qui contient des informations sur les clients d’une
entreprise.
Table « client » :
Si l’on veut avoir la liste de toutes les villes des clients, il suffit d’effectuer la requête suivante
:
SELECT ville
FROM client
par M. KEUMFACK P a g e 37 | 51
Base de données et SQL
Résultat :
ville
Kribi
Douala
Yaoundé
Baham
Edéa
FROM client
Résultat :
prénom nom
Pierre Kamdem
Sabrina Eloa
Julien Martin
David Bekono
Marie Lenoc
Cette requête retourne exactement les mêmes colonnes qu’il y a dans la base de données. Dans notre
cas, le résultat sera donc :
par M. KEUMFACK P a g e 38 | 51
Base de données et SQL
NB : Il y a des avantages et des inconvénients à l’utiliser. Pour en savoir plus sur le sujet il est
recommandé de lire l’article avantage et inconvénient du sélecteur étoile.
Un requête SELECT peut devenir assez longue. Juste à titre informatif, voici une requête
SELECT qui possède presque toutes les commandes possibles :
SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
ORDER BY expression
LIMIT count
OFFSET start
A noter : cette requête imaginaire sert principale d’aide-mémoire pour savoir dans quel ordre sont utilisé
chacun des commandes au sein d’une requête SELECT.
par M. KEUMFACK P a g e 39 | 51
Base de données et SQL
SQL DISTINCT
L’utilisation de la commande SELECT en SQL permet de lire toutes les données d’une ou
plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles. Pour éviter des
redondances dans les résultats il faut simplement ajouter DISTINCT après le mot SELECT.
Commande basique
L’utilisation basique de cette commande consiste alors à effectuer la requête suivante :
FROM nom_du_tableau
FROM nom_du_tableau
Exemple
Prenons le cas concret d’une table « client » qui contient des noms et prénoms :
1 Pierre Kamdem
2 Sabrina Eloa
3 David Durand
4 Pierre Lenoc
5 Marie Lenoc
En utilisant seulement SELECT tous les noms sont retournés, or la table contient plusieurs fois le
même prénom (cf. Pierre). Pour sélectionner uniquement les prénoms uniques il faut utiliser la
requête suivante :
FROM client
par M. KEUMFACK P a g e 40 | 51
Base de données et SQL
Résultat :
prénom
Pierre
Sabrina
David
Marie
Ce résultat affiche volontairement qu’une seule fois le prénom « Pierre » grâce à l’utilisation de la
commande DISTINCT qui n’affiche que les résultats distincts.
Intérêt
L’utilisation de la commande DISTINCT est très pratique pour éviter les résultats en doubles.
Cependant, pour optimiser les performances il est préférable d’utiliser la commande SQL GROUP BY
lorsque c’est possible.
SQL WHERE
La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base
de données qui respectent une condition. Cela permet d’obtenir uniquement les informations
désirées.
Syntaxe
La commande WHERE s’utilise en complément à une requête utilisant SELECT. La façon la
plus simple de l’utiliser est la suivante :
SELECT nom_colonnes
FROM nom_table
WHERE condition
Exemple
Imaginons une base de données appelée « client » qui contient le nom des clients, le nombre de
commandes qu’ils ont effectués et leur ville :
par M. KEUMFACK P a g e 41 | 51
Base de données et SQL
3 Joséphine 1 toulouse
SELECT *
4 Gérard 7 paris
FROM client
Résultat :
Attention : dans notre cas tout est en minuscule donc il n’y a pas eu de problème. Cependant,
si id nom nbr_commande nbr_commande une table est sensible à la casse, il
faut faire attention aux majuscules
1 Paul 3 paris
et minuscules.
4 Gérard 7 paris
Opérateurs de comparaisons
Il existe plusieurs opérateurs de comparaisons. La liste ci-jointe présente quelques-uns
des opérateurs les plus couramment utilisés.
Opérateur Description
= Égale
<> Pas égale
!= Pas égale
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à
IN Liste de plusieurs valeurs possibles
par M. KEUMFACK P a g e 42 | 51
Base de données et SQL
BETWEEN Valeur comprise dans un intervalle donnée (utile pour les nombres ou dates)
LIKE Recherche en spécifiant le début, milieu ou fin d'un mot.
IS NULL Valeur est nulle
IS NOT NULL Valeur n'est pas nulle
Attention : il y a quelques opérateurs qui n’existe pas dans des vieilles versions de système de
gestion de bases de données (SGBD). De plus, il y a de nouveaux opérateurs non indiqués ici
qui sont disponibles avec certains SGBD. N’hésitez pas à consulter la documentation de
MySQL, PostgreSQL ou autre pour voir ce qu’il vous est possible de faire.
SQL BETWEEN
L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un intervalle
de données dans une requête utilisant WHERE. L’intervalle peut être constitué de chaînes de
caractères, de nombres ou de dates. L’exemple le plus concret consiste par exemple à récupérer
uniquement les enregistrements entre 2 dates définies.
Syntaxe
L’utilisation de la commande BETWEEN s’effectue de la manière suivante :
SELECT *
FROM table
La requête suivante retournera toutes les lignes dont la valeur de la colonne « nom_colonne »
sera comprise entre valeur1 et valeur2.
Exemple : filtrer entre 2 dates
Imaginons une table « utilisateur » qui contient les membres d’une application en ligne.
id nom date_inscription
1 Maurice 2012-03-02
2 Simon 2012-03-05
3 Chloé 2012-04-14
4 Marie 2012-04-15
5 Clémentine 2012-04-26
par M. KEUMFACK P a g e 43 | 51
Base de données et SQL
Si l’on souhaite obtenir les membres qui se sont inscrit entre le 1 avril 2012 et le 20 avril 2012
il est possible d’effectuer la requête suivante :
SELECT *
FROM utilisateur
Résultat :
id nom date_inscription
3 Chloé 2012-04-14
4 Marie 2012-04-15
SELECT *
FROM utilisateur
Résultat :
id nom date_inscription
1 Maurice 2012-03-02 Bon à savoir
2 Simon 2012-03-05 Certaines vieilles versions de systèmes de gestion de bases
L’autre élément important à savoir c’est que toutes les bases de données ne gèrent pas
l’opérateur BETWEEN de la même manière. Certains systèmes vont inclurent les valeurs qui
par M. KEUMFACK P a g e 44 | 51
Base de données et SQL
définissent l’intervalle tandis que d’autres systèmes considèrent ces valeurs sont exclues. Il est
important de consulter la documentation officielle de la base de données que vous utilisez pour
avoir une réponse exacte à ce sujet.
SQL GROUP BY
La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et
utiliser une fonction de totaux sur un groupe de résultat. Sur une table qui contient toutes les
ventes d’un magasin, il est par exemple possible de lister, regrouper les ventes par clients
identiques et d’obtenir le coût total des achats pour chaque client.
Syntaxe d’utilisation de GROUP BY
De façon générale, la commande GROUP BY s’utilise de la façon suivante :
FROM table
GROUP BY colonne1
A noter : cette commande doit toujours s’utiliser après la commande WHERE et avant la
commande HAVING.
Exemple d’utilisation
Prenons en considération une table « achat » qui résume les ventes d’une boutique :
2 Simon 47 2012-10-27
3 Marie 18 2012-11-05
4 Marie 20 2012-11-14
Ce tableau contient une colonne qui sert d’identifiant
5 Pierre 160 2012-12-03
pour chaque ligne, une autre qui contient le nom du
client, le coût de la vente et la date d’achat.
Pour obtenir le coût total de chaque client en regroupant les commandes des mêmes clients, il
faut utiliser la requête suivante :
par M. KEUMFACK P a g e 45 | 51
Base de données et SQL
FROM achat
GROUP BY client
La fonction SUM () permet d’additionner la valeur de chaque tarif pour un même client. Le
résultat sera donc le suivant :
client SUM(tarif)
Pierre 262
Simon 47
Marie 38
Requête :
FROM achat
Résultat :
client SUM(tarif)
Pierre 262
Simon 47
Marie 38
Marie 38
Pierre 262
par M. KEUMFACK P a g e 46 | 51
Base de données et SQL
• AVG() pour calculer la moyenne d’un set de valeur. Permet de connaître le prix du
panier moyen pour de chaque client
• COUNT() pour compter le nombre de lignes concernées. Permet de savoir combien
d’achats a été effectué par chaque client
• MAX() pour récupérer la plus haute valeur. Pratique pour savoir l’achat le plus cher
• MIN() pour récupérer la plus petite valeur. Utile par exemple pour connaître la date du
premier achat d’un client
• SUM() pour calculer la somme de plusieurs lignes. Permet par exemple de connaître le
total de tous les achats d’un client
Ces petites fonctions se révèlent rapidement indispensable pour travailler sur des données.
SQL HAVING
La condition HAVING en SQL est presque similaire à WHERE à la seule différence
que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(),
MIN() ou MAX().
Syntaxe
HAVING s’utilise de la manière suivante :
FROM nom_table
GROUP BY colonne1
Important : HAVING est très souvent utilisé en même temps que GROUP BY bien que ce ne
soit pas obligatoire.
Exemple
Pour utiliser un exemple concret, imaginons une table « achat » qui contient les achats de
différents clients avec le coût du panier pour chaque achat.
par M. KEUMFACK P a g e 47 | 51
Base de données et SQL
Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de 40f, toute
commandes confondu alors il est possible d’utiliser la requête suivante :
FROM achat
GROUP BY client
Résultat :
client SUM(tarif)
Pierre 262
Simon 47
La cliente « Marie » a cumulée 38f d’achat (un achat de 18f et un autre de 20f) ce qui est
inférieur à la limite de 40f imposée par HAVING. En conséquent cette ligne n’est pas affichée
dans le résultat.
par M. KEUMFACK P a g e 48 | 51
Base de données et SQL
SQL ORDER BY
La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il est
possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant.
Syntaxe
Une requête où l’on souhaite filtrer l’ordre des résultats utilise la commande ORDER BY de la
sorte :
FROM table
ORDER BY colonne1
Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser
l’ordre en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs, il est possible de
trier sur plusieurs colonnes en les séparant par une virgule. Une requête plus élaboré
ressemblerais alors cela :
FROM table
A noter : il n’est pas obligé d’utiliser le suffixe « ASC » sachant que les résultats sont toujours
classés par ordre ascendant par défaut. Toutefois, c’est plus pratique pour mieux s’y retrouver,
surtout si on a oublié l’ordre par défaut.
Exemple
Pour l’ensemble de nos exemples, nous allons prendre un base « utilisateur » de test, qui
contient les données suivantes :
par M. KEUMFACK P a g e 49 | 51
Base de données et SQL
FROM utilisateur
ORDER BY nom
Résultat :
SELECT *
FROM utilisateur
Résultat :
par M. KEUMFACK P a g e 50 | 51
Base de données et SQL
par M. KEUMFACK P a g e 51 | 51