INF221 2023-2024 Physique
INF221 2023-2024 Physique
INF221 2023-2024 Physique
Filière Physique
3 octobre 2023
Informations générales v
Introduction 3
1.1 Quelques définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Les composants d’une Base de Données relationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Objectifs et propriétés d’un SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Que doit-on savoir pour utiliser un SGBD ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1 Définition du schéma de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 Les opérations sur les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.3 Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.4 Concurrence d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Plan du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5 Les tables 65
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.1.1 Les champs d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.1.2 Clé primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.3 Relations entre tables - clé étrangère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.4 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.2 Utilisation d’un outil de modélisation : WinDesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.3 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6 Les requêtes 75
6.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.2 Introduction au langage SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.2 Syntaxe SQL de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.3 Les critères de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2.4 Comparaison à un filtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.5 Les opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Index 119
Informations générales
Ce cours s’adresse aux étudiants de 2ème année de la filière Physique à l’Université de Yaoundé I et a pour objectif
l’étude des principes des SGBD relationnels et la mise en pratique de ces principes. Le contenu du cours est essentiellement
le suivant :
Conception d’un schéma relationnel : Il s’agit de savoir définir un schéma relationnel complet et correct, comprenant des
tables, des contraintes, des vues.
Langages d’interrogation et de manipulation : L’accent est mis sur SQL et ses fondements.
Cependant, le cours ne s’intéresse pas aux problèmes de concurrence d’accès, dont la connaissance est nécessaire aux
développeurs d’applications basées sur des SGBD. Des travaux pratiques avec le SGBD MS Access permettent de mettre
en ?uvre les techniques étudiées en cours.
L’accent est donc plutôt mis sur les notions de base (ce qu’est un SGBD, une base de données, un langage d’interroga-
tion) et leur application pratique. Il est demandé d’avoir acquis à la fin du cours les connaissances nécessaires à l’utilisation
d’un SGBD par un informaticien non-spécialiste. : création d’un schéma, insertion, mise à jour, destruction, et interroga-
tion de données dans la gestion d’un SGBD. En revanche, tout ce qui relève de la compréhension des mécanismes internes
d’un SGBD (représentation physique, évaluation de requêtes) ou des fondements théoriques du modèle relationnel n’est pas
abordé ici.
Ce document est un support de cours : il ne prétend certainement pas être exhaustif ni traiter en détail tous les sujets abordés.
L’assistance au cours proprement dit, ainsi qu’aux travaux dirigés et aux travaux pratiques est fortement recommandée.
La structure et le contenu des chapitres de ce document ont été synchronisés avec le contenu du programme établi par
le département de Physique de l’Université de Yaoundé I.
Pour ceux qui veulent en savoir plus, il existe une riche bibliographie dont voici quelques éléments recommandables :
Nous aurons une demi-douzaine de séances de cours ainsi réparties (à titre indicatif) :
Partie 1 : Modélisation d’un système d’information : Analyse et Structuration des données (chapitres 1 à 6)
2. Être capable de passer d’un modèle à un autre (du schéma conceptuel au schéma relationnel ou du modèle logique au
modèle physique) ou vice versa
3. Etre capable de critiquer sérieusement un modèle proposé dans le cadre de l’informatisation d’un Système d’Informa-
tion
5. Etre capable d’écrire des requêtes SQL, QBE et même pouvoir en dériver le calcul relationnel en s’aidant des opérations
vues en algèbre relationnelle.
6. Etre capable de se servir d’un atelier de Génie Logiciel tel que Win’Design (TP)
Ouvrages :
2. Ullman J.D., Principles of Database and Knowledge-Base Systems, 2 volumes, Computer Science Press
6. Melton J. et A.R. Simon, Understanding SQL, A Complete Guide, Morgan Kaufmann, 1993.
Première partie
La compétitivité d’une entreprise ainsi que sa valeur sur le marché sont déterminées par plusieurs éléments, d’une
importance différente selon le secteur d’activité. On peut généralement regrouper ces éléments en deux classes :
• L’infrastructure
• Les supports financiers
Depuis quelques années, les responsables des entreprises (banques, assurances, industrie etc. ) ont davantage reconnu et
admis que la gestion et l’exploitation des informations sont un facteur de compétitivité à ne pas négliger.
Le développement rapide de l’informatique a donné aux entreprises la possibilité d’utiliser des moyens avancés et puis-
sants pour gérer et exploiter de très grands volumes de données. Il y a quelques années, le domaine de la gestion informatique
des données était réservé aux informaticiens. Actuellement, les tendances à l’intérieur des entreprises ont changé de façon
à ce que tous les employés soient de plus en plus impliqués dans les différents procédés liés à la gestion et l’exploitation
des données. De cette façon, un certain niveau de connaissance des principes et des outils standards de l’informatique est
aujourd’hui requis pour la plupart des postes disponibles dans les entreprises.
Toutefois, il ne suffit pas d’utiliser les ressources informatiques les plus sophistiquées pour exploiter au mieux les
données. En parallèle avec les outils informatiques utiles pour gérer des données, tels que les ordinateurs de plus en plus
puissants et les logiciels adaptés (SGBD, Tableur etc.), ont été développées des méthodes d’analyse et de conception de
systèmes d’information. Ces méthodes nous offrent la possibilité d’analyser un système d’information naturel (par exemple
la gestion des livres d’une librairie ou la gestion des sinistres d’une compagnie d’assurances), de concevoir ensuite un modèle
qui représente ce système et d’implémenter finalement un système informatique, basé sur ce modèle.
Exemple 1.
Le nom d’une personne est une information concernant cette personne.
La couleur d’une voiture est une information concernant cette voiture.
Etienne enseigne les bases de données.
Des relations de ce genre définissent des structures.
4
Définition 2. Le système d’information regroupe l’ensemble des ressources permettant de gérer (saisir, stocker, traiter,
restituer, transmettre) toutes les informations utiles aux décideurs et aux opérationnels.
Exemple 2.
Toutes les informations relatives à la gestion d’une librairie constituent le système d’information de cette librairie. Ce système
peut couvrir le simple stockage des livres, mais également la gestion des commandes, des ventes et même des clients.
Un système d’information ne doit pas nécessairement être informatisé. Bien que la plupart des systèmes actuels se basent
sur la technologie de l’informatique, il existe encore des systèmes d’information où l’information est stockée, manipulée et
communiquée à l’aide de moyens ”traditionnels” tels que les armoires, les classeurs, les calculatrices, les fiches sur papier
...
Le système d’information ne doit pas être confondu avec le système informatique qui lui, est constitué d’éléments
matériels et/ou logiciels (ordinateurs, programmes, structures de données, . . . )
Bien que les deux termes ”informations” et ”données” soient souvent utilisés comme synonymes, il existe une différence
subtile entre eux.
Exemple 3.
Dans une librairie, un client demande au vendeur si le livre ”L’étranger” (Albert Camus) est disponible en stock. Le vendeur
conseille la base de données de la librairie à l’aide de son ordinateur et confirme au client que le livre est disponible. Le
vendeur a donc donné au client l’information que le livre est en stock. Afin de pouvoir donner cette information, le vendeur
a du consulter les données qui représentent le stock de la librairie. Le fait de consulter le stock constitue un traitement sur
les données du stock.
L’image de la Figure 1.1 en est un modèle générique.
On peut donc dire qu’un système d’information contient les données et les traitements nécessaires pour assimiler et
stocker les informations en entrée et produire les informations en sortie.
Exemple 4.
Le propriétaire d’une vidéothèque reçoit une livraison avec des nouvelles cassettes vidéo. Pour chaque cassette vidéo, il lit
le titre, la langue et la durée et sauvegarde ces informations dans la base de données de la vidéothèque. Il a donc utilisé un
traitement d’ajout de données afin de transformer les informations en entrée (titre, langue, durée) en données.
Les données d’un système d’information peuvent être stockées et manipulées à l’aide d’un outil informatique spécialisé
dans ce domaine. Actuellement les Systèmes de Gestion de Bases de Données (SGBD) constituent le type de logiciel le
mieux adapté pour implémenter la plupart des systèmes d’information.
C’est donc un ensemble, en général volumineux, de telles informations, avec une caractéristique essentielle : on souhaite les
mémoriser de manière permanente. D’où la définition :
Définition 3. Une Base de Données (BD) peut être considérée comme un ensemble structuré de données, centralisées ou
non, servant pour les besoins d’une ou plusieurs applications, interrogeables et modifiables par un groupe d’utilisateurs en
un temps opportun.
Plus formellement, une BD est un ensemble d’informations exhaustives, non redondantes, structurées et persistantes, concer-
nant un sujet.
Définition 4. La gestion ici est considérée comme l’action ou la manière de gérer, d’administrer, de diriger, d’organiser
quelque chose (une entreprise ou organisation dans notre cas)
Définition 5. Un Système de Gestion de Base de Données (SGBD) peut être défini comme un ensemble de logiciels prenant
en charge la structuration, le stockage, la mise à jour et la maintenance des données. Autrement dit, il permet de créer,
décrire, modifier, interroger et administrer les données. C’est, en fait, l’interface entre la base de données et les utilisateurs
(qui ne sont pas forcément informaticiens).
Exemple 5.
MS Access, Oracle, MySQL, SQL server, Postgre SQL . . .
5
b. Les requêtes qui correspondent dans un certain sens aux ”questions” qu’on pose au SGBD. Le résultat à une requête
correspond bien souvent à un sous-ensemble d’une ou de plusieurs tables.
Exemple 7.
Le chef du personnel de l’entreprise SCHAFFGAER SARL. désire connaı̂tre les noms, prénoms, adresses et localités
des employés recrutés en 1996. Il doit formuler une requête qui sera exécutée par le SGBD, et qui donnera comme
résultat une liste semblable à la table des employés, mais contenant uniquement les employés qui vérifient le critère
de sélection de la requête, et pour chacun de ces employés seulement les informations demandées. Voire Figure 1.3
c. Les formulaires sont utilisés pour ajouter, modifier ou supprimer des données dans les tables. Bien que la plupart des
SGBD nous permettent d’accéder aux données directement dans les tables, les formulaires nous offrent certains avan-
tages en ce qui concerne la facilité d’utilisation, mais également la sécurité des données.
Exemple 8.
La secrétaire du chef du personnel utilise un formulaire pour ajouter ou supprimer un employé de la BD. Ce formulaire
lui permet également de modifier les données d’un employé. Voire Figure 1.4
d. Il arrive souvent qu’on veuille imprimer des statistiques concernant certaines données d’une BD. C’est alors qu’inter-
viennent les rapports ou états. Les rapports sont similaires aux formulaires, à la différence près, qu’ils sont uniquement
destinés à être imprimés et qu’il n’y a pas de dialogue interactif avec l’utilisateur. Un rapport se base généralement sur
une ou plusieurs tables ou bien le résultat d’une requête.
Exemple 9.
A la fin de chaque mois le chef du personnel reçoit un rapport avec pour chaque département, la liste des employés,
leur salaire mensuel ainsi que le salaire mensuel total payé par département. Voire Figure 1.5
6
• Indépendance physique : la façon de définir les données doit être indépendante des structures utilisées pour leur
stockage
• Indépendance logique : un utilisateur doit pouvoir percevoir seulement la partie des données qui l’intéresse (c’est ce
que l’on appelle une vue) et modifier la structure de celle-ci sans remettre en cause la majorité des applications
• Manipulation aisée des données par des non informaticiens, ce qui suppose des langages ”naturels”
• Accès efficaces aux données et obtention de résultats aux interrogations en un temps ”acceptable”
• Non-redondance : chaque donnée ne doit être présente qu’une seule fois dans la base afin d’éviter les problèmes lors
des mises à jour
• Cohérence (ou intégrité) : les données ne doivent présenter ni ambiguı̈té, ni incohérence, pour pouvoir délivrer sans
erreur les informations désirées. Cela suppose un mécanisme de vérification lors de l’insertion, de la modification ou
de la suppression de données
• Partage des données pour un accès multi-utilisateur simultané aux mêmes données. Il faut entre autre assurer un
résultat d’interrogation cohérent pour un utilisateur consultant une base pendant qu’un autre la modifie
• Sécurité des données : robustesse vis-à-vis des pannes (il faut pouvoir retrouver une base ”saine” encas de plantage au
cours de modifications) et protection par des droits contre les accès non autorisés
Des objectifs cités ci-dessus découlent les propriétés fondamentales d’un SGBDr :
• Organisation structurée des données dans des tables interconnectées (d’où le qualificatif relationnelles), pour pouvoir
détecter les dépendances et redondances des informations
• Implémentation d’un langage relationnel ensembliste permettant à l’utilisateur de décrire aisément les interrogations
et manipulation qu’il souhaite effectuer sur les données
• Indépendance des données vis-à-vis des programmes applicatifs (dissociation entre la partie ”stockage de données” et
la partie ”gestion” - ou ”manipulation”)
• Gestion des opérations concurrentes pour permettre un accès multi-utilisateur sans conflit
• Gestion de l’intégrité des données, de leur protection contre les pannes et les accès illicites
4. Optimiser les performances, par le réglage de l’organisation physique des données. Cet aspect relève plutôt de l’admi-
nistration et ne sera évoqué que dans l’introduction.
Ces différents modèles correspondent aux niveaux dans l’architecture d’un SGBD. Prenons l’exemple du modèle concep-
tuel le plus courant : le modèle Entité/Association. C’est essentiellement une description très abstraite qui présente les avan-
tages suivants :
En revanche, il ne propose pas d’opérations. Or définir des structures sans disposer d’opérations pour agir sur les données
stockées dans ces structures ne présente pas d’intérêt pratique pour un SGBD. D’où, à un niveau inférieur, des modèles
dits ?logiques ? qui proposent :
1. Un langage de définition de données (LDD) pour décrire la structure, incluant des contraintes.
2. Un langage de manipulation de données (LMD) pour appliquer des opérations aux données.
Ces langages sont abstraits : le LDD est indépendant de la représentation physique des données, et le LMD est indépendant
de l’implantation des opérations. On peut citer une troisième caractéristique : oute les structures et les opérations, un modèle
logique doit permettre d’exprimer des contraintes d’intégrité sur les données.
Exemple 11.
Bien entendu, le SGBD doit être capable de garantir le respect de ces contraintes. Quand on conçoit une application
pour une BD, on tient compte (plus ou moins consciemment) de cette architecture en plusieurs niveaux. Typiquement : (1)
On décide la structure logique, (2) on décide la structure physique, (3) on écrit les programmes d’application en utilisant la
structure logique, enfin (4) Le SGBD se charge de transcrire les commandes du LMD en instructions appropriées appliquées
à la représentation physique.
Cette aproche offre de très grands avantages qu’il est important de souligner. Tout d’abord elle ouvre l’utilisation des SGBD
à de utilisateurs non-experts : les langages proposés par les modèles logiques sont plus simples, et donc plus accessibles,
que les outils de gestion de fichiers. Ensuite, on obtient une caractéristique essentielle : l’indépendance physique. On peut
modifier l’implantation physique sans modifier les programmes d’application. Un concept voisin est celui d’indépendance
logique : on peut modifier les programmes d’application sans toucher à l’implantation.
Enfin le SGBD décharge l’utilisateur, et en grande partie l’administrateur, de la lourde tâche de contrôler la sécurité et
l’intégrité des données.
9
1.4.2 Les opérations sur les données
Il existe 4 opérations classiques (ou requêtes) :
3. La destruction.
4. La recherche.
Ces opérations correspondent à des commandes du LMD. La plus complexe est la recherche en raison de la variété des
critères.
Pour l’utilisateur, une bonne requête a les caractéristiques suivantes. Tout d’abord elle s’exprime facilement : l’idéal serait
de pouvoir utiliser le langage naturel, mais celui-ci présente trop d’ambiguités. Ensuite le langage ne devrait pas demander
d’expertise technique (syntaxe compliquée, structures de données, implantation particulière ...). Il est également souhaitable
de ne pas attendre trop longtemps (à charge pour le SGBD de fournir des performances acceptables). Enfin , et peut-être
surtout, la réponse doit être fiable.
Une bonne partie du travail sur les SGBD consiste à satisfaire ces besoins. Le résultat est ce que l’on appelle un langage de
requêtes, et constitue à la fois un sujet majeur d’étude et une caractéristique essentielle de chaque SGBD. Le langage le plus
répandu à l’heure actuelle est SQL.
1.4.3 Optimisation
L’optimisation (d’une requête) s’appuie sur l’organisation physique des données. Les principaux types d’organisation
sont les fichiers séquentiels, les index (denses. secondaires, arbres B) et le regroupement des données par hachage.
Un module particulier du SGBD, l’optimiseur, tient compte de cette organisation et des caractéristiques de la requête pour
choisir le meilleur séquencement des opérations.
• Donner une image cohérente des données si l’un fait des requêtes et l’autre des mises-à-jour.
1. La première partie présente dans ses grandes lignes les principes fondamentaux du modèle relationnel c’est-à-dire l’ana-
lyse et la structure des données en focalisant sur la construction du modèle de données, et en détaillant comment le
modèle entité-association permet d’obtenir un premier schéma relationnel et comment ce dernier est normalisé pour
obtenir une base cohérente.
2. La deuxième partie s’intéresse aux langages de requêtes relationnels. Ici, les langages d’interrogation et de manipulation
de données suivants sont présentés : l’algèbre relationnelle qui fournit un petit ensemble d’opérateurs permettant
d’exprimer des requêtes complexes et le langage SQL, norme SQL2.
Chapitre 2
Un système d’information qui n’est pas trop complexe et volumineux en terme d’informations, peut facilement être in-
formatisé par une seule personne, qui ne doit pas nécessairement être un informaticien. Il suffit d’être un peu familiarisé avec
une méthode de modélisation, et de savoir manipuler un SGBD pour réaliser une implémentation informatique, cohérente et
fonctionnelle, d’un tel système d’information.
Dès que le système d’information atteint une certaine envergure (exemple : informatiser la gestion des sinistres d’une
compagnie d’assurances), un groupe d’étude est généralement créé.
Ce groupe ne devra en aucun cas contenir seulement des informaticiens mais également :
• Un ou plusieurs représentants des futurs utilisateurs du système informatisé (Par exemple : Un employé du service qui
gère les sinistres) ;
• Un ou plusieurs représentants de chaque département impliqué (exemple : Un employé du service des contrats ) ;
• Un représentant de la direction.
Généralement, un responsable du groupe (Project Manager) est nommé, afin de coordonner les travaux effectués par le
groupe et de suivre le déroulement à partir de l’analyse jusqu’à la mise en place du système informatisé.
Chaque projet d’informatisation, qu’il soit exécuté par une seule personne, ou géré par un groupe d’étude, prévoit plu-
sieurs étapes.
En général, nous avons les étapes suivantes :
2. Création d’une série de modèles qui permettent de représenter tous les aspects importants
• L’étude de documents provenant du système d’information actuel (Rapports, Bons de commandes, Facture. . . ).
• Pourvu que la tâche d’analyse soit partagée entre plusieurs membres du groupe d’études, il faut coordonner les actions
et comparer les résultats avec les autres membres.
Pour les projets qui se basent sur un système déjà partiellement informatisé s’ajoute :
2. Création d’une série de modèles, qui permettent de représenter tous les aspects importants ;
En ce qui concerne la première étape, nous n’allons pas introduire de vraies règles, mais simplement utiliser nos connais-
sances de gestion d’une entreprise, notre esprit ouvert et même notre fantaisie pour analyser correctement la situation exis-
tante et les besoins des utilisateurs. Le résultat de l’analyse est généralement un ou plusieurs documents, qui contiennent les
indications principales sur le fonctionnement désiré du système informatisé. Le document d’analyse contient souvent déjà
des prototypes de certains documents importants, que le futur système devra être capable de produire.
Une fois que l’analyse est terminée, il s’agit d’élaborer une série de modèles, basés sur le document d’analyse. Ces
modèles nous permettront plus tard d’implémenter une base de données, qui contiendra toutes les informations nécessaires
au bon fonctionnement du système informatisé.
La création de ces modèles se fait selon une certaine méthode. Nous allons baser notre cours sur la méthode MERISE
(Méthode d’Etude et de Réalisation Informatique de Systèmes d’Entreprise), qui a été développée pendant les années ’70.
Merise est aujourd’hui largement répandue dans les pays d’Afrique et d’Europe francophone pour l’essentiel.
MERISE prévoit une conception par niveaux, et définit pour cela 3 niveaux essentiels :
1. Le niveau conceptuel, qui se base directement sur l’analyse, décrit l’ensemble des données du système d’information,
sans tenir compte de l’implémentation informatique de ces données. Ce niveau, qui représente donc la signification
des données, se traduit par un formalisme que nous appelons Modèle conceptuel des données (MCD)
2. Le niveau logique, qui se base sur le modèle conceptuel des données, prend en considération l’implémentation du
système d’information par un SGBD. Ce niveau introduit la notion des tables logiques, et constitue donc le premier
pas vers les tables des SGBD. Ce niveau est représenté par le Modèle logique des données (MLD)
3. Le niveau physique, qui se base sur le modèle logique des données, contient finalement les tables définies à l’aide
d ?un SGBD spécifique (p.ex. MS Access, dBASE, Oracle . . . ). Ce niveau est représenté par le Modèle physique des
données (MPD)
Voici donc les 4 étapes nécessaires pour traduire un système d’information naturel en une base de données :
14
Nous avons vu qu’une base de données est constituée par un ensemble de tables qui contiennent toutes les données de
la base. Une méthode de modélisation nous permet de trouver le bon nombre de tables pour une base de données et de
déterminer quelles données sont représentées à l’intérieur de quelle table.
Pour l’instant, il nous suffit de savoir qu’une table est un ensemble d’enregistrements, dont chacun est composé par les
mêmes champs de données. On pourrait comparer une table à une liste en MS-Excel1.
Exemple 12.
NoEmp bf Nom Emp bf Prénom Emp bf NoEntr bf Nom Entr bf Localité
102 Belibi Emile 1 Tatiss SARL Yaoundé
103 Ntong Francis 1 INC Yaoundé
104 Kenmegne Jovin 2 MINEDUB Douala Nous voyons ici uniquement
105 Adamou Hamza 1 Tatiss SARL Yaoundé
106 Kuissi Aimée 2 MINJUSTICE Douala
... ... ... ... ... ...
quelques enregistrements. Une caisse de maladie ayant des milliers de membres, et cette table possédant un enregistrement
par membre, on peut bien s’imaginer la taille réelle de la table.
Or, cette solution bien qu’elle soit correcte dans le sens le plus large du terme, nous impose un certain nombre de
problèmes.
2.2.2 Exercices
Exercice 1.
Essayez de trouver en discussion quelques problèmes qui peuvent se manifester lors du travail journalier avec cette table.
Exercice 2.
Comment est-ce qu’on pourrait éviter ces problèmes sans toutefois perdre des informations ?
En se basant sur un document d’analyse, le modèle conceptuel des données (MCD) fait référence à tous les objets du
système d’information et à des relations entre ces objets. Le formalisme utilisé dans ce modèle est encore connu sous le
nom de ”Schéma Entité-Relation”. Ce formalisme se base autour de 3 concepts principaux, les entités, les relations et les
propriétés.
Voici par exemple un MCD qui représente une entreprise avec ses employés.
15
Nous allons par la suite détailler le rôle de ces 3 concepts de base du MCD.
Notion d’entité
Une entité permet de modéliser un ensemble d’objets concrets ou abstraits de même nature.
Une entité est caractérisée par son nom et ses propriétés
Dans l’exemple du chapitre précédent , l’entité Employé spécifie donc l’ensemble des em-
ployés, qui nous intéressent dans le contexte de notre système d’information. Il en sera de
même pour l’entité Entreprise qui représente toutes les entreprises de notre système d’infor-
mation. de la sorte, la figure présente un exemple d’entité tandis que la figure correspond à
trois occurrences d’une telle entité
• Nom du client
• No.Tél. du client
A l’intérieur de chaque occurrence, chaque propriété prend une valeur, qui est dans la plupart des cas une valeur
numérique, une valeur sous forme de texte ou encore une date. . .
Exemple 14.
L’entité Client est définie par les propriétés vues à la figure 2.2
16
La propriété Nom prend les valeurs ”Meier”, ”Muller” et ”Weber” dans les 3 occurrences présentées.
A l’intérieur de chaque occurrence, chaque propriété ne prend qu’une seule valeur au maximum.
Le client 002 par exemple ne peut pas avoir 2 adresses.
Notion d’identifiant
Afin de pouvoir distinguer les différentes occurrences d’une même entité, l’entité doit être dotée d’un identifiant. L’identi-
fiant est composé d’une ou de plusieurs propriétés de l’entité. Chaque occurrence d’une entité doit avoir une valeur différente
pour l’identifiant. Le choix d’un identifiant correct est très important pour la modélisation :
Comme choix pour l’identifiant d’une entité nous distinguons généralement 3 possibilités :
2. Une propriété artificielle qui est inventée par le créateur du MCD Exemple 16.
Le numéro d’un client pour une entité Client
On représente graphiquement l’identifiant d’une entité en soulignant toutes les propriétés qui le constituent.
Exercice 3.
Indiquez graphiquement les entités qui représentent :
1. les passagers d’un vol d’une société aérienne. Nous supposons que la société garde ces informations après le vol ;
Notion de relation
Définition Une relation 1 décrit un lien entre deux ou plusieurs entités.
Chaque relation possède un nom, généralement un verbe à l’infinitif. Bien qu’une relation n’ait pas d’identifiant propre,
elle est implicitement identifiée par les identifiants des entités auxquelles elle est liée.
Le nombre d’entités reliant une relation détermine le type de la relation. En général on parle de relation n-aire lorsque n
entités sont reliées par la même relation. On verra bien souvent :
Exemple 18.
L’occurrence d’une relation est représentée par les occurrences des entités liées à la relation. La figure 2.3 est une illustration
de ce qu’est une relation binaire. En outre, elle présente quelques occurrences de la relation Ecrire.
Pour chaque occurrence d’une relation, l’identifiant composé des identifiants des entités liées à la relation doit être unique.
Cardinalités d’une relation Une relation est liée à chacune de ses entités par une patte. Sur la patte, on indique les
cardinalités, lesquelles précisent la participation de l’entité concernée à la relation. Une cardinalité est un couple de nombres
entiers naturels dont le premier indique la cardinalité minimale, le deuxième la cardinalité maximale.
La figure 2.4 présente un exemple et illustre la sémantique associée aux différentes pattes. Dans le MCD de la Figure
figure 2.4,
Entre l’entité Client et la relation Passer, nous avons les cardinalités suivantes :
• Cardinalité minimale = 1 , ce qui veut dire que chaque client passe au moins une commande.
• Cardinalité maximale = n , ce qui veut dire que chaque client peut passer plusieurs (n) commandes.
Entre l’entité Commande et la relation Passer, nous retrouvons les cardinalités suivantes :
1. Dans un autre contexte, on parle d’association
17
• Cardinalité minimale = 1 , donc chaque commande est passée par au moins un client.
• Cardinalité maximale =1 , chaque commande est passée au maximum par un seul client.
1. La cardinalité minimale exprime le nombre minimum de fois q’une occurrence d’une entité participe à une relation.
Cette cardinalité est généralement 0 ou 1.
2. La cardinalité maximale exprime le nombre maximum de fois q’une occurrence d’une entité participe à une relation.
Cette cardinalité vaut souvent 1 ou n, avec n indiquant une valeur ¿1 mais pas connue à priori.
• Cardinalité maximale = 1 : Chaque occurrence de l’entité participe au maximum une seule fois à la relation.
• Cardinalité maximale = n : Chaque occurrence de l’entité peut participer plusieurs fois à la relation.
En pratique, afin de déterminer les bonnes cardinalités, le concepteur doit se référer aux résultats de l’analyse.
Exemple 19.
Pour les deux cas suivants, on peut affirmer qu’une commande est toujours passée par au moins un client. Une commande
est également passée au maximum par un client. Une commande est donc toujours passée par un et un seul client.
Dans le premier cas, un client passe au moins une commande et au maximum plusieurs (n) commandes.
Exercice 4.
Interprétez ls modélisations de la figure 2.9 Dans le modèle 2 de la figure 2.9, on dit que Client est l’entité indépendante
par rapport à la relation disposer (cardinalité minimale = 0) , tandis que Carte membre est l’entité dépendante par rapport à
la relation disposer (cardinalité minimale = 1). Une occurrence d’un client peut donc très bien exister sans carte de membre,
mais une carte de membre ne peut jamais exister sans client.
In fine, la cardinalité minimale nous indique donc si une entité est indépendante ou dépendante.
• Une relation ne peut pas être liée uniquement à des entités dépendantes ayant en plus une cardinalité maximale de 1
La modélisation de la figure 2.10 par exemple n’est pas correcte :
Dans un tel cas, il faut réunir les propriétés des deux entités dans une seule.
Propriétés d’une relation Généralement, une relation peut être dotée de propriétés.
Exemple 20.
Exercice 5.
Pourquoi est-ce qu’on ne peut pas associer la propriété Année à une des entités de la figure 2.11
19
Cette propriété peut même devenir une partie de l’identifiant. Dans ce cas, elle doit être soulignée.
Exemple 21.
Comme un professeur peut avoir la même classe pendant plusieurs années, un identifiant composé de No Matricule et
F IGURE 2.12
Code Classe n’est pas suffisant, puisqu’il ne garantit pas l’unicité. On y ajoute l’Année (Cf. Figure 2.12).
Une relation à cardinalité (1,1) n’est jamais porteuse de propriétés. Dans ce cas, les propriétés migrent dans l’entité
portant cette cardinalité (1,1).
Exemple 22.
La modélisation de la Figure 2.13 n’est pas correcte ! Chaque facture ne possède qu’une et une seule date d’émission, ce qui
F IGURE 2.13
fait que la propriété Date émission doit migrer dans l’entité Facture.
La modélisation correcte est donnée à la figure 2.14 :
F IGURE 2.14
Exercice-Exemple 1 : ”KaafKaaf”
Partie 1 : La société ”KaafKaaf” désire informatiser son système de facturation. Un exemple de facture est présenté à la
figure 2.15.
Créez un MCD, qui permet de modéliser correctement le système d’information nécessaire, sachant que :
• Un client peut bien sûr recevoir plusieurs factures, mais il est uniquement considéré comme tel à partir du
moment où il reçoit sa première facture.
• Une facture concerne un et un seul client.
Remarque :
Bien que le numéro du client n’apparaisse pas en tant que tel sur la facture, il est préférable d’ajouter cette propriété
artificielle à l’entité Client, et de la définir comme identifiant de cette entité. Cela nous empêche de devoir définir un
identifiant composé de trop de propriétés.
• Tous les articles disponibles sont stockés (p.ex. No=234 Libellé=”Marteau” PU=470 FCFA.). Même si un article
n’est pas encore considéré par une facture, il existe dans le système d’information.
20
F IGURE 2.16
• L’entité Facture ne contient plus la propriété Montant. Il existe une règle générale de conception qui dit : ”Aucune
propriété qui peut être calculée à partir d’autres propriétés existantes, ne devra être stockée dans le MCD.”
Pour la même raison, on n’a pas besoin de modéliser explicitement le prix à payer pour l’achat d’une quantité
d’articles donnés. Le prix pour chaque article figurant sur la facture peut être calculé à partir du prix unitaire et
de la quantité
• Nous retrouvons ici le cas d’une relation qui a une propriété. En fait, la propriété Quantité n’est pas spécifique
à un article, mais à l’achat de cet article à l’aide d’une facture. Cette façon de modéliser la situation est la plus
facile, mais il existe une alternative. On peut introduire l’entité abstraite Ligne de facture, qui représente une
ligne de détail d’une facture, p.ex celle pour le marteau. (Cf. Figure 2.19)
• Un élève est caractérisé par son no. matricule, son nom et prénom, ainsi que sa date de naissance.
• Une classe est caractérisée par le nom de la classe (p.ex 13CG2) et par une indication du cycle (valeurs possibles :
”inférieur”, ”moyen”, ”supérieur”).
• Il faudra prévoir de connaı̂tre la fréquentation des classes des élèves sur plusieurs années consécutives.
21
F IGURE 2.17
F IGURE 2.18
• Un élève enregistré dans le système fréquente au moins une classe au cours des années.
Partie 1 : Il s’agit maintenant de concevoir une extension au MCD précédent qui permet de représenter la situation suivante :
• La direction de l’école désire également saisir tous les professeurs dans le système d’information. Un professeur
est caractérisé par un code interne unique (p.ex. Jemp Muller aura le code JEMU), son nom et prénom et la
matière qu’il enseigne. Nous supposons que chaque professeur enseigne une seule matière.
• Modélisez le fait que chaque classe est enseignée chaque année par un ou plusieurs enseignants. Un enseignant
peut bien sûr donner des cours dans plusieurs classes, mais peut également ne pas donner des cours pendant une
ou plusieurs années.
F IGURE 2.19
F IGURE 2.20
F IGURE 2.21
Bien que dans la pratique la plupart des relations soient binaires (2 entités) il existe cependant des situations où l’utilisa-
tion d’une relation ternaire s’impose.
Exemple 23.
A partir des 3 entités à savoir : Professeur (CodeProf, Nom, Prénom), Matière(CodeMatière, Libellé) et Classe(Nom,Cycle),
il s’agit de créer un MCD qui renseigne sur le fait quelle matière est enseignée dans quelle classe par quel professeur pour
une année scolaire donnée.
Exercice 6.
Essayez de montrer les limites/défauts d’un MCD qui représente l’énoncé de l’exemple précédent en utilisant uniquement
des relations binaires. Pour l’exemple précédent, la figure 2.22 donne une solution qui utilise une relation ternaire
Il existe 3 façons pour lire/interpréter ce modèle :
F IGURE 2.22
• Une matière peut être enseignée 1 à n fois par un professeur dans une classe.
• Une classe peut être enseignée 1 à n fois dans une matière par un professeur.
On peut dire que chaque occurrence de la relation enseigner associe un professeur à une matière et une classe pour une
année donnée. Ou encore, ce modèle nous permet de montrer pour chaque année scolaire quelle matière est enseignée dans
quelle classe par quel professseur.
Il n’est pas toujours facile de déterminer quand il faut utiliser une relation ternaire. Généralement, on peut déjà affirmer
que si une ou plusieurs des entités liées à une relation ternaire possèdent une cardinalité maximale de 1, la modélisation n’est
pas optimisée dans le sens qu’il faudrait mieux décomposer la relation ternaire, c.à.d. la représenter par 2 relations binaires.
Exemple 24.
La direction d’une chaı̂ne d’hôtels désire gérer les séjours des clients dans les différents hôtels. Comme on peut effectivement
dire ”Un client effectue un séjour dans un hôtel” on est ammené à proposer la modélisation de la figure 2.23.
F IGURE 2.23
• Un séjour peut être effectué une et une seule fois par un client dans un hôtel.
F IGURE 2.24
F IGURE 2.25
Exercices-TDs
Exercice 7.
Voici le résultat simplifié d’une analyse faite auprès d’une compagnie d’assurance qui désire informatiser la gestion des
contrats auto.
• Un client peut assurer plusieurs voitures auprès de la compagnie. Chaque voiture est assurée par un seul contrat. Un
contrat assure une seule voiture.
• En ce qui concerne un client, la compagnie désire connaı̂tre son nom, prénom, adresse complète, numéro de téléphone
ainsi qu’un numéro de compte bancaire avec indication de la banque.
• Chaque contrat contient un numéro de contrat unique, la prime annuelle à payer, la date de paiement annuel, la
marque de la voiture, le modèle de la voiture, le numéro d’immatriculation de la voiture, la valeur de la voiture et la
date d’acquisition de la voiture.
En ignorant la méthode de modélisation, on pourrait créer une BD avec une seule table ayant un champ pour chaque
donnée indiquée dans l’analyse. On aurait donc les données des clients et des contrats dans une seule table. Quelles en
seraient les inconvénients ?
25
Créez le modèle conceptuel des données correspondant à cette situation
Exercice 8.
• Le responsable d’un magasin de location de cassettes vidéo désire informatiser le système de gestion des locations.
Voici les informations recueillies pendant l’analyse : Un membre est caractérisé par son numéro membre, son nom,
son prénom, son adresse ainsi que sa date de naissance. Dès que la carte de membre est payée (paiement unique), le
membre est enregistré dans le système et il peut désormais louer des cassettes vidéo.
• Un film est caractérisé par un numéro film, un titre, un code langue, un code genre et une durée. Le même film peut
être disponible en plusieurs exemplaires. Un exemplaire est déterminé par un numéro exemplaire ainsi que la date
d’achat de l’exemplaire.
• Lors d’une location, un membre peut louer plusieurs films en même temps. En principe, une location a une durée d’un
jour, mais cette durée peut être prolongée. Nous supposons qu’un membre rend tous les exemplaires loués en une seule
fois.
Exercice 9.
Afin d’informatiser la gestion des séances du cinéma Limelight, vous disposez des informations suivantes.
• Un film est enregistré dans le système d’information dès que la (les) copie(s) sont arrivées au cinéma. A partir de ce
moment, on commence à programmer des séances pour le film en question. Comme le même film n’est jamais joué
dans deux séances parallèles, on peut ignorer la gestion des copies.
• Un film est représenté par un numéro courant interne, qui lui est affecté par le gestionnaire des séances. En plus, on
s’intéresse pour le titre, la langue et la durée du film. Lorsqu’un film apparaı̂t en plusieurs langues différentes, on
crée dans le système d’information simplement un enregistrement par langue. Chaque film est accompagné en général
d’une fiche technique, qui renseigne en outre sur le système son du film (p.ex. DOLBY, THX etc.). Cette information
est importante, puisque les capacités en ce qui concerne la reproduction du son varient d’une salle dans une autre. Une
salle peut supporter plusieurs systèmes différents, tandis qu’un film est tourné en utilisant un seul système son. Un
système son est caractérisé par un code identificateur ainsi qu’un libellé.
• Le cinéma dispose actuellement de 12 salles, avec 3 nouvelles salles en construction. Une salle est prise en compte
dans le système d’information, dès qu’elle est prête pour accueillir des séances. Une salle est caractérisée par son
numéro, sa capacité ainsi que des informations concernant le support des différents systèmes son.
• Le système d’information doit permettre de vendre des tickets pour une séance donnée, même plusieurs jours en
avance. La réservation des sièges n’étant pas demandée, il est toutefois nécessaire que le système soit capable de
prévenir un excès de la capacité d’une salle en ce qui concerne le nombre de tickets vendus.
• La gestion des prix pour les tickets se fait au niveau des séances, puisque le prix pour voir un même film peut varier
d’une séance à une autre (p.ex. Tarif réduit les lundis à 16h00). Une séance, qui se déroule évidemment sans une seule
salle, est identifiée par un numéro courant.
Partie 1 Voici le résultat de l’analyse préliminaire menée auprès des responsables de la brigade (p.ex. le commandant, le
sous-commandant ?)
Partie 2 Le commandant vous demande de représenter également l’utilisation des véhicules de la brigade. Lors d’une in-
tervention, les sapeurs-pompiers sont affectés aux différents véhicules selon les circonstances. Jusqu’à présent, le
commandant a rempli une fiche pour chaque intervention (Cf Figure 2.26)
F IGURE 2.26
Une personne, qui habite dans une maison n’est pas toujours propriétaire de cette maison, tandis que le propriétaire d’une
maison ne doit pas nécessairement habiter dans celle-ci. Il incombe donc de représenter le fait de posséder une maison par
une relation séparée et le fait d’habiter dans une maison par une relation séparée.
27
F IGURE 2.27
Cas 2 : Afin d’obtenir une licence pour piloter un avion de ligne, un pilote doit effectuer un certain nombre de brevets. Il
existe une hiérarchie prédéfinie en ce qui concerne les brevets (structure arborescente). A chaque fois qu’un pilote a
réussi un brevet, il a la possibilité d’effectuer un certain nombre d’autres brevets, qui sont dépendants du brevet réussi.
Tous les brevets sont dépendants du brevet de base.
F IGURE 2.29
Notion d’identifiant relatif Sachant que chaque entité doit obligatoirement être dotée d’un identifiant, certaines entités
ont cependant une existence complètement dépendante et liée à une autre entité. Une entité A est complètement dépendante
d’une entité B, c.à.d. qu’une occurrence de l’entité A ne peut pas exister sans être reliée à une occurrence de l’entité B,
lorsque les deux conditions suivantes sont vraies :
1. L’entité A est émettrice d’une CIF tandis que l’entité B est cible de la même CIF.
Exemple 28.
F IGURE 2.30
pour devenir identifiant absolu (Le même numéro de tâche est susceptible d’apparaı̂tre dans plusieurs projets). Toutefois, on
peut affirmer qu’en relation à un certain numéro de projet, le numéro de tâche est un identifiant absolu.
On note cette identification relative par la lettre (R) sur la patte reliée à l’entité qui contient l’identifiant relatif.
Historisation Pour certaines propriétés, entités ou relations, on désire parfois conserver les valeurs antérieures en cas de
modification. On parle dans ce contexte d’historisation. Théoriquement, cette idée n’est pas tout à fait en accord avec les
règles de conception d’un système d’information. Prenons l’exemple suivant :
Pour une occurrence de cette entité, c.à.d. pour un assuré spécifique, il existe uniquement une seule
valeur pour chaque propriété. Selon cette modélisation, un assuré ne peut par exemple pas habiter en
même temps dans deux localités différentes. En général, ceci ne pose aucun problème, comme un assuré
indique normalement une seule adresse de référence.
Toutefois, cette modélisation ne permet pas de représenter le tracé historique des adresses, lorsqu’un
assuré déménage une ou plusieurs fois. Dans la plupart des cas, cette modélisation de l’historique n’est
F IGURE 2.31
pas demandée, mais elle est quand même réalisable à l’aide de la méthode Merise. Au niveau conceptuel, nous indiquons
simplement ce que nous voulons historiser.
Nous distinguons 3 cas :
Propriété historisée La conservation des valeurs historiques s’applique à une ou plusieurs propriétés d’une entité ou d’une
relation. Dans le MCD, on indique une historisation de propriété par la lettre (H) derrière la resp. les propriétés
concernées. Cf. Figure 2.32
Entité historisée La conservation des valeurs s’applique à toutes les propriétés d’une l’entité. On indique l’historisation par
la lettre (H) derrière le nom de l’entité.Cf. Figure 2.33
Relation historisée La conservation des valeurs s’applique à toutes les propriétés d’une relation. On indique l’historisation
par la lettre (H) derrière le nom de la relation. Cf. Figure 2.34 On ne peut pas historiser une relation sans propriétés,
F IGURE 2.34
F IGURE 2.32 F IGURE 2.33
puisque l’expression ’historiser une relation’ n’est qu’un abus de langage, il s’agit en fait d’historiser toutes les pro-
priétés d’une relation. On peut remarquer à ce moment que la méthode MERISE présente une particularité en ce
qu’elle ne prévoit pas l’historisation d’une propriété individuelle d’une relation
Exercices-TDs
Exercice 11.
Un club de tennis vous demande d’informatiser la gestion des réservations des différents terrains. A ces fins, vous disposez
des informations suivantes.
• Le club dispose d’une liste de membres. Quiconque veut jouer sur un des terrains, doit devenir membre du club.
29
• Un membre est caractérisé par un numéro interne au club, par son nom, prénom, adresse, code postal, localité, numéro
de téléphone ainsi qu’une indication s’il est un joueur licencié auprès de la fédération de tennis ou non.
• Pour chaque réservation, on désire connaı̂tre l’identité des deux joueurs membres. Au cas où quatre joueurs réserveraient
un terrain, uniquement deux joueurs sont enregistrés dans le système.
• Le club dispose de plusieurs terrains, dont certains sont couverts. On distingue en plus le type du terrain selon la nature
du sol (p.ex. Sable, Herbe etc.)
• Une réservation se fait pour une date précise par tranches d’une heure.
F IGURE 2.35
Sachant que la société entretient déjà une BD avec tous les pilotes et qu’un pilote peut être commandant d’un vol et
co-pilote d’un autre vol, proposez un MCD, qui permet l’informatisation de la gestion des ressources.
2. Il est approprié à une représentation graphique intuitive, même s’il existe beaucoup de conventions.
Il y a malheureusement plusieurs inconvénients. Tout d’abord il est non-déterminisme : il n’y a pas de règle absolue pour
déterminer ce qui est entité, attribut ou relation. Exemple : est-il préférable de représenter le metteur en scène (MES) comme
un attribut de Film ou comme une association avec Artiste ? Réponse : comme une association ! Les arguments sont les
suivants :
1. On connaı̂t alors non seulement le nom, mais aussi toutes les autres propriétés (prénom, âge, ...).
2. L’entité MES peut-être associée à beaucoup d’autres films : on permet le partage de l’information.
30
Autre exemple : est-il indispensable de gérer une entité Horaire ? Réponse : pas forcément ! Arguments :
1. Pour. Permet de normaliser les horaires. Plusieurs séances peuvent alors faire référence au même horaire (gain de
place, facilité de mise à jour, cohérence, ...)
2. Contre. On alourdit le schéma inutilement : un horaire est propre à une séance. On peut le représenter comme un
attribut de Séance.
Enfin on a vu qu’une association pouvait être transformée en entité. Un des principaux inconvénients du modèle E/A reste
sa pauvreté : il est difficile d’exprimer des contraintes d’intégrité, des structures complexes.
Beaucoup d’extensions ont été proposées, mais la conception de schéma reste en partie matière de bon sens et d’expérience.
On essaie en général :
1. de se ramener à des associations entre 2 entités : au-delà, on a probablement intérêt a transformer l’association en
entité ;
3. enfin ? et surtout ? de privilégier la simplicité et la lisibilité, notamment en ne représentant que ce qui est strictement
nécessaire.
Exercice 13.
2. Comment est-ce qu’on traduit une propriété d’une entité du MCD dans le MLD ?
3. Comment est-ce qu’on traduit un identifiant d’une entité du MCD dans le MLD ?
4. Comment est-ce qu’on traduit la relation Ecrire avec ses cardinalités du MCD dans le MLD ?
5. Le MCD nous dit que chaque livre est uniquement écrit par un seul auteur (cardinalité max.), tandis qu’un auteur peut
écrire plusieurs livres. Comment est-ce qu’on peut retrouver ces informations dans le MLD ?
31
Remarque :
La méthode MERISE définit de façon générale certaines règles qui nous permettront de transformer n’importe quel MCD en
MLD.
F IGURE 2.38
F IGURE 2.39
L’attribut No Auteur qui est clé primaire de la table Auteur, devient clé étrangère dans la table Livre.
Relation binaire (0,1)-(1,1) : On duplique la clé de la table basée sur l’entité à cardinalité (0,1) dans la table basée sur
l’entité à cardinalité (1,1).
Exemple 31.
Le No Client, qui est clé primaire de la table Client, devient clé étrangère dans la table Carte Membre.
2. x peut prendre les valeurs 0 ou 1
32
F IGURE 2.40
Relation binaire (0,1)-(0,1) On duplique la clé d’une des tables dans l’autre. Lorsque la relation contient elle-même des
propriétés, celles-ci deviennent également attributs de la table dans laquelle a été ajoutée la clé étrangère.
Exemple 32.
F IGURE 2.41
Soit on migre la clé primaire de la table Entreprise dans la table Salarié, soit on fait l’inverse.
On crée une table supplémentaire ayant comme clé primaire une clé composée des clés primaires des 2 tables. Lorsque
la relation contient elle-même des propriétés, celles-ci deviennent attributs de la table supplémentaire. Une propriété de la
relation qui est soulignée devra appartenir à la clé primaire composée de la table supplémentaire.
Exemple 33.
F IGURE 2.42
On crée une table Porter, qui contient comme clé primaire une clé composée de No-Commande et Code Article. Elle
contient également la propriété Quantité issue de la relation Porter.
33
Transformation des relations ternaires
On crée une table supplémentaire ayant comme clé primaire une clé composée des clés primaires de toutes les tables
reliées. Cette règle s’applique de façon indépendante des différentes cardinalités. Lorsque la relation contient elle-même
des propriétés, celles-ci deviennent attributs de la table supplémentaire. Une propriété de la relation qui est soulignée devra
appartenir à la clé primaire composée de la table supplémentaire.
Exemple 34.
F IGURE 2.43
La table Enseigner contient une clé composée de No Enseignant, Code Matière et Nom Classe.
F IGURE 2.44
La relation habiter du type (x,n)-(x,1), est traduite par la migration de l’attribut Adresse dans la table Personne. La
relation posséder du type (x,n)-(x,n) est traduite par la création d’une table supplémentaire du même nom. Cette table
contient comme clé primaire composée, les clés des deux tables reliées Personne et Maison. On a donc simplement appliqué
2 fois de façon indépendante les règles de transfert MCD → MLD.
Comme il s’agit d’une relation (x,n)-(x,n), une table supplémentaire est créée. Cette table contient comme clé primaire
composée, la clé des ”deux” entités reliées. Comme la même entité est liée 2 fois à la relation, on ne peut pas utiliser 2 fois
le même nom pour la clé. Dans ce cas il convient d’utiliser des rôles dans le MCD, et d’intégrer le rôle dans le nom d’une
des clés migrées dans le MLD.
Exemple 37.
Comme il s’agit d’une relation (0,1)-(0,1), nous avons en général le choix en ce qui concerne quelle entité contiendra
la clé étrangère. Comme cette relation est liée deux fois à la même entité, il est évident que nous devons dupliquer la clé
primaire, tout en veillant que le même nom de clé ne sera pas utilisé pour la clé primaire et la clé étrangère. Dans notre
exemple, tous les hommes mariés, ont comme valeur de la clé étrangère la matricule de leur épouse actuelle. Pour les
34
F IGURE 2.45
F IGURE 2.46
hommes non mariés et les femmes, la clé étrangère est sans valeur. On pourrait bien sûr utiliser la modélisation inverse avec
une clé étrangère NO MATRICULE MARI, qui indique pour chaque femme mariée, la matricule de son mari.
Sachant que l’entité dépendante est toujours liée à la relation par les cardinalités (1,1), nous pouvons appliquer les règles
générales. Dans chaque cas, la table issue de l’entité dépendante contient donc comme clé étrangère, la clé primaire de l’autre
table. L’identification relative est représentée par le fait que la table issue de l’entité dépendante contient une clé primaire
composée, constituée de la clé primaire transformée de l’identifiant de cette entité et de la clé étrangère.
Exemple 38.
F IGURE 2.47
Tout en respectant les règles générales du passage MCD→MLD, la clé primaire de la table Projet migre comme clé
étrangère dans la table Tâche. L’identification relative est représentée par le fait que la table tâche contient une clé primaire
composée de No Tache et No Projet.
Transformation de l’historisation
Historisation d’une propriété Pour chaque propriété à historiser, on crée une table qui contient :
35
• Une clé primaire composée de la clé primaire de la table qui contient la propriété à historiser et de la date d’historisa-
tion.
• La propriété à historiser
Exemple 39.
Voir Figure 2.48
F IGURE 2.48
Historisation d’une entité Pour toute modification de valeur d’une des propriétés de l’entité, on historise l’ensemble des
valeurs des propriétés dans une table qui contient :
• Une clé primaire composée de la clé primaire de l’entité à historiser et de la date d’historisation
F IGURE 2.49
Historisation d’une relation Pour toute modification de valeur d’une des propriétés de la relation, on historise l’ensemble
des valeurs des propriétés dans une table qui contient :
• Une clé primaire composée de la clé primaire de la table qui représente la relation à historiser et de la date d’histori-
sation
Exemple ”KaafKaaf”
Transformez le MCD de la Figure 2.51 , qui représente la facturation de la société ”KaafKaaf” (voir l’exercice-exemple
1 de la section 2.2.3), en un MLD en respectant toutes les règles du passage M CD → M LD.
Voici une solution :
36
F IGURE 2.50
F IGURE 2.51
F IGURE 2.52
Exercices-TDs
Exercice 14.
Transformez en MLD tous les MCD que vous avez réalisés jusqu’ici.
Exercice 15.
Transformez le MCD suivant en MLD en respectant toutes les règles de passage M CD → M LD.
Remarques :
• En ce qui concerne le rapport médical, une conclusion médicale pourrait par exemple être ”Infection” ou ”Cancer de
la gorge”, tandis que la conclusion professionnelle qui s’en suit serait par exemple ”Apte” ou ”Inaptitude temporaire
¡x¿ jours”.
Exercice 16.
Voici un MCD qui représente de façon très simplifiée la gestion d’une compagnie d’assurances. Transformez le MCD en
MLD en respectant toutes les règles de passage M CD → M LD.
Remarques :
• Un contrat couvre un seul risque. Ce risque peut être une voiture ou une habitation.
• Afin d’améliorer l’exploitation statistique des données concernant les garanties, le tarif d’une garantie est historisé.
38
2.4 Le modèle physique de données (MPD)
Le modèle physique des données (MPD) est la traduction du modèle logique des données (MLD) dans une structure de
données spécifique au système de gestion de bases de données (SGBD) utilisé.
Le MPD est donc représenté par des tables définies au niveau du système de gestion de bases de données. C’est donc au
niveau du MPD que nous quittons la méthode générale de création d’un MCD et de sa transformation en MLD, pour nous
tourner vers la manipulation d’un SGBD spécifique.
• Pour chaque table, indiquer au SGBD quel(s) champ(s) constitue(nt) la clé primaire.
• Pour chaque table, indiquer au SGBD la (les) clé(s) étrangère(s), et la (les) clé(s) primaire(s) correspondante(s).
Pour ce faire, la plupart des SGBD actuellement sur le marché nous offrent 2 possibilités.
Prenons à titre d’exemple l’implémentation du modèle logique suivant (Cf. Figure 2.55). On procède alors comme suit !
1. Utilisation d’une ou de plusieurs interfaces graphiques, qui nous aident dans la création des tables physiques, dans la
définition des clés primaires et dans la définition des relations.
Exemple 42.
Définition de la table des employés avec le champ idEmployé étant défini comme clé primaire.
F IGURE 2.56
39
F IGURE 2.57
2. Utilisation de commandes spéciales, faisant partie d’un langage de définition de données (p.ex. SQL-DDL, Cf figure
2.58)
Que vous avez utilisé l’une ou l’autre des 2 méthodes, le résultat sera toujours un ensemble de tables physiques reliées entre
elles, dans lesquelles vous pouvez stocker des données.
• Le système doit empêcher un utilisateur à entrer une valeur double ou indéterminée (NULL) pour un champ déclaré
comme clé primaire.
• Le système doit vérifier qu’une quantité livrée est toujours inférieure ou égale à une quantité commandée.
A. L’ajout d’une valeur de clé primaire qui existe déjà dans la table.
B. La modification d’une valeur de clé primaire vers une valeur qui existe déjà dans la table.
C. L’ajout d’une valeur indéterminée pour une clé primaire.
D. La modification d’une valeur de clé primaire vers une valeur indéterminée.
A. A. L’ajout d’une clé étrangère pour laquelle il n’existe pas de valeur correspondante dans la clé primaire associée.
40
F IGURE 2.58
B. B. La modification d’une clé étrangère vers une valeur pour laquelle il n’existe pas de valeur correspondante dans
la clé primaire associée.
41
C. C. La suppression d’une clé primaire, qui est référencée par une ou plusieurs valeurs d’une clé étrangère.
D. D. La modification d’une clé primaire, qui est référencée par une ou plusieurs valeurs d’une clé étrangère.
I. Interdiction des opérations du type A, B, C et D. Bien que cette possibilité soit très efficace, il existe parfois une
alternative préférable en fonction de la nature des données. Remarque : Tandis que les opérations A et B ne sont
jamais permises lorsque l’intégrité référentielle est appliquée, il n’en est pas de même pour les opérations C et
D. Le langage SQL par exemple contient une commande CREATE TABLE qui permet de définir la structure
d’une table. Cette commande contient entre autres les options ON DELETE NO ACTION et ON UPDATE NO
ACTION qui permettent de réaliser explicitement l’interdiction des opérations C et D.
II. Cascade des opérations du type C et D vers les clés étrangères correspondantes. Une modification d’une clé pri-
maire aurait comme conséquence la modification de toutes les clés étrangères correspondantes. Une suppression
d’une clé primaire aurait comme conséquence la suppression automatique de tous les enregistrements dont la
clé étrangère a la même valeur. Cette option est à utiliser avec précaution ! ! ! Remarque : En SQL la commande
CREATE TABLE nous offre les options ON DELETE CASCADE et ON UPDATE CASCADE.
III. Affectation d’une valeur par défaut aux clés étrangères concernées par une opération du type C ou D.
IV. Affectation d’une valeur indéterminée (NULL) aux clés étrangères concernées par une opération du type C ou D.
• La contrainte d’intégrité générale (angl. General Integrity Constraint) Une contrainte d’intégrité générale est utilisée
pour limiter les valeurs possibles d’un champ quelconque d’une table en fonction de la nature de celui-ci et de son rôle
dans le système d’information.
Exemples de violation de cette contrainte
Il existe plusieurs variantes de cette contrainte.
A. A chaque champ correspond un type de données, une longueur et un format bien définis.
Exemple 44.
Le numéro client doit être une valeur numérique.
Le nom du client ne doit pas dépasser 25 caractères.
Un numéro de compte doit respecter le format X-XXX/XX-X
B. Un champ peut avoir un domaine de valeurs prédéfini (une plage de valeurs possibles) et/ou une valeur par défaut.
Exemple 45.
Une note d’un devoir en classe doit être entre 0 et 60
La prix d’une facture ne doit pas être un nombre négatif.
La date d’une commande doit automatiquement être la date actuelle à moins que l’utilisateur n’entre une autre
date.
C. La valeur d’un champ peut limiter les valeurs possibles pour un autre champ d’une table/d’une BD. Exemple 46.
La valeur du champ fldDatePaiement est supérieure ou égale à la valeur du champ fldDateFacture pour une table
tblFactures.
2.4.3 Exercices-TDs
Soit la BD représentée à la figure 2.59.
e) Quelle(s) contrainte(s) est(sont) concernée(s) lors de l’ajout d’un enregistrement dans la table tblConcerne ?
42
F IGURE 2.59
f) Quelle(s) contrainte(s) est(sont) concernée(s) lors de la suppression d’un enregistrement de la table tblConcerne ?
g) Quelle(s) contrainte(s) est(sont) concernée(s) lors de la modification du numéro d’un article dans la table des articles ?
h) Quelle(s) contrainte(s) est(sont) concernée(s) lors de la modification du numéro client d’une facture ?
Chapitre 3
A B C D
a b c d
X= ? Y= ?
a’ b c d’
a b c’ d
u |= A −→ B u |= D −→ A (1)
u |= A −→ D u |= D −→ B (2)
u |= C −→ B u |= AD −→ B
(1) et (2) ⇒ u |= D −→ AB
Définition 10. Dépendance fonctionnelle élémentaire (DFE)
Soit G un groupe d’attributs et A un attribut, une DF X −→ Y est élémentaire si X n’est pas incluse dans Y et s’il n’existe
pas d’attribut X’ de X qui détermine A.
Exemple 49.
• AB −→ CB n’est pas élémentaire car CB n’est pas un attribut, mais un groupe d’attributs.
• AB −→ A n’est pas considérée car c’est une DF triviale obtenu par réflexivité.
Tout ensemble de DFE (et donc tout ensemble de DF) admet au moins une couverture minimale (et en pratique souvent
plusieurs).
Exemple 52.
L’ensemble F = {A −→ B, A −→ C, B −→ C, C −→ B} admet les deux couvertures minimales :
CM1 = {A −→ C, B −→ C, C −→ B} et CM2 = {A −→ B, B −→ C, C −→ B}
45
Définition 13. Graphe des DFE
On peut représenter un ensemble de DFE par un graphe orienté (ou plus précisément un réseau de Pétri), tel que les n ?uds
sont les attributs et les arcs les DFE (avec un seul attribut en destination de chaque arc et éventuellement plusieurs en
source).
Exemple 53.
1. On considère la relation Voiture(NVH, Marque, Type, Puis, Couleur) avec l’ensemble des DF F = {N V H −→
T ype, T ype −→ M arque, T ype −→ P uis, N V H −→ Couleur}. Une représentation de F par est donné par le
graphe de la figure 3.1
2. Soit la relation CodePostal(Code, Ville, Rue ) avec l’ensemble des DF F = {Code −→ V ille, (V ille, Rue) −→
Code}. Une représentation de F par est donné par le graphe de la figure 3.2
En effet, à partir d’un ensemble de dépendances fonctionnelles, pour obtenir une couverture minimale, il faut procéder
comme suit :
2. On peut éliminer CE −→ A et CG −→ B
La troisième forme normale est généralement reconnue comme la plus importante à respecter. La BCNF est la plus simple à
établir.
Principe de la décomposition
L’objectif de la décomposition est de ”casser” une relation en relations plus petites afin d’en éliminer les redondances et
sans perdre d’information.
Définition 14. La décomposition d’un schéma de relation R(A1 , A2 , . . . , An ) est le processus de remplacement de ce
schéma par une collection de schémas R1 , R2 , . . . , Rn telle qu’il est possible de reconstruire R par des opérations relation-
nelles de jointure sur R1 , R2 , . . . , Rn .
Définition 15. Une décomposition d’une relation R en relations R1 , R2 , . . . , Rn préserve les DF si la fermeture transitive
F + des DF de R est la même que la fermeture transitive F + de l’union des DF de R1 , R2 , . . . , Rn .
Exemple 55.
Soit la relation Voiture(Numéro,Marque,Type,Puissance,Couleur) avec la fermeture transitive suivante : F + = {N umero −→
M arque, N umero −→ T ype, N umero −→ P uissance, N umero −→ Couleur, T ype −→ M arque, T ype −→
P uissance}
On peut décomposer Voiture en préservant les DF en deux relations R1(Numéro,Type,Couleur) et R2(Type,Puissance,Marque).
Définition 16. Un attribut est atomique si il ne contient qu’une seule valeur pour un tuple donné, et donc s’il ne regroupe
pas un ensemble de plusieurs valeurs.
Exemple 56.
On veut représenter une relation indiquant la profession d’une personne par la relation Personne(Nom, Profession)
On a les instanciations suivantes :
1 (Owona, Géomètre)
2 (Menom, Ingénieur-Professeur)
La relation n’est pas en 1NF, car l’attribut Profession peut contenir plusieurs valeurs.
Pour que la relation soit en 1NF, on pourrait par exemple ajouter Profession à la clé et faire apparaı̂tre deux tuples pour
Owona, on obtiendrait :
Personne(Nom, Profession)
47
1 (Owona, Géomètre)
2 (Menom, Ingénieur)
3 (Menom, Professeur)
Une autre solution aurait été d’ajouter un attribut ProfessionSecondaire. On obtiendrait ainsi :
Personne(Nom, Profession, ProfessionSecondaire)
L’atomicité d’un attribut est souvent relative : on peut décider qu’un attribut contenant une date n’est pas atomique (et
que le jour, le mois et l’année constituent chacun une valeur), ou bien que l’attribut est de domaine date et donc qu’il est
atomique.
Le modèle relationnel impose qu’une relation ait une clé, donc la condition ”est en 1NF si elle possède une clé” est superflue
(au pire la relation est toute clé).
Il est néanmoins fondamental d’avoir identifié toutes les clés au début du processus de normalisation.
On remarque que ce schéma est en 2NF (puisque Salaire dépend maintenant fonctionnellement d’une clé et non plus d’une
partie de clé).
On remarque aussi que la décomposition a préservé les DF, puisque nous avons à présent :
P rof ession −→ Salaire (DF de la relation Profession)
N umeroEmploye, P rof ession?P rof ession (par Réflexivité)
N umeroEmploye, P rof ession?Salaire (par Transitivité)
N.B. La définition de la 2NF doit être vérifiée pour toutes les clés candidates et non seulement la clé primaire (dans le
cas où il y a plusieurs clés). Si toutes les clés d’une relation ne contiennent qu’un unique attribut, et que la relation est en
1NF, alors la relation est en 2NF.
Profession(#Profession, Salaire=>Salaire)
Salaire(#Salaire, Prime)
Ce schéma est en 3NF, car Prime est maintenant déterminé par une clé.
On remarque que cette décomposition préserve les DF, car par transitivité, Profession détermine Salaire qui détermine
Prime, et donc Profession détermine toujours Prime.
48
La définition concerne toutes les clés candidates et non uniquement la clé primaire.
Il est souhaitable que les relations logiques soient en 3NF. En effet, il existe toujours une décomposition sans perte d’infor-
mation et préservant les DF d’un schéma en 3NF. Si les formes normales suivantes (BCNF, 4NF et 5NF) assurent un niveau
de redondance encore plus faible, la décomposition permettant de les atteindre ne préserve plus systématiquement les DF.
La BCNF est la forme normale la plus facile à appréhender intuitivement et formellement, puisque les seules DFE exis-
tantes sont de la forme K −→ A où K est une clé.
Par ailleurs, une décomposition en BCNF ne préserve pas toujours les DF.
Le premier langage étudié dans ce cours est l’algèbre relationnelle. Il consiste en un ensemble d’opérations qui permettent
de manipuler des relations, considérées comme des ensemble de tuples : on peut ainsi faire l’union ou la différence de deux
relations, sélectionner une partie de la relation, effectuer des produits cartésiens ou des projections, etc.
Une propriété fondamentale de chaque opération est qu’elle prend une ou deux relations en entrée, et produit une relation
en sortie. Cette propriété permet de composer des opérations : on peut appliquer une sélection au résultat d’un produit
cartésien, puis une projection au résultat de la sélection et ainsi de suite.
En fait on peut construire des expressions algébriques arbitrairement complexes qui permettent d’exprimer des manipulations
sur un grand nombre de relations.
Une requête est une expression algébrique qui s’applique à un ensemble de relations (la base de données) et produit
une relation finale (le résultat de la requête). On peut voir l’algèbre relationnelle comme un langage de programmation très
simple qui permet d’exprimer des requêtes sur une base de données relationnelle.
Dans tout ce chapitre on va prendre l’exemple de la (petite) base de données d’un organisme de voyage. Cet organisme
propose des séjours (sportifs, culturels, etc) se déroulant dans des stations de vacances. Chaque station propose un ensemble
d’activtés (ski, voile, tourisme). Enfin on maintient une liste des clients (avec le solde de leur compte !) et des séjours
auxquels ils ont participé avec leurs dates de début et de fin.
• Station (nomStation, capacité, lieu, région, tarif)
3.2.1 La sélection, σ
La sélection σF (R) s’applique à une relation, R , et extrait de cette relation les tuples qui satisfont un critère de sélection,
F. Ce critère peut être :
• La comparaison entre un attribut de la relation, A, et une constante a. Cette comparaison s’écrit AΘa , où Θ peut être
¡, ¿, ≤ ou ≥
• La comparaison entre deux attributs A1 et A2 , qui s’écrit A1 ΘA2 avec les mêmes opérateurs de comparaison que
précédemment.
Premier exemple : exprimer la requête qui donne toutes les stations aux Antilles.
σF région =0 Antilles0 (Station)
On obtient donc le résultat : La sélection a pour effet de supprimer des lignes, mais chaque ligne garde l’ensemble de ses
attributs.
50
nomStation capacité lieu région tarif
Venusa 350 Guadeloupe Antilles 1200
Santalba 150 Guadeloupe Antilles 2000
3.2.2 La projection, π
La sélection πA1 ,A2 ,·,Ak (R) s’applique à une relation, R , et ne garde que les attributs A1 , A2 , ·, Ak .
Donc, contrairement à la sélection, on ne supprime pas des lignes mais des colonnes.
Exemple : donner le nom des stations, et leur région.
πnomStation,région (Station)
On obtient le résultat suivant, après suppression des colonnes capacité, lieu et tarif :
nomStation région
Venusa Antilles
Farniente Océan indien
Santalba Antilles
Passac Europe
En principe le nombre de lignes dans le résultat est le même que dans la relation initiale. Il y a cependant une petite sub-
tilité : comme le résultat est une relation, il ne peut pas y avoir deux lignes identiques (il n’y a pas deux fois le même élément
dans un ensemble). Il peut arriver qu’après une projection, deux lignes qui étaient distinctes initialement se retrouvent iden-
tiques, justement parce ce que l’attribut qui permettait de les distinguer a été supprimé. Dans ce cas on ne conserve qu’une
seule des deux (ou plus) lignes identiques.
Exemple : on souhaite connaı̂tre toutes les régions où il y a des stations. On exprime cette requête par :
πm boxregion(Station)
On obtient le résultat suivant, après suppression des colonnes capacité, lieu et tarif :
région
Antilles
Océan indien
Europe
La ligne ’Antilles’ était présente deux fois dans la relation Station, et n’apparaı̂t plus qu’en un seul exemplaire dans le
résultat.
C D
A B
c d
a b
u v
x y
x y
Et voici le résultat de R × S
Le nombre de lignes dans le résultat est exactement |R| × ×|S| (—R— dénote le nombre de lignes dans la relation R).
En lui-même, le produit cartésien ne présente pas un grand intérêt puisqu’il associe aveuglément chaque ligne de R à chaque
ligne de S. Il ne prend vraiment son sens qu’associé à l’opération de sélection, ce qui permet d’exprimer des jointures,
opération fondamentale qui sera détaillée plus loin.
51
A B C D
a b c d
a b u v
a b x y
x y c d
x y u v
x y x y
R×S
Renommage
Quand les schémas des relations R et S sont complètement distincts, il n’y a pas d’ambiguité sur la provenance des
colonnes dans le résultat. Par exemple on sait que les valeurs de la colonne A dans R × S viennent de la relation R. Il peut
arriver (il arrive de fait très souvent) que les deux relations aient des attributs qui ont le même nom. On doit alors se donner
les moyens de distinguer l’origine des colonnes dans la table résultat en donnant un nom distinct à chaque attribut.
Voici par exemple une table T qui a les mêmes noms d’attributs que R. Le schéma du résultat du produit cartésien R × T
A B
m n
o p
a pour schéma (A,B,A,B) et présente donc des ambiguités, avec les colonnes A et B en double.
La première solution pour lever l’ambiguité est d’adopter une convention par laquelle chaque attribut est préfixé par le
nom de la table d’où il provient. Le résultat de R × T devient alors :
Cette convention pose quelques problèmes quand on crée des expressions complexes. Il existe une seconde possibilité,
plus rigoureuse, pour résoudre les conflits de noms : le renommage. Il s’agit d’un opérateur particulier, dénoté ρ, qui permet
de renommer un ou plusieurs attributs d’une relation. L’expression ρA→C,B→D (T ) permet ainsi de renommer A en C et B
en D dans la relation T. Le produit cartésien R × ρA→C,B→D (T ) ne présente alors plus d’ambiguités. ρA Le renommage est
une solution très générale, mais assez lourde à utiliser.
Il est tout à fait possible de faire le produit cartésien d’une relation avec elle-même. Dans ce cas le renommage où l’uti-
lisation d’un préfixe distinctif est impératif. Voici par exemple le résultat de R × R, dans lequel on préfixe par R1 et R2
respectivement les attributs venant de chacune des opérandes.
3.2.4 L’union, ∪
Il existe deux autres opérateurs binaires, qui sont à la fois plus simples et moins fréquemment utilisés. Le premier est
l’union. L’expression R ∪ S crée une relation comprenant tous les nuplets existant dans l’une ou l’autre des relations R et S.
Il existe une condition impérative : les deux relations doivent avoir le même schéma, c’est-à-dire même nombre d’attributs,
mêmes noms et mêmes types.
52
L’union des relations R(A,B) et S(C,D) données en exemple ci-dessus est donc interdite (on ne saurait pas comment
nommer les attributs dans le résultat). En revanche, en posant S? = ρC→A,D→B (S), il devient possible de calculer R ∪ S 0 ,
avec le résultat suivant : Comme pour la projection, il faut penser à éviter les doublons. Donc le nuplet (x,y) qui existe à la
A B
a b
x y
c d
u v
S? = ρC→A,D→B (S)
3.2.5 La différence, ?
Comme l’union, la différence s’applique à deux relations qui ont le même schéma. L’expression R ?S a alors pour résultat
tous les nuplets de R qui ne sont pas dans S.
Voici la différence de R et S ?, les deux relations étant définies comme précédemment. La différence est le seul opérateur
A B
a b
R−S
qui permet d’exprimer des requêtes comportant une négation (on veut ?rejeter ? quelque chose, on ?ne veut pas ? des lignes
ayant telle propriété). Il s’agit d’une fonctionnalité importante et difficile à manier : elle sera détaillée plus loin.
3.2.6 La jointure, ./
Toutes les requêtes exprimables avec l’algèbre relationnelle peuvent se construire avec les 5 opérateurs présentés ci-
dessus. En principe, on pourrait donc s’en contenter. En pratique, il existe d’autres opérations, très couramment utilisées, qui
peuvent se contruire par composition des opérations de base. La plus importante est la jointure.
Afin de comprendre l’intérêt de cet opérateur, regardons le produit cartésien Station ./ Activité.
Le résultat comprend manifestement un grand nombre de lignes qui ne nous intéressent pas. Cela ne présente pas beau-
coup de sens de rapprocher des informations sur Santalba, aux Antilles et sur l’activité de ski à Passac.
Si, en revanche, on considère le produit cartésien comme un résultat intermédiaire, on voit qu’il permet de se ramener
au cas où on effectue, par une simple sélection, des rapprochements de lignes distinctes. Sur notre exemple, en considérant
la table ci-dessus comme une table de la base, on rapproche les informations générales sur une station et la liste des activités
de cette station.
La sélection qui effectue un rapprochement pertinent est la suivante :
σF id = idStation(Station ./ Activité)
Prenez bien le temps de méditer cette opération de sélection : nous ne voulons conserver que les lignes de Station ./ Activité
pour lesquelles l’identifiant de la station (provenant de Station) est identique à celui provenant de Activité. En regardant le
produit cartésien ci-dessous, vous devriez pouvoir vous convaincre que cela revient à conserver les lignes qui ont un sens :
chacune contient des informations sur une station et sur une activité dans cette même station. Si vous saisissez cette logique,
vous avez fait un grand pas dans la connaissance des bases relationnelles : consacrez-y le temps de réflexion nécessaire.
En consultant les résultats, on constate qu’on a donc effectué une composition de deux opérations (un produit cartésien,
une sélection) afin de rapprocher des informations réparties dans plusieurs tables, mais ayant des liens entre elles (toutes
les informations dans un nuplet du résultat sont relatives à une seule station). Cette opération est une jointure, que l’on peut
directement, et simplement, noter :
Station ./id=idStation Activité
53
La jointure consiste donc à rapprocher les lignes de deux relations pour lesquelles les valeurs d’un (ou plusieurs) attributs
sont identiques. De fait, dans la plupart des cas, ces attributs communs sont (1) la clé primaire de l’une des relations et (2)
la clé étrangère dans l’autre relation. Dans l’exemple ci-dessus, c’est le cas pour id (clé primaire de Station) et idStation (clé
étrangère dans Activité). La jointure permet alors de reconstruire l’association conceptuelle entre Station et Activité.
Remarque
La station Santalba, qui ne propose pas d’activité, n’apparaı̂t pas dans le résultat de la jointure. C’est normal et conforme
à la définition que nous avons donnée, mais peut parfois apparaı̂tre comme une contrainte. Nous verrons que SQL propose
une variante, la jointure externe, qui permet de la contourner.
La notation de la jointure, R ./F S, est un racourci pour σ(R ./F S). Le critère de rapprochement, F, peut être n’im-
porte quelle opération de comparaison liant un attribut de R à un attribut de S. En pratique, on emploie peu les 6= ou < qui
sont difficiles à interpréter, et on effectue des égalités.
Remarque
Si on n’exprime pas de critère de rapprochement, la jointure est équivalente à un produit cartésien.
Il faut être attentif aux ambigüités dans le nommage des attributs qui peut survenir dans la jointure au même titre que
dans le produit cartésien. Les solutions à employer sont les mêmes : on préfixe par le nom de la relation ou par un synonyme
clair, ou bien on renomme des attributs avant d’effectuer la jointure.
4.1 Définitions
Une base de données (BD) est un ensemble bien structuré de données relatives à un sujet global. Ces données peuvent
être de nature et d’origine différentes.
Exemple 60.
Une banque peut avoir une BD, qui contient les informations nécessaires sur tous les clients et leurs dépôts d’épargne. Une
société d’assurances peut stocker les données relatives aux contrats d’assurances ainsi qu’aux sinistres dans une BD.
Un système de gestion de bases de données (SGBD) est un programme qui nous permet de créer, de modifier et
d’exploiter des bases de données. Ce système constitue donc notre interface pour accéder aux données.
Un utilisateur utilise un SGBD pour accéder aux données d’une base de données.
F IGURE 4.1
Par analogie :
Un utilisateur utilise un tableur pour accéder aux données d’une feuille de calcul, respectivement un traitement de texte
pour accéder le texte d’un document.
Exercice 17.
56
Discutez les avantages et désavantages d’une gestion de données informatisées à l’aide d’un SGBD, et comparez cette gestion
à la gestion non informatisée.
F IGURE 4.2
2. Les requêtes constituent dans un certain sens des ”questions” qu’on pose au SGBD. Le résultat d’une requête est
toujours un sous-ensemble d’une ou de plusieurs tables. Exemple 62.
Le chef du personnel de l’entreprise SCHAFFGAER S. à r.l. désire connaı̂tre les noms, prénoms, adresses et localités
des employés recrutés en 1996. Il doit formuler une requête qui sera exécutée par le SGBD, et qui donnera comme
résultat une liste semblable à la table des employés, mais contenant uniquement les employés qui vérifient le critère
de sélection de la requête, et pour chacun de ces employés seulement les informations demandées.
Voici le résultat de cette requête :
F IGURE 4.3
3. Les formulaires sont utilisés pour ajouter, modifier ou supprimer des données dans les tables. Bien que la plupart
des SGBD nous permettent d’accéder les données directement dans les tables, les formulaires nous offrent certains
avantages en ce qui concerne la facilité d’utilisation, mais également la sécurité des données. Exemple 63.
La secrétaire du chef du personnel utilise un formulaire pour ajouter ou supprimer un employé de la BD. Ce formulaire
lui permet également de modifier les données d’un employé.
4. Souvent on veut imprimer des statistiques ; concernant certaines données d’une BD. C’est ici qu’interviennent les
rapports. Les rapports sont similaires aux formulaires, à la différence près, qu’ils sont uniquement destinés à être
imprimés et qu’il n’y a pas de dialogue interactif avec l’utilisateur. Un rapport se base généralement sur une ou
plusieurs tables ou bien le résultat d’une requête. Exemple 64.
A la fin de chaque mois le chef du personnel reçoit un rapport avec pour chaque département, la liste des employés,
leur salaire mensuel ainsi que le salaire mensuel total payé par département.
F IGURE 4.4
F IGURE 4.5
MS-Word : Chaque document (composant logique) correspond en principe à un fichier .doc (structure physique).
MS-Excel : Chaque classeur (composant logique) correspond à un fichier .xls (composant physique). Attention : Un clas-
seur peut contenir plusieurs feuilles de calcul.
1. Chaque composant (table, formulaire ?) d’une BD est stocké dans un fichier séparé. Une base de données constitue
donc un ensemble de fichiers. Exemple : dBASE
2. Tous les composants d’une BD sont intégrés dans un seul fichier. Exemple 67.
MS-Access
Exercice 18.
Discutez les avantages et désavantages des deux concepts d’implémentation possibles pour les composants d’une BD.
F IGURE 4.8
Les serveurs de fichiers (angl. File Server) Les serveurs de fichiers (angl. File Server) contiennent généralement des fi-
chiers appartenant aux différents utilisateurs du réseau. Par exemple, si vous utilisez un programme de traitement de
texte sur un poste de travail, ce programme se trouve localement sur le poste. Cependant, le document sur lequel vous
désirez effectuer des modifications, stocké sur le serveur, est chargé dans la mémoire locale de votre poste de travail,
afin que vous puissiez l’utiliser. Lors de chaque opération de sauvegarde (angl. Save/Save As), le fichier est effective-
ment sauvegardé sur le serveur. Le serveur gère bien sûr l’accès des utilisateurs, qui doivent généralement s’identifier
61
par un nom et un mot de passe, afin de garantir une certaine sécurité des données.
Les serveurs d’impression (angl. Print Server) effectuent la gestion des imprimantes connectées au réseau. Lorsque le
réseau comporte une multitude d’imprimantes différentes, un utilisateur sur son poste de travail peut sélectionner
une imprimante en fonction des caractéristiques (p.ex. impression couleur/NB), des capacités (p.ex. nombre de pages
imprimées par minute) et de l’emplacement physique (p.ex. imprimante à la même étage que le poste de travail). Lors
de l’impression (angl. Print), le document à imprimer est d’abord envoyé dans une file d’attente (angl. Print Queue) qui
se trouve sur le serveur d’impression. Le serveur d’impression contient généralement une file d’attente par imprimante.
Les documents d’une file d’attente sont envoyés un après l’autre vers l’imprimante correspondante.
Les serveurs d’impression (angl. Print Server) contiennent des applications ou programmes destinés à l’utilisation en
réseau. Un exemple populaire constituent les applications du type ”Groupware”, qui permettent aux utilisateurs du
réseau d’échanger des messages électroniques (angl. E-Mail), d’entretenir un agenda électronique commun et de tra-
vailler soi-disant en même temps sur des document partagés. Les serveurs de bases de données (angl. Database
Server), appartenant également à cette catégorie, sont très répandues. Avant la période où les PC devenaient popu-
laires, les bases de données ainsi que les programmes pour les manipuler, se trouvaient sur des grands ordinateurs
puissants du type ”Mainframe”. L’utilisateur était connecté au mainframe à l’aide d’un terminal composé d’un clavier
et d’un écran. Contrairement à un PC, un terminal peut uniquement envoyer des caractères au mainframe et afficher
les caractères, qui lui sont envoyés par le mainframe. Avec l’arrivée des PC, dont les fonctionnalités ne se limitent pas
à l’envoi et à l’affichage de caractères, le rôle des serveurs a considérablement changé. Actuellement, dans les environ-
nements dits ”Client/Serveur”, les PC constituent des clients ”intelligents”, qui sont en parfaite communication avec
les serveurs, dont le but principal est de ”répondre” aux questions qui leurs sont posées par les clients. L’architecture
Client/Serveur est explicitée plus en détail dans la section 4.5.1.
Les réseaux informatiques ayant une certaine taille, en termes du nombre de postes et de serveurs, sont généralement
gérés par un administrateur réseau, personne (ou groupe de personnes) en charge de la gestion, du contrôle et de l’entretien
du réseau.
Lorsque la distance géographique couverte par un réseau augmente en connectant des utilisateurs situés par exemple
dans des villes ou même des pays différents, plusieurs réseaux locaux sont connectés en un seul réseau étendu (angl. WAN
= Wide Area Network), qui peut ainsi regrouper plusieurs milliers d’utilisateurs.
F IGURE 4.9
En utilisant de l’équipement réseau spécialisé dans ce domaine, on peut connecter plusieurs réseaux locaux via un réseau
public. Ce réseau public peut par exemple être constitué du réseau téléphonique public, d’un ensemble de lignes louées
62
(lignes dédiées), d’un réseau de câbles en fibre optique, d’un réseau rapide de commutation de paquets ou même d’une
liaison par satellite.
A titre d’exemple, on peut mentionner l’Internet, qui n’est rien d’autre qu’un gigantesque réseau étendu.
Pour un utilisateur, le travail dans un réseau local ou étendu est tout à fait transparent. Il peut par exemple accéder à des
fichiers distants de la même manière qu’à des fichiers qui se trouvent sur son disque dur local.
Avant la période où les PC devenaient populaires, les bases de données ainsi que les programmes pour les manipuler ;
se trouvaient sur de grands ordinateurs puissants du type ”mainframe”. On parlait d’une architecture centralisée, puisque les
BD, le SGBD et les objets tels que requêtes, formulaires, rapports étaient stockés sur le ”mainframe”.
L’utilisateur était connecté au ”mainframe” à l’aide d’un terminal composé d’un clavier et d’un écran. Contrairement à un
PC, un terminal ne possède aucune ”intelligence” propre, c.à.d. qu’il peut uniquement envoyer des caractères au ”mainframe”
et afficher les caractères, qui lui sont envoyés par le ”mainframe”, et ceci en plus uniquement en mode caractère1.
Lorsque l’utilisateur veut par exemple afficher un formulaire, la construction du formulaire se fait complètement sur
le ”mainframe”. Ensuite, le formulaire où plutôt l’apparence du formulaire est envoyé via le réseau vers le terminal de
l’utilisateur.
Exemple 68.
Un formulaire en mode caractère (Cf. Figure 4.10)
F IGURE 4.10
Avantages de l’architecture ”mainframe” • Les ”mainframe” étant de grands ordinateurs très puissants, les systèmes
atteignent de très belles performances, d’autant plus qu’il n’y a pas de représentation graphique sur les terminaux.
Inconvénients de l’architecture ”mainframe” • Aucune capacité de calcul sur le terminal, donc impossible d’exécuter
des programmes sur le terminal.
• Pas de représentation graphique sur le terminal. Formulaires etc. moins faciles à utiliser.
• Le ”mainframe” étant sous la seule gestion du service informatique, les utilisateurs peuvent uniquement accéder
les BD via des formulaires etc. créés par les informaticiens. (Cette mesure s’avère parfois avantageuse ?)
• Le réseau est assez chargé, surtout lorsque le nombre de terminaux accroı̂t.
• Les requêtes, formulaires etc. sont fortement couplés au SGBD ce qui les rend pratiquement inutilisable lors-
qu’une société veut migrer vers un autre SGBD.
Exemple 69.
SGBD pour ”Mainframe” :
• DB2 de IBM
• RDB de DEC
63
En fait, les informaticiens sont depuis longtemps à la recherche de systèmes ouverts. La finalité d’un système ouvert
consiste dans le fait que ses composants (ordinateurs, SGBD etc.) sont échangeables sans que tous les objets en utilisation
(requêtes, formulaires etc.) doivent être complètement redéfinis resp. reprogrammés. Tous les éléments d’un tel système
doivent donc supporter au maximum possible certains standards. Un élément important de la philosophie des systèmes
ouverts est constitué par l’approche Client/Serveur.
L’approche Client/Serveur
L’évolution historique des architectures informatiques vers les architectures du type Client/Serveur (angl. Client/Server)
dans les années ’90 ; peut être ramenée surtout aux facteurs suivants.
• L’arrivée au marché des PC.
• L’apparition de serveurs, machines moins chères et moins spacieuses que les ”mainframe”, avec cependant une capa-
cité de calcul et de stockage analogue à celle des ”mainframe”.
• L’émergence de systèmes d’exploitations standardisés tels que UNIX ou Windows NT.
• L’apparition des SGBD indépendants de la plate-forme 2 et disponible pour tous les systèmes d’exploitation standar-
disés
L’approche Client/Serveur implémente une décentralisation des applications BD. En fait, les BD sont gérées sur un
serveur BD, tandis que les interfaces pour visualiser et manipuler les données (p.ex. formulaires, rapports) se trouvent sur
les PC client, dans un environnement ergonomique 3 .
2. par plate-forme, on entend l’ordinateur sur lequel est exécuté le SGBD
3. plus facile à utiliser
64
Sur le poste client se trouve donc en principe un SGBD client, offrant toutes les fonctionnalités requises, qui émet des
requêtes formulées dans un langage d’interrogation de données 4 au serveur BD via le réseau. Le serveur exécute les requêtes
qui lui ont été transmises et renvoie le résultat au client. Le client représente alors le résultat en se servant par exemple d’un
formulaire ou d’un rapport qui a été défini antérieurement.
Les tables
5.1 Introduction
Une table est une collection de données relatives à un domaine bien défini, par exemple les employés d’une société ou
les livres d’une bibliothèque. Elle contient des enregistrements dont chacun est composé par les mêmes champs de données.
Voici, Cf. Figure 5.1 , quelques employés d’une société :
Voici la table nécessaire pour stocker les informations concernant ces employés dans une BD :
• Les champs de données définissent les informations, qu’on veut stocker dans la table (p.ex. des informations concer-
nant les employés d’une société).
• Chaque enregistrement représente une occurrence de ce qu’on veut stocker (p.ex. un employé).
• Chaque champ peut représenter des données de nature différente (Nom, Salaire, Date de naissance . . . ).
• Chaque champ peut représenter des données de type différent (Texte, Nombres, Dates, . . . ).
Convention des noms Il existe une convention concernant les noms des objets des BD. Généralement, les noms des
objets ne contiennent ni d’espaces, ni de caractères spéciaux. En plus, chaque nom d’un objet est précédé par un préfixe bien
déterminé pour chaque type d’objet. Cette convention fait partie d’une convention des noms générale pour les programmes
tournant sous une interface graphique du type Windows.
Les noms de tables sont précédés du préfixe tbl (angl. : table).
Exemple 71.
tblLivres, tblEmployés
Le nom d’une table doit être unique à l’intérieur d’une BD.
Une BD peut contenir une ou plusieurs tables, mais les tables sont généralement la condition nécessaire pour la création
d’autres objets tels que les requêtes, formulaires et rapports.
Exercice 19.
Déterminez les champs nécessaires pour une table qui contiendra des données concernant :
2. les livres d’une bibliothèque (nous supposons qu’un livre est rédigé par un seul auteur) ;
• Marque
• Modèle
• Cylindrée
• Poids
Il est évident que les informations sont de types différents. Tandis que la marque et le modèle sont représentés par des
chaı̂nes de caractères (p.ex. ”Ford”, ”BMW”, . . . ), la cylindrée et le poids sont représentés par des valeurs numériques.
La figure 5.3 montre à titre d’exemple, une table qui représente les taxis dans une BD :
Afin de pouvoir représenter des données de types différentes, les SGBD offrent des types de données standards pour les
champs de données. La figure 5.4 les types de données connus par la plupart des SGBD :
Consultez le manuel d’utilisation de votre SGBD pour trouver des informations plus détaillées concernant les types de
données supportés.
Remarque : Les nombres qui ne sont pas utilisés lors de calculs numériques (p.ex. No.Tél) sont généralement représentés
à l’aide du type de données ”Texte”.
67
Convention des noms : Les noms des champs sont souvent précédés du préfixe fld (angl. : field). Par exemple : fldMarque,
fldModèle, . . .
Exercice 20.
Réfléchissez pour chaque champ des 3 tables, que vous avez défini dans l’exercice de la page 66, sur le type de données
approprié.
Exercice 21.
Détaillez dans la table suivante, pour chaque type de données implémenté par votre SGBD, le nom ainsi qu’une description.
Référez vous au manuel d’utilisation ou au système d’aide en ligne.
Remarque : Lors de la création d’une table, nous devons indiquer au SGBD, pour chaque champ :
1. pour une clé primaire composée de plusieurs champs, la combinaison des valeurs doit être unique
68
Exemple 72.
Le numéro de la matricule pour les assurés des caisses de maladie.
Le numéro client pour les clients d’une vidéothèque.
En ce qui concerne les taxis, nous avons deux possibilités :
1. Analyser s’il n’existe pas d’information concernant les taxis qui ne soit pas encore stockée dans la table et qui ferait
une clé primaire valable. Une telle information serait par exemple le numéro de chassis, unique pour chaque voiture.
On pourrait donc ajouter un champ fldNochassis et définir ce champ comme clé primaire. Ceci a comme désavantage
que le numéro de chassis d’une voiture est un numéro assez long et compliqué, ce qui défavorise une utilisation
conviviale de la table.
2. On pourrait inventer un numéro de taxi allant simplement de 1 jusqu’au nombre de taxis que la société possède. Le
premier taxi enregistré serait le numéro TAXI=1, le deuxième le numéro TAXI=2 etc. . Bien que ce numéro n’ait
aucune signification réelle, cette méthode de création de clés primaires artificielles est très répandue, et la plupart des
SGBD offrent même un type de données prédéfini pour générer des valeurs uniques pour de telles clés primaires.
Notre table aurait dans ce cas la structure de la figure ??.
Convention des noms Les noms des champs qui forment la clé primaire sont souvent précédés du préfixe id (angl. : iden-
tifier). Par exemple : idTaxi, idEmployé
Exercice 22.
Définissez pour chacune des 3 tables, que vous avez défini dans l’exercice de la section 66, une clé primaire parmi les champs
existants, resp. créez un nouveau champ qui assumera le rôle de clé primaire. Indiquez dans la grille de la Figure ?? pour
chaque table toutes les informations nécessaires.
Clé étrangère Un champ qui, dans une table, fait référence à la clé primaire d’une autre table est appelé clé étrangère
(angl. : foreign key). Ainsi sont définies les relations entre les tables.
5.1.4 Index
Une des utilisations fréquentes des tables consiste dans la recherche et le tri des enregistrements.
Lorsque les tables contiennent un grand nombre d’enregistrements, la recherche de certains enregistrements ainsi que le
tri d’enregistrements nécessitent de plus en plus de temps. Les index sont des structures qui accélèrent les tris et recherches
dans les tables, ainsi que l’exécution de certaines requêtes (voir chapitre 7).
Exemple 74.
Soit la BD suivante d’un organisme de sécurité sociale.
Reprenons notre exemple des employés d’une société. Une recherche intéressante serait par exemple : Montre-moi tous
les employés du service Informatique ! Il serait aussi intéressant de trier les employés sur leur nom de famille. Au cas ou la
table contient beaucoup d’enregistrements, on devrait d’abord créer un index sur le champ fldNom, afin d’accélérer le tri.
Créer par exemple un index sur le champ fldNom veut dire que le SGBD copie toutes les valeurs existantes du champ
fldNom dans une liste spéciale à 2 colonnes. La deuxième colonne contient les noms triés en ordre alphabétique, et la
première contient une référence vers l’enregistrement correspondant de la table.
Il est évident que par la suite de la création de cet index, toutes les recherches et les tris concernant le nom de l’employé
sont accélérées, puisque le SGBD consulte uniquement l’index pour retrouver le bon nom, pour ensuite utiliser la référence
de l’index vers l’enregistrement correspondant de la table.
Un index peut aussi comporter plusieurs champs comme par exemple fldService et fldNom.
• Un index peut seulement contenir des champs ayant un des types de données Texte, Numérique ou Date/Heure.
• Un index est automatiquement mis à jour par le SGBD lors d’un ajout, d’une modification ou d’une suppression
d’enregistrements dans la table. Ceci est transparent pour l’utilisateur de la BD.
Voici quelques règles qui nous aident à déterminer les champs d’une table qui ont besoin d’être indexés :
1. La puissance des index joue uniquement pour des tables qui contiennent beaucoup d’enregistrements (Consultez la
documentation de votre SGBD afin d’avoir des précisions).
70
2. Un champ sur lequel on ne fait que rarement ou pas du tout de recherche ou de tri n’a pas besoin d’index.
3. Les champs référencés fréquemment dans les recherches et tris doivent par contre être indexés.
4. Pour les index multi-champs, il faut veiller à ce que la combinaison des champs dans l’index corresponde exactement
au critère de recherche. Un index sur nom&prénom n’accélère pas une recherche du type prénom=Jos & nom=Weber.
5. Un index sans doublons sur un champ empêche l’utilisateur d’entrer la même valeur dans ce champ, dans deux enre-
gistrements différents.
6. Définir trop d’index sur une table ralentit en général les opérations d’ajout, de modification et de suppression, parce
que le SGBD doit mettre à jour la table et l’index.
Remarque : La clé primaire est toujours indexée à l’aide d’un index sans doublons 2 !
TP :
Réaliser les travaux pratiques des pages des pages 87 à 93
Exemples :
L’outil Win’Design constitue une mise en œuvre de la méthode MERISE. Notons que Win’Design a été utilisé pour créer
les modèles conceptuels et logiques présentés dans cet ouvrage. La Figure 5.5 en est une illustration.
L’application Designer de la société Oracle, constituant un atelier de génie logiciel très répandu, implémente une méthode
plus ou moins compatible à MERISE en ce qui concerne la modélisation des données (Entity Relationship Modelling). La
Figure 5.6 en est une illustration.
5.2.2 Fonctionnalités
Bien que les différents outils de modélisation, actuellement disponibles sur le marché, varient considérablement en
termes de caractéristiques et fonctionnalités, ils offrent cependant les fonctions de base suivantes.
• Représentation graphique des modèles conceptuels et logiques avec les différents objets (p.ex. entités, relations, pro-
priétés, identifiants, tables, attributs, clés etc.). Vérification des règles de construction des différents modèles (p.ex.
Une relation ne peut pas être liée à deux entités via des cardinalités 1,1).
• Transformation automatique d’un MCD en MLD en respectant toutes les règles de transformation. Génération auto-
matique d’une BD à partir d’un MLD. Après avoir indiqué le SGBD cible (p.ex. Oracle, MS-Access, Informix), le
concepteur peut demander à l’outil de créer la BD. Pour ce faire, il existe deux alternatives :
2. Pour la plupart des SGBD, ceci est fait de façon automatique lors de la définition d’un ou de plusieurs champs comme clé primaire .
3. plusieurs commandes dans un langage supporté par le SGBD cible.
71
• Génération automatique de rapports imprimés concernant l’état actuel d’un travail de conception. Ces rapports contiennent
en général la représentation graphique des modèles, des listes avec tous les objets des différents modèles et des expli-
cations supplémentaires concernant certains objets.
72
• Gestion des objets de conception (p.ex. entités, relations, propriétés, identifiants, tables, attributs, clés etc.) dans un
dictionnaire 4 . Pour des petits projets de conception, effectués par un seul concepteur sur un ordinateur, le dictionnaire
est simplement un fichier stocké localement. Toutefois, pour les grands projets, effectués par plusieurs concepteurs,
certains outils de modélisation permettent la gestion d’un dictionnaire sur un serveur en réseau (voir section 4.5).
Dans ce cas, plusieurs concepteurs peuvent travailler en même temps sur un modèle, l’outil de modélisation veillant à
chaque moment que le modèle reste cohérent. L’intégration de plusieurs modèles en un seul modèle, et la gestion des
versions d’un objet ou d’un modèle constituent d’autres caractéristiques supportées par un tel système.
• La plupart des outils de modélisation sont capables de créer un MLD et un MCD à partir d’une BD existante. Ce
procédé, connu sous le nom de ”Reversement d’une BD” (angl. Database Reverse Engineering), est souvent utilisé à
la base d’un projet d’amélioration ou d’extension d’un système d’information existant déjà sous forme informatique.
5.2.3 Application
Pour ce TP, vous allez utiliser le logiciel WinDesign. Ce logiciel permet notamment de créer facilement un MCD et
de générer automatiquement le schéma relationnel et le script SQL de création de la base de données correspondants. Ce
premier exercice vise à vous familiariser avec le logiciel.
Pour cela, vous allez créer dans WinDesign le MCD correspondant à la figure 5.7. Pour ce faire :
• Dans la fenêtre qui s’ouvre, modifier le nom du diagramme, puis cliquer sur Modèle Conceptuel de Données.
• Pour créer une nouvelle entité CLIENT, cliquer sur l’icône Entité dans la barre d’outil.
• Positionner la nouvelle entité sur le diagramme et entrer le nom de l’entité i-e (CLIENT) dans la fenêtre qui apparait.
• Double-cliquer sur l’entité CLIENT pour faire apparaitre la fenêtre permettant de décrire plus précisément l’entité.
• Cliquer sur le bouton Détails pour afficher la fenêtre de description détaillée des attributs de l’entité.
• Compléter la liste des propriétés (attributs) de l’entité CLIENT. Pour l’attribut NumClient, préciser qu’il s’agit de
l’identifiant de l’entité. Cliquer sur OK pour valider (voir fenêtre page suivante).
• Enregister votre modèle. Pour cela, choisir Enregistrer dans le menu Fichier. Le format du fichier enregistré est .mcd.
Dans la suite du TP, penser à enregistrer régulièrement votre modèle.
• Répéter ces opérations afin de créer une entité PRODUIT et une entité COMMANDE.
Remarque : En cas de problème, il est possible de supprimer une entité du modèle. Pour cela, sélectionner l’entité à
supprimer, puis choisir Supprimer dans le menu Editer.
73
F IGURE 5.8
• Pour créer une association entre entités, on utilise l’icône Association de la barre d’outil.
• Pour créer l’association passe entre CLIENT et COMMANDE, sélectionner les deux entités puis cliquer sur l’icône
Association de la barre d’outil. Préciser le verbe correspondant à l’association passe dans la fenêtre qui s’ouvre.
• Par défaut, WinDesign met les cardinalités des associations à ”0,n”. Pour modifier la cardinalité de l’association passe
du côté de l’entité COMMANDE, double-cliquer sur le lien entre l’entité COMMANDE et la bulle passe et choisir
la cardinalité ”1,1” dans la fenêtre qui s’ouvre.
• Répéter ces opérations pour créer l’association contient entre COMMANDE et PRODUIT.
Remarque : en cas de problème, il est possible de supprimer une association du modèle. Pour cela, sélectionner la
bulle représentant l’association à supprimer, puis choisir Supprimer dans le menu Editer.
• Il ne reste plus qu’à préciser l’attribut porté sur l’association contient. Pour cela, double-cliquer sur la bulle représentant
l’association contient, puis cliquer sur le bouton Détails dans la fenêtre qui s’ouvre. Préciser le nom de l’attribut porté
(QteCmde) dans la liste des propriétés de l’association.
• 15)Enregister le MCD final.
Il est possible d’exporter ce MCD sous forme d’image (par exemple pour l’intégrer à votre compte-rendu de TP). Pour cela :
• Choisir Exporter image sous-modèle dans le menu Editer
• Choisir l’emplacement où vous voulez enregistrer l’image. WinDesign crée un fichier .jpeg portant le même nom que
le diagramme MCD.
Reste maintenant à générer automatiquement le schéma relationnel correspondant à ce MCD.
• Choisir Générer modèle logique dans le menu Modèle. Cliquer sur le bouton SGBD, puis sélectionner comme
système de gestion de base de données MS Access 2000.
WinDesign génère le schéma relationnel (modèle logique relationnel) correspondant au MCD saisi. Les attributs
constituant la clé primaire de chaque table sont indiqués dans la partie PK nom de la table (PK = primary key).
Enfin, il est possible de générer automatiquement le script de création de la base de données correspondant à ce schéma
relationnel.
• Dans le menu Base de données, cliquer sur Générer script.
• Cliquer sur OK dans la fenêtre de contrôle de la génération du script, puis sur le bouton Voir script de la fenêtre de
fin de génération du script SQL.
Le script généré contient :
– des requêtes de suppression de tables (DROP TABLE) afin de supprimer des tables de même nom que les tables
à créer qui existeraient déjà éventuellement dans le SGBD.
– une requête de création de la base de données (CREATE DATABASE).
– des requêtes de création de tables (CREATE TABLE) et de modification de tables (ALTER TABLE) pour l’ajout
des contraintes d’intégrité référentielle.
– des requêtes de création d’index pour les tables crées (CREATE INDEX).
Dans une base de données, les index sont utilisés par le SGBD afin de retrouver plus rapidement les informations
dont il a besoin. Cela permet notamment d’améliorer les performances du SGBD
• Identification relative : Il est possible de définir une identification relative avec WinDesign.
Exemple : Identification relative d’une salle du bâtiment I de PrepaVogt par rapport à l’étage où elle se situe. Cf Figure
5.9 Pour cela, il suffit de créer une association est située dans entre ETAGE et SALLE et de modifier la cardinalité
de l’association du côté de SALLE en précisant qu’il s’agit d’un lien identifiant (en cochant sur Identifiant relatif).
4. une sorte de récipient logique pour les objets de conception.
74
F IGURE 5.9
• Association réflexive : Exemple : Un salarié encadre plusieurs autres salariés (en tant que chef). Cf Figure 5.10 Pour
F IGURE 5.10
Les requêtes
6.1 Définition
Nous avons vu que la plupart des SGBD offrent la possibilité d’effectuer des recherches directement dans les tables.
Les possibilités de formuler des critères de recherche sont cependant souvent assez limitées. Heureusement, la plupart des
SGBD nous offrent également la possibilité de poser pratiquement n’importe quelle ”question” à nos tables, sous forme de
requêtes.
Les requêtes servent donc à répondre aux questions basées sur le contenu d’une ou de plusieurs tables. Nous allons plus
tard étudier des requêtes, qui se basent sur plusieurs tables, mais pour l’instant nous allons nous limiter aux questions simples
basées sur une seule table. Exemple 75.
Reprenons notre table avec les taxis (Cf. Fig 5.3) Une requête simple serait par exemple :
• Quelles sont les marques et modèles des voitures ayant une cylindrée supérieure à 2000 ?
Le résultat serait un sous-ensemble de la table avec seulement les enregistrements qui vérifient le critère de sélection (cy-
lindrée ¿ 2000). Pour chacun de ces enregistrements, le SGBD affiche en plus seulement les champs explicitement demandés
(fldMarque et fldModèle).
Une requête simple produit donc comme résultat un sous-ensemble des enregistrements d’une table. En plus, une requête
nous permet d’afficher seulement certains champs pour les enregistrements appartenant à ce sous-ensemble.
On appelle ces requêtes ”Requêtes de Sélection”, puisqu’il s’agit d’une sélection de certains enregistrements.
Il n’existe cependant pas seulement des requêtes de sélection, mais également :
• Des requêtes d’insertion consistant à insérer des enregistrements dans la table. p.ex. Insérer un nouveau taxi : 4, BMW,
325i, 2500, 1270.
• Des requêtes de modification consistant à modifier des enregistrements dans la table. p.ex. Modifier la cylindrée des
Ford Orion de façon à ce qu’elle devienne 2000.
• Des requêtes de suppression consistant à supprimer des enregistrements de la table. p.ex. Supprimer toutes les BMW.
Les requêtes possèdent l’avantage de pouvoir manipuler facilement un grand nombre d’enregistrements sans que l’utili-
sateur ne doive s’occuper de sélectionner enregistrement par enregistrement. Il lui suffit de spécifier des critères de sélection
pour la requête, ainsi que l’opération à effectuer (simple sélection et affichage, insertion, modification ou suppression).
Bien que les requêtes de sélection soient implémentées d’une manière plus ou moins cohérente à travers les SGBD
actuels, il existe des différences subtiles en ce qui concerne les requêtes d’insertion, de modification ainsi que de suppression.
En plus, l’insertion et la suppression se font souvent de manière plus facile directement dans la table.
Il existe 4 types de requêtes :
1. Requêtes de sélection.
2. Requêtes d’insertion.
3. Requêtes de modification.
4. Requêtes de suppression.
76
F IGURE 6.1
Exercice 23.
Quel est en général le résultat d’une requête :
• de sélection
• d’insertion
• de modification
• de suppression
1. Requêtes de sélection.
2. Requêtes d’insertion.
Attention : Lorsque vous n’indiquez pas la liste des champs derrière INSERT INTO , vous devez spécifier une valeur
pour chaque champ de la table derrière VALUES . Les parenthèses derrière VALUES sont obligatoires. La liste des
champs, lorsqu’elle est indiquée, contient les noms des champs, séparés par une virgule, et doit également être entourée
de parenthèses.
3. Requêtes de modification.
Soit une table des employés d’une entreprise avec la structure suivante :
F IGURE 6.2
F IGURE 6.3
SELECT fldNationalité
FROM tblEmployés;
ou
SELECT *
FROM tblEmployés;
Remarque : L’opérateur * permet d’afficher tous les champs définis dans la table.
Comparaison à une valeur donnée Pour chaque enregistrement, la valeur d’un champ donné est comparée à une valeur
fixe. Cette valeur fixe est généralement une valeur numérique, une date ou un texte.
Voici les opérateurs de comparaison :
= ”est égal”
¿ ”strictement supérieur”
¡ ”strictement inférieur”
¿= ”supérieur ou égal”
¡= ”inférieur ou égal”
¡¿ ”est différent”
Exemple 77.
2. Afficher le prénom, le nom et l’âge de tous les employés plus jeunes que 50 ans
UPDATE tblEmployés
SET fldAge=fldAge+1
WHERE fldNom=’Portante’;
Remarque : Cette requête peut provoquer des résultats imprévus au cas ou plusieurs employés ont par exemple le
même nom. Pour être certain de ne pas commettre d’erreur, il faudrait d’abord sélectionner tous les employés qui
s’appellent ”Portante”. Lorsque cette requête ne fournit qu’un seul enregistrement, vous pouvez exécuter la requête
comme indiqué en haut. Par contre lorsque vous remarquez que la table contient plusieurs employés au nom de
”Portante”, vérifiez les enregistrements, et retenez la valeur de la clé primaire (idEmployé) pour l’employé que vous
désirez modifier. Ensuite utilisez la valeur de idEmployé dans la partie WHERE de la commande UPDATE ( ?.WHERE
idEmployé=¡valeur¿).
4. Effacez tous les employés du service Informatique.
Exemple 78.
Pour rechercher des personnes dont le nom est ’SCHMITZ’ ou ’SCHMITT’ ou ’SCHMIT’ etc. on définit par exemple le
filtre suivant : ’SCHMI%’
Le filtre ’BL ’ sélectionne par exemple les valeurs ’BLEU’ ou ’BLUE’ mais pas ’BLANC’
Les filtres sont utilisés ensemble avec le mot réservé LIKE. Voici la syntaxe :
WHERE <Nom du champ> LIKE <Filtre>
Exemple 79.
1. Afficher le nom et le prénom des employés dont le prénom contient un trait d’union (p.ex. Jean-Jacques)
2. Afficher le nom, le prénom et l’âge des employés dont le nom commence par ’W’, est composé de 5 lettres et se
termine par ’R’
NOT (Négation logique) L’opérateur NOT inverse le résultat d’une expression logique.
AND (Et logique) L’opérateur AND nous permet de combiner plusieurs conditions dans une expression logique. L’expres-
sion logique retourne uniquement la valeur ’Vrai’ lorsque toutes les conditions sont remplies.
OR (Ou logique) L’opérateur OR nous permet de combiner plusieurs conditions dans une expression logique. L’expression
logique retourne la valeur ’Vrai’ lorsque au moins une des conditions est remplie.
Priorité des opérateurs logiques Lorsqu’on combine plusieurs conditions par des opérateurs logiques, le résultat final
de l’expression logique dépend de l’ordre d’exécution des différentes conditions. Cet ordre est déterminé par la priorité des
opérateurs logiques. Voici l’ordre prédéfini en SQL :
4. Effectuer les OR
Pour modifier cet ordre d’exécution, nous pouvons utiliser des parenthèses afin de grouper les différentes conditions
logiques.
Exemple 80.
1. Afficher le prénom et le nom de tous les employés qui ne travaillent pas dans le service ”Marketing”
Formulez une requête qui affiche exactement le même résultat, sans utiliser l’opérateur NOT.
2. Afficher le numéro d’employé, le prénom et le nom de tous les employés dont le nom ne commence pas par la lettre
’W’
4. Afficher le prénom et nom des employés féminins (code=F) qui ne travaillent pas au service marketing.
ou
5. Afficher tous les champs pour les employés de nationalité luxembourgeoise (Code=LUX) ou portugaise (Code=PRT).
SELECT *
FROM tblEmployés
WHERE fldNationalité=’LUX’ OR fldNationalité=’PRT’;
6. L’employé Emil Meier est transféré du service Comptabilité dans le service Informatique. Reflétez ce changement
dans la table.
UPDATE tblEmployés
SET fldService=’Informatique’
WHERE fldPrénom=’Emil’ AND fldNom=’Meier’;
Remarque Cette requête peut provoquer des résultats imprévus au cas ou plusieurs employés ont par exemple le
même nom. Pour être certain de ne pas commettre d’erreur, il faudrait d’abord sélectionner tous les employés qui
s’appellent Emil Meier. Lorsque cette requête ne fournit qu’un seul enregistrement, vous pouvez exécuter la requête
comme indiqué en haut. Par contre lorsque vous remarquez que la table contient plusieurs employés au nom de
Emil Meier, vérifiez les enregistrements, et retenez la valeur de la clé primaire (idEmployé) pour l’employé que vous
désirez modifier. Ensuite utilisez la valeur de idEmployé dans la partie WHERE de la commande UPDATE ( ?.WHERE
idEmployé=¡valeur¿).
7. Affichez tous les champs pour les employés féminins de nationalité luxembourgeoise (Code=’LUX’) ou allemande
(Code=’ALL’)
SELECT *
FROM tblEmployés
WHERE (fldNationalité=’LUX’ OR fldNationalité=’ALL’) AND fldSexe=’F’;
Dans cette partie, essentiellement pratique, nous nous focalisons sur l’implémentation des bases de données.
Nous étudions tour à tour la création d’une base de données, l’interrogation des bases de données, les création des formulaires
d’accès aux données ainsi que les états.
Nous nous appuierons davantage sur le SGBD Access et présentons aussi de façon sommaire un atelier de Génie Logiciel,
WinDesign.
Chapitre 7
N.B. Les TPs se feront essentiellement dans MS Access, peu importe la version en votre possession : le principe général
varie très peu en fonction des versions. Vous vous adapterez bien vite. Vous pourrez par la suite essayer les mêmes exercices
sur d’autres SGBD (libres ou pas).
• Sélectionnez votre dossier de travail. Dans la zone ”Nom du fichier”, tapez ”Magasin BD MF 2 MonNom” puis
cliquez sur créer. Par défaut, Une table vide va s’afficher et il va falloir la renseigner.
• En règle générale, il vous suffit de cliquer sur le menu ”Créer” pour apercevoir les différents types d’objets que mani-
pule MS Access que sont : les tables, les requêtes, les formulaires, les états et les macros.
Dans MS Access, une table peut se présenter en mode Création - on y voit alors sa structure - ou en mode Feuille de
données qui montre les différents enregistrements qu’elle contient et permet leur saisie. On peut basculer d’un mode à
l’autre en cliquant sur l’icone ”Affichage” dans la barre d’outils.
Créer une table consiste à déterminer ses différents champs et leurs caractéristiques ainsi qu’à déterminer la clé primaire de
cette table. Pour chaque champ, il est nécessaire de choisir quel type de données il est destiné à recevoir. La description du
champ est facultative.
1. Pour créer une table, choisir l’onglet Créer + le groupe Tables + la commande Création de table.
2. Créer un champ : le nom dd’un champ, qui ne doit comporter ni ponctuation ni opérateur arithmétique, est composé
de 1 à 64 caractères alphanumériques (cf. Aide). Je vous conseille d’éviter l’espace.
Application : Ajoutons le premier champ : Dans la colonne Nom du champ de la première ligne, tapez ”N˚ Client”
puis passez à la ligne suivante à l’aide de votre souris ou de la flèche de direction du clavier.
Remarquez que par défaut, le type de la donnée est ”Texte”.
Taper successivement dans les lignes suivantes ”Nom”, ”Prenom”, ”BP”, ”Date Naissance”, ”Telephone”, ”Ville”,
”Observations” sans accent (quoiqu’on ne soit pas obligé).
3. Sélectionner un champ : Quand un champ est sélectionné, la couleur distinctive à gauche de la colonne ”Nom de
Champ” indique que le champ est actif. Pour déplacer, supprimer ou insérer un champ, il faut sélectionner l’intégralité
de la ligne en cliquant sur cette couleur-là.
4. Insérer un champ :
Application : Ajoutons entre les champs ”Ville” et ”Observations”, un champ intitulé ”Sexe” correspondant au sexe
du client.
Sélectionner la ligne du champ ”Observations” et cliquez sur la touche ”Insérer des lignes” dans le groupe ”Outils du
88
menu ”Création”. Vous pouvez aussi ajouter une ligne en cliquant sur le bouton droit de la souris ”Insérer une ligne”.
Dans le nouveau nom du champ apparu, tapez ”Sexe”.
5. Supprimer un champ :
Application : supprimer le champ ”Telephone”. Sélectionner la ligne, et taper sur la touche SUPP (ou supprimer en
cliquant sur le bouton droit de la souris ”supprimer la ligne”). Insérez ce champ à nouveau.
6. Déplacer un champ :
Application : Déplaçons les champs ”Sexe” et juste avant le champ ”BP”.
Pour cela, sélectionnez la ligne ”Sexe”, et sans relâcher le bouton, faites-la glisser juste au-dessus de la ligne du champ
”BP”. Faites de même pour ”Date Naissance”
7. Type de données : cette colonne détermine la valeur contenue dans chaque champ. On a :
Type Description
Texte Texte ou suite de chiffres n’ayant pas de valeur mathématique et n’in-
tervenant pas dans des calculs
Mémo Champs texte ayant pour taille maximale 65536 caractères.
Numérique Valeurs numériques pouvant faire l’objet de calculs, excepté les valeurs
monétaires.
Date/Heure Champ numérique formaté sous forme d’une date et/ou d’une heure
Monétaire Champ numérique formaté sous forme monétaire
NuméroAuto Champ compteur qui s’incrémente automatiquement à chaque saisie
d’un nouvel enregistrement. Un tel champ est souvent utilisé comme
clé primaire.
Oui/Non Pour les champs qui ne comptent que deux états Oui/Non, Vrai/Faux
Objet OLE Objet crée par un logiciel autre qu’Access, par exemple un dessin ou
une photographie
Lien hypertexte Adresse d’un lien hypertexte vers une page (URL)
Assistant Liste Crée un champ qui permet de déterminer une valeur à partir d’une liste
de choix de valeurs prédéterminées figurant dans une liste déroulante
8. NuméroAuto (Compteur automatique) : Il s’agit de type associé aux valeurs attribuées automatiquement par Access à
chaque nouvel enregistrement. On l’utilise pour créer des numéros séquentiels (ou arbitraires selon les cas) pour les
factures, les clients ? Cependant, les numéros supprimés ne sont jamais remplacés. Application : Pour le champ ”N˚
Client”, choisir NuméroAuto dans le menu déroulant.
9. La colonne ”Description” permet d’ajouter des commentaires décrivant le rôle du champ y relatif.
Application : Tapez ”Numéro automatique attribué par Access” dans la zone description de ”N˚ Client”
10. Clé Primaire : Le numéro attribué à chaque nouvel enregistrement de ”N˚ Client” étant unique dans la table, c’est sur
lui qu’on place la clé primaire qui nous permettra de relier la table Client à d’autres tables.
Application : sélectionnez le champ ”N˚ Client” puis cliquez sur le symbole de la clé primaire dans la barre d’outils
du menu ”Création”. Une clé apparaı̂t à gauche du champ.
• ”Taille” : Quand un champ est de type Texte, sa taille désigne le nombre de caractères. S’il est de type numérique,
elle désigne les limites des nombres.
Application : Pour le type de données du champ ”N˚ Client”, choisir numérique et conserve la taille ”Entier
long”.
Remarque : La taille ”Entier long” est obligatoire pour le type NuméroAuto.
• ”Indexée” : Les champs qui feront l’objet d’un tri doivent être indexés. Le champ de la clé primaire doit toujours
être indexé. Les factures seront triées par ordre de numéro. En fait, ce n’est pas une obligation, mais cela facilite
les recherches.
Application : choisissez ”oui-sans doublons” dans la propriété ”indexé” du champ ”N˚ Client” car c’est une clé
primaire. On l’appliquera systématiquement à tout ce qui est clé primaire.
89
• ”Format” : Elle définit le format d’affichage lors de la consultation de la table.
Application : Pour le champ ”Date Naissance”, choisissez Date/heure dans le type de données.
Dans la propriété Format, choisir Date, abrégé.
• ”Légende” : Par défaut, le nom du champ est utilisé comme intitulé dans les formulaires. Cette propriété permet
de modifier l’intitulé.
Application : Passez en mode feuille de données et remarquez le nom de champ correspondant à la date de
naissance. Repassez en mode création. Tapez ”Date de Naissance” dans la propriété légende et ”N˚ de Client”
pour le champ ”N˚ Client” et faites de même pour les autres champs. Réactivez le mode feuille de données. Que
constatez-vous ?
• ”Valeur par défaut” : La valeur définie ici sera automatiquement insérée pour les nouveaux enregistrements.
Par défaut, le champ Date Naissance contiendra la date du jour. La fonction ”Maintenant” retourne cette valeur.
Application : Tapez ”maintenant” dans la propriété ”Valeur par défaut”. Remarquez, qu’Access reconnaı̂t la
fonction maintenant. En effet, ”m” de ”maintenant” passe en majuscule et des parenthèses sont ajoutées.
• ”Valide si” et ”Message si erreur” : la propriété ”Valide si” vérifie si la saisie est correcte. Sinon, le message
contenu dans la propriété ”Message si erreur” est affiché.
Application : On souhaite que la date de la facture soit antérieure à la date du jour. Pour cela, tapez ”¡= mainte-
nant” dans la propriété Valide si. Dans ”message si erreur”, tapez ”Pas de naissance postdatée”.
• ”Null interdit” : Quand elle est sur Oui, cette propriété oblige l’utilisateur (qui renseigne les différents chants)
à taper une valeur. Sinon, des valeurs non renseignées dans ce champ peuvent être admises. En principe, toutes
les clés doivent avoir leur propriété ”Null interdit” fixée à Oui.
Application : ”N˚ Client”.
12. Sauver la table : Cliquez sur l’icône représentant une disquette (dans la barre d’outils) pour enregistrer la table. Tapez
”Clients” dans la zone ”Nom de la table” puis cliquez sur Ok.
Fermer la fenêtre Magasin : Table
13. En guise d’exercice, Créez les autres tables primaires représentées dans la BD ci-dessous.
N.B. On ne crée pas les tables au hasard. On les créera dans l’ordre suivant :
• Fermez tous les autres onglets et double-cliquez sur la table ”Clients”. Dans le menu ”Accueil”, cliquez sur la pe-
tite flèche apparaissant en contrebas de l’outil ”Affichage”. Vous voyez apparaı̂tre tous les accès possibles. Cliquez
successivement sur les différents modes d’affichage ”création” et ”feuille de données”. Avez-vous remarqué que le
champ ”Date naissance” contient une valeur dite valeur par défaut ? Trouvez vous-même une explication à cela.
• Renseignez les champs d’une ligne de cette table, un peu comme si vous étiez sur Excel. Faites de même pour une
deuxième ligne de la table. Et surtout, ne vous privez pas de modifier la date de naissance si cela ne vous convient pas.
• Par ailleurs, quelle est l’apparence du nom de ce champ ? ”Date naissance” ou ”Date de naissance” ? Que faire pour
voir apparaı̂tre ”Date de naissance” plutôt que ”Date naissance” ?
(Réponse : Cf. TP de la page 105, propriété Légende et retenez la leçon une fois pour toute).
• En mode d’affichage ”feuille de données”, dans le champ ”Sexe” de la table, réalisez vous-même que vous êtes libre
d’introduire la valeur qui vous plaı̂t : certains ”F”, d’autres ”Fem” ou encore ” ”Féminin” ” pour désigner la gent
féminine. Ou encore ”M”, ”Masc” voire ”Masculin” pour le ”sexe fort” . . . sans tabou. Et vous pensez avoir une BD
cohérente ? Que non ! Essayez par exemple ”FemMasc” ou ”MascFem”. N’est-ce pas accepté comme valeur ?
• Eh ben ! Nous allons contraindre l’utilisateur à choisir dans une liste, des valeur que nous allons lui fournir. Pour cela,
activez la table ”Clients” en mode ”création”. Dans le type de données correspondant au sexe du client, sélectionnez
la dernière option i-e ”Assistant Liste de choix”. Lisez ce qui s’affiche. Sélectionnez ensuite la deuxième option. En
cliquant sur ”Suivant”, un tableau minuscule s’affiche ; sur la même colonne intitulée par défaut ”Col1” sur la ligne
ayant l’astérisque, saisissons une première valeur ”F” (pour ne pas faire honte à l’élégance). Puis juste en dessous,
”M”. Si vous pensez qu’il peut y avoir une troisième valeur différente des deux autres, saisissez-là . . . Si vous l’avez
fait, regardez-vous au miroir ! En avez-vous le courage ? Cliquez sur ”Suivant”. Laissez le champ par défaut ”Sexe”
qui va ainsi remplacer le titre ”Col1” et n’autorisez pas plusieurs valeurs pour ce champs. Terminez la besogne.
• Activez le mode ”feuille de données” de la table et essayez de saisir un enregistrement supplémentaire avec dans le
champ ”Sexe”, autre chose que ”M” ou ”F”. ça va pas, non ? C’est encore accepté. Rentrons de nouveau en mode
”création” et accédons aux propriétés de ce champ. Cliquez sur l’onglet ”Liste de choix” des propriétés de ce champ.
Lisez les rems qui apparaissent en-dessous. Modifiez la ligne ”Limiter à liste” en inscrivant ”Oui” pour exprimer
qu’aucune valeur autre que ”M” ou ”F” ne doit être saisie. Saisissez un autre enregistrement et faites un constat.
Nous voyons que parmi les types de données, est proposé un type particulier : la liste de choix. Ce n’est pas à proprement
parler un type de données particulier, c’est un moyen de simplifier la saisie de données dans une table en proposant à
l’utilisateur de cliquer sur un élément proposé dans une liste ; le champ de la table sera rempli avec l’élément sélectionné
dans la liste.
Une fois ces clients saisis, nous allons modifier le type de données du champ ”N˚ Client” de la table commande pour y
mettre une liste de choix.
Pourquoi ? Une commande contient le numéro du client qui l’a passée ; lorsque l’on saisit une commande et qu’on n’a que
le nom du client, il faut se souvenir de son numéro pour le taper, la liste de choix va ici proposer la liste de tous les clients se
trouvant dans la table ”Clients”, il suffira de cliquer sur le nom de l’un d’entre eux pour que son numéro soit automatiquement
entré dans le champ ”N˚ Client” de la table ”Commande”.
Application 2 :
91
• Fermez tous les autres onglets et double-cliquez sur la table ”Commandes”
• On change le type de données du champ ”N˚ Client” dans la table ”Commande” et on choisit ”Liste de Choix”. Si
jamais la mayonnaise peine à prendre, remettez d’abord le type Texte pour ”N˚ Client” avant de sélectionner ”Liste
de Choix”.
• Cette fois -ci, nous n’allons pas saisir tous les éléments de la liste, ça n’aurait pas de sens, il faudrait modifier cette
liste à chaque fois qu’on ajoute un nouveau client. Nous allons dire à MS Access de construire sa liste de choix en
allant chercher les éléments de cette liste dans une autre table. Pour ça on clique juste sur ”Suivant”.
• Access nous affiche les autres tables de la base : On choisit ”Clients” et on clique sur ”Suivant”.
• Access nous demande ici quels vont être les champs de cette table qui vont être affichés dans la liste ; nous n’avons
besoin que du numéro du client, de son nom, de son prénom, de sa date de naissance et de sa ville (au cas où il y aurait
deux clients homonymes et habitant la même ville, qui sait ?).
• On sélectionne à gauche les champs que l’on désire voir apparaı̂tre dans la liste, et on clique sur ”¿” pour les ajouter,
sur ”¡” pour les retirer, ”¿ ¿” et ”¡ ¡” ajoutent et retirent tous les champs.
• Nous trions dans l’ordre sur le nom, le prénom, la ville et la date de naissance (sachant que le tri nous facilite la
recherche d’une rem).
• Access affiche un exemple du contenu de la liste. Vous pouvez ici dimensionner la taille des colonnes. Nous avons
choisi d’afficher cinq champs de la table ”Clients” dans notre liste de choix, Access nous demande lequel de ces trois
champs va servir à initialiser le champ ”N˚ Client” de la table ”Commande” ; il est clair que nous voulons que le
champ ”N˚ Client” de la table ”Commande” soit initialisé avec le n˚ de client du client que nous aurons sélectionné
dans la liste, on choisit donc ”N˚ Client” et on clique sur Suivant, on nomme ensuite la liste, et on peut commencer à
saisir des commandes.
• Mais avant, essayez d’accéder aux propriétés de l’onglet ”Liste de choix” du champ ”N˚ Client” de la table ”Commandes”
• essayez de comprendre les rems affichées sans modifier quoi que ce soit.
– D’abord en mode ”création”, remarquez que le type de données correspondant à ”N˚ Client” est désormais
numérique dans la table ”Commandes” alors qu’il est NuméroAuto dans la table ”Clients”. Pourquoi ? Simple-
ment parce qu’en tant que clé étrangère dans la table ”Commandes”, si on le définissait comme NuméroAuto
dans cette table, Access lui attribuerait un numéro de façon automatique à chaque enregistrement de commande,
sans que cela ait un lien direct avec les enregistrements se trouvant dans la table ”Clients”.
– Et maintenant, en mode ”feuille de données”, Access va lire toute la table ”Clients”, et créer une liste de choix à
partir de cette table. Cette liste contient les champs que nous lui avons indiqués. Il suffit de sélectionner un client
dans la liste, et comme nous lui avons demandé d’initialiser le champ ”N˚ Client” de la table ”Commande” avec
la première colonne de la liste de choix, son numéro sera automatiquement copié.
Remarque : Outre les valeurs finies connues (comme c’est la cas avec le champ ”Sexe”, notons que l’utilisation de l’assis-
tant liste de choix se fait sur quasiment toutes les clés étrangères (ici, ”N˚ Client” dans la table ”Clients”).
Exercice : Faites de même pour toutes les autres clés étrangères de la BD.
Nous savons déjà qu’il existe trois types de relations : un à un, un à plusieurs (ou maı̂tre-esclaves) et plusieurs à plusieurs
(maı̂tre-maı̂tre).
Il est avantageux de relier des tables dans la requête pour accéder à de l’rem qu’aucune des tables prises seules ne possède.
Le problème avec cette technique est qu’il faut refaire les relations à chaque fois que vous faites une nouvelle requête. Access
vous offre une manière de créer des relations plus ”permanentes” entre les tables de votre base de données. Elle a aussi
l’avantage de vérifier ”l’intégrité” des relations entre les tables. À partir du menu principal, il est possible d’accéder à la
partie des relations
92
Application 3 :
1. Cliquez sur Relation dans le menu Outils puis ajouter toutes les tables (Un clic sur le bouton des relations suffit). Vous
vous souvenez des relations de type 1-n ou n-n. C’est à partir de ce moment qu’il faut mettre en œuvre les premiers
cours. C’est dans cette fenêtre que vous allez créer les relations entre les tables. Lorsque vous ouvrez cette section
pour la première fois, il n’y a pas de tables ; seulement un grand espace vide. Il faut premièrement ajouter les tables
ou les requêtes que vous voulez relier. Et maintenant, ajoutons toutes les tables de la base. Pour cela :
2. Dans la zone vide, cliquez droit sur ”Afficher la table . . . ”. Dans la fenêtre qui s’affiche, cliquez sur la table Clients.
3. Appuyer sur shift et, sans relâcher le bouton, cliquez sur la table Produits. Toutes les tables sont sélectionnées.
4. Cliquez sur Ajouter et fermez : les tables sont ajoutées dans la fenêtre Relations. Les champs en gras correspondent
aux clés primaires. Vous pouvez réorganiser vos champs en les faisant glisser. Placez-les maintenant de façon à avoir
l’architecture présenté à la page 89.
5. Nous voulons ajouter une relation entre les tables ”Clients” et ”Commandes” puis entre les tables ”Produits” et
”Lignes Commandes”. Pour cela, déplacez maintenant le champ ”N˚ client” de la table ”Clients” sur le champ ”N˚
Client” de la table ”Commandes”. Une fenêtre s’ouvre.
6. Sélectionner ”Appliquer l’intégrité référentielle” qui permet d’éviter les doublons dans une table. En fait, cette
option préserve les relations entre les enregistrements. La liaison est symbolisée par une ligne. Le chiffre 1 indique le
côté où la valeur est unique (un n˚ différent par client) et le symbole ∞ indique le côté ”plusieurs” (plusieurs lignes
de commandes par commande).
N.B. Le coté 1 est toujours une clé primaire ou un champ indexé sans doublon.
7. Sélectionner ”Mettre à jour en cascade . . . ” qui permet de changer les enregistrements dans les tables reliées :
en cas de modification du champ du coté 1, le champ des enregistrements du coté plusieurs est actualisé. Si vous
modifiez le nom d’un client dans la table Clients, toutes les lignes de la table Commandes qui contiennent ce client
seront modifiées (Comme il n’y a aucune raison que le numéro de commande change, nous n’aurons pas obligation
de cocher l’option Mettre à jour en cascade dans la relation Commandes - Lignes Commandes par exemple.).
8. Cocher enfin la case ”Effacer en cascade. . . ” qui permet d’effacer tous les enregistrements des 2 tables reliées.
10. Cliquez et faites glisser le champ ”Code Produit” de la table ”Lignes Commandes” vers le champ ”Code Produit”
de la table ”Produit”. Sauf dans le cas où les deux champs sont des clés primaires, le sens de déplacement n’a pas
d’importance. Access reconnaı̂t les côtés 1 et plusieurs.
11. Cochez Appliquez l’intégrité référentielle. Cochez aussi l’option Mettre à jour en cascade. Vos remarques ? ? ?
12. Et maintenant : Sur la base de ce qui précède, reliez toutes les tables grâce à leurs clés.
13. Supprimer la relation entre Commandes et Lignes Commandes : cliquez avec le bouton droit sur la relation et
supprimez. Cliquez Oui pour confirmer.
14. Recréez cette relation, sans cocher l’intégrité référentielle. Une simple ligne relie alors les deux tables.
15. Modifier une relation : Double- cliquez la relation entre ”Commandes” et ”Lignes Commandes”. La boite Modifi-
cation des relations s’affiche : cochez l’intégrité référentielle et Cliquez Ok.
Enregistrer la mise en forme actuelle en cliquant sur l’icone symbolisant une disquette et fermer la fenêtre relations.
N.B. La fenêtre des relations représente à elle seule la structure de votre base de données. C’est à cette fenêtre qu’il
faut se référer si la base présente des dysfonctionnements.
Exercice : Renseignez les différents champs de chacune des tables : Les clients et autres fournisseurs peuvent être choisis
parmi les étudiant(e)s de la classe : Une 20aine d’enregistrements dans la table ”Clients”, une demi-douzaine au moins
dans la table ”Fournisseurs”, une trentaine dans la table ”Produits”. N’oublions pas non plus de renseigner les tables
93
”Commandes”, ”Lignes Commandes” et ”Fournisseurs Produits”.
• Pour se déplacer parmi les enregistrements de la table, on utilise les icônes fléchées en bas à gauche de la fenêtre de
saisie.
• Pour supprimer un enregistrement, on clique à gauche de la ligne et on appuie sur la touche ”Suppr”, Access vous
demande alors une confirmation.
• Deux petits trucs avant d’en finir avec la saisie de données dans les tables : On peut cacher une colonne, pour ça, on
sélectionne en mode ”feuille de données” un champ quelconque de la table concernée et on clique droit sur l’option
”Afficher les colonnes. . . ”
• La liste des champs (colonnes) de la table s’affiche, vous sélectionnez celles que vous voulez voir apparaı̂tre, celles
que vous n’avez pas sélectionné disparaı̂tront de l’affichage quand vous cliquerez sur ”Fermer”. N.B. Attention, ça les
fait juste disparaı̂tre de l’affichage pour la saisie ; en aucun cas, le champ en Verbatim va être supprimé de la structure
de la table.
• Autre truc intéressant, on peut ”figer” une colonne, à quoi ça sert ? Si pendant la saisie nous voulons avoir en perma-
nence le numéro client, nous allons sélectionner la colonne en Verbatim en cliquant sur son titre : Une fois la colonne
sélectionnée, on clique droit sur ”Figer les colonnes”.
Application au champ ”N˚ client” de la table ”Clients”.
• Que se passe-t-il maintenant ? Quand on va déplacer l’ascenseur en bas pour modifier un des champs de l’enregistre-
ment, la colonne ”N˚ Client” sera toujours visible :
• La colonne ”N˚ Client” a bougé quand on a déplacé l’ascenseur, lorsqu’elle était figée, elle était bloquée.
• Pour autoriser le déplacement de toutes les colonnes et annuler l’option ”Figer les colonnes”, cliquez droit sur l’option
”Libérer les colonnes”.
• Pour trier la table sur un champ, on se positionne sur le champ en Verbatim (peu importe l’enregistrement) et on utilise
la petite flèche à droite pour sélectionner l’option de tri désiré.
• Les filtres permettent de limiter, de façon temporaire, les enregistrements visibles dans la table. On peut filtrer selon
deux méthodes : sur un seul critère ou sur plusieurs.
Chapitre 8
8.1 Introduction
Nous avons vu que la plupart des SGBD offrent la possibilité d’effectuer des recherches directement dans les tables.
Les possibilités de formuler des critères de recherche sont cependant souvent assez limitées. Heureusement, la plupart des
SGBD nous offrent également la possibilité de poser pratiquement n’importe quelle ”Verbatim” à nos tables, sous forme de
requêtes.
Les requêtes servent donc à répondre aux Verbatims basées sur le contenu d’une ou de plusieurs tables. Nous allons
plus tard étudier des requêtes, qui se basent sur plusieurs tables, mais pour l’instant nous allons nous limiter aux Verbatims
simples basées sur une seule table. Exemple 81.
Reprenons notre table avec les taxis (Cf. Fig 5.3) Une requête simple serait par exemple :
Le résultat serait un sous-ensemble de la table avec seulement les enregistrements qui vérifient le critère de sélection (cy-
lindrée ¿ 2000).
Pour chacun de ces enregistrements, le SGBD affiche en plus seulement les champs explicitement demandés (fldMarque et
fldModèle).
Une requête simple produit donc comme résultat un sous-ensemble des enregistrements d’une table. En plus, une requête
nous permet d’afficher seulement certains champs pour les enregistrements appartenant à ce sous-ensemble.
On appelle ces requêtes ”Requêtes de Sélection”, puisqu’il s’agit d’une sélection de certains enregistrements.
Il n’existe cependant pas seulement des requêtes de sélection, mais également :
• Des requêtes d’insertion consistant à insérer des enregistrements dans la table. p.ex. Insérer un nouveau taxi : 4, BMW,
325i, 2500, 1270.
• Des requêtes de modification consistant à modifier des enregistrements dans la table. p.ex. Modifier la cylindrée des
Ford Orion de façon à ce qu’elle devienne 2000.
• Des requêtes de suppression consistant à supprimer des enregistrements de la table. p.ex. Supprimer toutes les BMW.
Les requêtes possèdent l’avantage de pouvoir manipuler facilement un grand nombre d’enregistrements sans que l’utilisateur
ne doive s’occuper de sélectionner enregistrement par enregistrement. Il lui suffit de spécifier des critères de sélection pour
la requête, ainsi que l’opération à effectuer (simple sélection et affichage, insertion, modification ou suppression).
Bien que les requêtes de sélection soient implémentées d’une manière plus ou moins cohérente à travers les SGBD ac-
tuels, il existe des différences subtiles en ce qui concerne les requêtes d’insertion, de modification ainsi que de suppression.
En plus, l’insertion et la suppression se font souvent de manière plus facile directement dans la table.
Au final, il existe 4 types de requêtes :
1. Requêtes de sélection.
2. Requêtes d’insertion.
3. Requêtes de modification.
96
F IGURE 8.1
4. Requêtes de suppression.
Exercice 24.
Quel est en général le résultat d’une requête :
• de sélection
• d’insertion
• de modification
• de suppression
1. Requêtes de sélection.
2. Requêtes d’insertion.
Attention : Lorsque vous n’indiquez pas la liste des champs derrière INSERT INTO , vous devez spécifier une valeur
pour chaque champ de la table derrière VALUES . Les parenthèses derrière VALUES sont obligatoires. La liste des
champs, lorsqu’elle est indiquée, contient les noms des champs, séparés par une virgule, et doit également être entourée
de parenthèses.
3. Requêtes de modification.
97
UPDATE <Nom de la table>
SET <Nom d’un champ>=valeur, <Nom d’un champ>=valeur, . .
WHERE <Critères de sélection>;
4. Requêtes de suppression.
Soit une table des employés d’une entreprise avec la structure suivante :
F IGURE 8.2
F IGURE 8.3
SELECT fldNationalité
FROM tblEmployés;
98
Quel est l’inconvénient de cette requête ?
Soit l’adaptation suivante de la requête :
ou
SELECT *
FROM tblEmployés;
Remarque : L’opérateur * permet d’afficher tous les champs définis dans la table.
Comparaison à une valeur donnée Pour chaque enregistrement, la valeur d’un champ donné est comparée à une valeur
fixe. Cette valeur fixe est généralement une valeur numérique, une date ou un texte.
Voici les opérateurs de comparaison :
= ”est égal”
¿ ”strictement supérieur”
¡ ”strictement inférieur”
¿= ”supérieur ou égal”
¡= ”inférieur ou égal”
¡¿ ”est différent”
Exemple 83.
2. Afficher le prénom, le nom et l’âge de tous les employés plus jeunes que 50 ans
99
SELECT fldPrénom, fldNom, fldAge
FROM tblEmployés
WHERE fldAge<50;
Quel problème se pose lorsqu’on exécute cette même requête encore une fois un an plus tard ?
Comment peut-on éviter un tel problème dès le départ, déjà lors de la conception des tables ?
UPDATE tblEmployés
SET fldAge=fldAge+1
WHERE fldNom=’Portante’;
Remarque : Cette requête peut provoquer des résultats imprévus au cas ou plusieurs employés ont par exemple le
même nom. Pour être certain de ne pas commettre d’erreur, il faudrait d’abord sélectionner tous les employés qui
s’appellent ”Portante”. Lorsque cette requête ne fournit qu’un seul enregistrement, vous pouvez exécuter la requête
comme indiqué en haut. Par contre lorsque vous remarquez que la table contient plusieurs employés au nom de
”Portante”, vérifiez les enregistrements, et retenez la valeur de la clé primaire (idEmployé) pour l’employé que vous
désirez modifier. Ensuite utilisez la valeur de idEmployé dans la partie WHERE de la commande UPDATE ( ?.WHERE
idEmployé=¡valeur¿).
Exemple 84.
Pour rechercher des personnes dont le nom est ’SCHMITZ’ ou ’SCHMITT’ ou ’SCHMIT’ etc. on définit par exemple le
filtre suivant : ’SCHMI%’
Le filtre ’BL ’ sélectionne par exemple les valeurs ’BLEU’ ou ’BLUE’ mais pas ’BLANC’
Les filtres sont utilisés ensemble avec le mot réservé LIKE. Voici la syntaxe :
WHERE <Nom du champ> LIKE <Filtre>
Exemple 85.
1. Afficher le nom et le prénom des employés dont le prénom contient un trait d’union (p.ex. Jean-Jacques)
2. Afficher le nom, le prénom et l’âge des employés dont le nom commence par ’W’, est composé de 5 lettres et se
termine par ’R’
NOT (Négation logique) L’opérateur NOT inverse le résultat d’une expression logique.
AND (Et logique) L’opérateur AND nous permet de combiner plusieurs conditions dans une expression logique. L’expres-
sion logique retourne uniquement la valeur ’Vrai’ lorsque toutes les conditions sont remplies.
OR (Ou logique) L’opérateur OR nous permet de combiner plusieurs conditions dans une expression logique. L’expression
logique retourne la valeur ’Vrai’ lorsque au moins une des conditions est remplie.
Priorité des opérateurs logiques Lorsqu’on combine plusieurs conditions par des opérateurs logiques, le résultat final
de l’expression logique dépend de l’ordre d’exécution des différentes conditions. Cet ordre est déterminé par la priorité des
opérateurs logiques. Voici l’ordre prédéfini en SQL :
4. Effectuer les OR
Pour modifier cet ordre d’exécution, nous pouvons utiliser des parenthèses afin de grouper les différentes conditions
logiques.
Exemple 86.
1. Afficher le prénom et le nom de tous les employés qui ne travaillent pas dans le service ”Marketing”
Formulez une requête qui affiche exactement le même résultat, sans utiliser l’opérateur NOT.
2. Afficher le numéro d’employé, le prénom et le nom de tous les employés dont le nom ne commence pas par la lettre
’W’
3. Afficher le numéro de l’employé, le prénom et le nom pour les employés du service Informatique qui ont moins de 30
ans.
101
SELECT idEmployé, fldPrénom, fldNom
FROM tblEmployés
WHERE fldService=’Informatique’ AND fldAge<30;
4. Afficher le prénom et nom des employés féminins (code=F) qui ne travaillent pas au service marketing.
ou
5. Afficher tous les champs pour les employés de nationalité luxembourgeoise (Code=LUX) ou portugaise (Code=PRT).
SELECT *
FROM tblEmployés
WHERE fldNationalité=’LUX’ OR fldNationalité=’PRT’;
6. L’employé Emil Meier est transféré du service Comptabilité dans le service Informatique. Reflétez ce changement
dans la table.
UPDATE tblEmployés
SET fldService=’Informatique’
WHERE fldPrénom=’Emil’ AND fldNom=’Meier’;
Remarque Cette requête peut provoquer des résultats imprévus au cas ou plusieurs employés ont par exemple le
même nom. Pour être certain de ne pas commettre d’erreur, il faudrait d’abord sélectionner tous les employés qui
s’appellent Emil Meier. Lorsque cette requête ne fournit qu’un seul enregistrement, vous pouvez exécuter la requête
comme indiqué en haut. Par contre lorsque vous remarquez que la table contient plusieurs employés au nom de
Emil Meier, vérifiez les enregistrements, et retenez la valeur de la clé primaire (idEmployé) pour l’employé que vous
désirez modifier. Ensuite utilisez la valeur de idEmployé dans la partie WHERE de la commande UPDATE ( ?.WHERE
idEmployé=¡valeur¿).
7. Affichez tous les champs pour les employés féminins de nationalité luxembourgeoise (Code=’LUX’) ou allemande
(Code=’ALL’)
SELECT *
FROM tblEmployés
WHERE (fldNationalité=’LUX’ OR fldNationalité=’ALL’) AND fldSexe=’F’;
8.3.1 Présentation
Les requêtes vont servir à afficher uniquement certaines données contenues dans les tables selon certains critères. Elles
peuvent aussi faire des calculs sur vos données, et créer des sources de données pour les formulaires, les états et d’autres
requêtes pour ne citer que ces quelques applications.
Il existe différents types de requêtes que nous allons détailler dans la suite. On a ainsi la requête :
• Sélection permettant de sélectionner des enregistrements, de faire des calculs et des regroupements.
• Analyse croisée qui présente ses résultats sous forme de tableau. On l’utilisera pour comparer des valeurs, dégager des
tendances.
• Création de table qui permet de créer une table à partir des données qu’elle a extraites dans une ou plusieur(s) autres
table(s).
• Mise à Jour qui permet de modifier le contenu d’un ou plusieurs champs d’une ou plusieurs tables. C’est le moyen le
plus efficace pour mettre à jour un grand nombre d’enregistrements en une seule opération.
• Ajout qui permet d’ajouter les données qu’elle a extraites à la fin d’une table déjà existante.
Fonctions On peut intégrer des fonctions dans les critères de sélection. Access met à notre disposition un très grand
nombre de fonctions (pour en avoir la liste complète, consultez l’aide intégrée à Access). Ce sont les mêmes fonctions que
celles qui sont utilisés dans les contrôles des formulaires (et d’ailleurs dans tous les logiciels de la gamme Microsoft Office).
Exemple : Mois (#15/07/2014#) renvoie 7.
Une autre fonction, Date() renvoie la date du jour. On peut utiliser ces fonctions dans des critères de sélection :
Application : (Requête 2 nommée ListeFilms1971). Quels sont les films produits en 1991 ?
Application : (Requête 3 nommée CapaciteEntre). Quelles sont les salles de capacité comprise entre 50 et 200 ?
105
8.3.4 Plusieurs critères portant sur des champs différents
On peut avoir plusieurs critères de sélection, ces critères étant séparés entre eux par des OU ou des ET.
Application : (Requête 4 nommée ActeurLIKEn). Quelle est la liste des acteurs dont le nom commence par ”K” ou prénom
commence par ”A” ?
Application : (Requête 5 nommée ReservationC25000). Quelles sont les séances du film dont le tarif est plus grand
que 5000 ?
En règle générale :
• Si deux critères sont séparés par des ET, on les place sur la même ligne.
• Si deux critères sont séparés par des OU, on les place sur des lignes différentes.
• Il ne doit pas y avoir de tables n’ayant rien à faire dans la requête, sinon Access pourrait produire des résultats erronés
pour votre requête.
En résumé : toutes les tables nécessaires, mais pas plus. Vous pouvez également noter que, une fois les bonnes tables
installées avec les bonnes relations entre elles, la requête est fort simple, il suffit d’indiquer produits=P001, et Access, grâce
aux relations, va retrouver la liste des clients ayant commandé ce produit.
Application : (Requête 7 nommée ActeursVertigo). Quelle est la liste des Acteurs (Nom et Prénom) ayant joué dans le film
Vertigo après l’année 1990.
106
8.3.7 Les fonctions de regroupement
Jusqu’à présent, nos requêtes nous permettent de répondre à des Verbatims du type : ”Liste des clients habitant Douala”,
”Liste des produits commandés par le client 1”. Grâce aux fonctions de regroupement, nous allons pouvoir répondre dans le
TP de la page , à des Verbatims du type : ”Combien de clients habitent Douala ?” ou ”Pour combien à commandé chaque
client ?”.
Pour cela, cliquez sur le bouton Σ :
Une nouvelle ligne ”Opération” apparaı̂t dans la requête, c’est grâce à elle que nous allons faire nos opérations.
a- Combien de clients habitent Douala ?
Qu’y-a-t-il de différent ? Nous avons deux champs : nous allons compter le nombre de clients. Puisque chaque client a
un numéro, on insère dans la requête le numéro de client car c’est le nombre de ces numéros que nous allons compter,
il faut qu’on compte les clients habitant Douala, d’où l’insertion du deuxième champ, Ville. La différence est sur la ligne
Opération : Elle indique comment va se faire l’opération, si nous voulons compter, on va choisir l’opération ”compte”. Dans
tous les champs où il y a un critère de sélection (ici Ville = ”Douala”), on choisira l’opération où. Le résultat de la requête
sera une table avec un unique champ, non modifiable, qui indiquera le nombre de clients habitant Paris.
b- Montant commandé par chaque client. Exercice : ! ! ! 3 minutes de réflexion sincère avant la . . . .
Solution ! Ca se corse ! Ici, on veut, par client, la somme de ses commandes.
Nous ajoutons tout d’abord les champs numéro, nom et prénom à notre requête, après avoir pris soin de sélectionner toutes
les tables utiles à savoir, ”Clients” et ”Produits”. Cependant, comme elles sont liées par d’autres tables, celles-là aussi sont
sélectionnées car cela nous servira à établir le lien entre les données. ( ! ! ! Encore les relations : mal faites, c’est le désastre.
Et même dans votre vie). A partir du moment où on veut un résultat par catégorie (une somme par client, un nombre de
clients par ville, etc ?), il y a regroupement, ici on veut la somme des commandes regroupées par clients, c’est pour ça qu’on
a choisi comme opération pour numéro de client ”Regroupement”.
Pourquoi a-t-on ajouté le champ ”nom” ? Simplement pour ne pas avoir une liste de numéros avec un montant correspondant.
Il faudrait encore fouiller pour savoir à qui est le numéro en Verbatim.
Pourquoi dans ce cas, n’a-t-on pas regroupé les clients par leur nom au lieu de le faire par numéro et nom ? Parce que plusieurs
clients peuvent avoir le même nom et qu’on ne veut pas cumuler le montant des commandes par clients homonymes, on
regroupe donc les clients par numéro et nom.
Enfin, le troisième champ : on veut la somme du montant des commandes : qu’est-ce qu’une commande ? c’est une liste
de prix unitaires * une quantité. A la place d’un champ, on indique donc qu’on veut les prix unitaires * les quantités. La
syntaxe est [nom de la table] ![champ de la table], une commande, c’est donc une liste de [produits] ![prix unitaire]
* [lignes commandes] ![quantité]. Et on veut la somme de toutes ces commandes, on choisi donc l’opération ”Somme”.
Visualisez le résultat de la requête. Et, si un même client apparaı̂t plusieurs fois dans votre le résultat de votre requête,
arrangez vous à ne le faire apparaı̂tre qu’une seule fois.
Applications :
1. (Requête 8 nommée NbConcertZ). Combien de concerts ayant pour titre ZANZIBAR ont eu lieu ?
2. (Requête 9 nommée ChampsCalculés). Quel est le Montant et Marge de bénéfice du plein d’une salle
Les opérations
En plus de la somme et de compte, il existe d’autres opérations possibles :
• ”Dernier” pour déterminer la valeur du dernier enregistrement,
• ”Ecartype” pour l’écart type,
• ”Max” pour la valeur la plus élevée,
• ”Min” pour la valeur la plus faible,
• ”Moyenne” pour la moyenne,
• ”Premier” pour la valeur du premier enregistrement,
• ”Somme” pour le total,
• ”Var” pour la variance.
Applications : (Requête 10 nommée OpérationsConcertsXMaleya). Donner le nombre de concerts de XMALEYA ainsi
que la date de présentation la plus récente.
107
D’autres exemples en exercice :
Dans le TP de la page , produire la requête donnant :
• Le nombre de clients nommés X par ville, X étant un paramètre introduit par l’utilisateur (i-e en mode affichage)
• Le montant total des produits X livrés par le fournisseur Y, X et Y étant choisi par l’utilisateur
1. D’abord on crée une requête standard : pour cette requête nous avons besoin du nom dans la table clients, du libellé
du produit dans la table produit et de la quantité commandé dans la table lignescommandes.
2. On transforme la requête en requête d’analyse croisée en allant dans le menu ”Requête” et en choisissant ”Analyse
croisée”.
4. Dans cette ligne, on va indiquer si le champ qu’on a choisi va être l’en-tête des colonnes, l’en-tête des lignes ou la
valeur contenue dans les cases du tableau.
6. L’Opération pour les valeurs des cases dépend de ce qu’on cherche, ici on cherche le nombre de produits acheté,
l’opération est donc ”Somme”
Requêtes Création
Une requête création crée une table à partir des résultats qu’elle produit à partir d’une table existante. Dans le TP de
la page , supposons que nous voulions créer une table ”Commandes réglées” qui contiendrait la liste des commandes déjà
réglées.
4. Exécutez la requête avec l’icône point d’exclamation : la table va être créée avec le résultat de la requête. Si vous vous
voulez vérifier avant de créer la table quel sera le résultat de la requête, cliquez sur l’icône : Une fois que le résultat
sera conforme à vos attentes, vous pourrez cliquer sur l’icône point d’exclamation.
Applications :(Requête 12 nommée AncienFilm). Créer une table ANCIENSFILMS qui contiendrait la liste des concerts
qui sont passés avant l’an 1997.
Requêtes Ajout
Une requête Ajout copie tout ou partie des enregistrements d’une table (la table source) à la fin d’une autre table (la table
cible). Toujours dans notre table ”Commandes réglées”, nous voulons ajouter les commandes qui ont été réglées depuis la
semaine dernière :
1.
4. Access nous demande le nom de la table à laquelle il faut ajouter le résultat de la requête.
5. Comme précédemment, avec les icônes Affichage et point d’exclamation, vérifiez et validez votre requête.
Applications :(Requête 12 nommée AjoutFilm). Dans la table ANCIENSFILMS, ajouter les FILMS de 1997, 1998 1999
et 2000.
1. On crée une requête, et dans le menu Requête, on clique sur ”Requête Mise à Jour”
2. Un champ ”Mise à jour” apparaı̂t dans la requête, c’est là qu’on va indiquer la modification qui va avoir lieu : Dans la
case Mise à Jour, on a indiqué, qu’à la place du prix unitaire, nous voulions [prix unitaire]*1.1 (soit une augmenta-
tion de 10%), ceci pour les produits dont le prix est inférieur à 1000 (critère).
Applications :(Requête 13 nommée Update). Augmenter de 10% le tarif des concerts dont le prix d’entrée est inférieur à
1500.
Chapitre 9
9.1 Présentation
Un formulaire est un objet de base de données qui permet d’entrer, de modifier ou d’afficher les données d’une table ou
d’une requête. Les formulaires permettent également de contrôler l’accès aux données en n’affichant, par exemple, que cer-
tains champs ou lignes de données. Par exemple, il est possible que certains utilisateurs n’aient besoin d’afficher que certains
champs d’une table constituée d’une multitude de champs. En leur proposant un formulaire qui ne contient que ces champs,
il leur sera plus facile d’utiliser la base de données. Vous pouvez également ajouter des boutons et d’autres fonctionnalités à
un formulaire afin d’automatiser les opérations fréquemment effectuées.
Les formulaires peuvent être comparés à des fenêtres à travers lesquelles les personnes voient et atteignent votre base de
données. Un formulaire efficace permet d’accélérer l’utilisation d’une base de données dans la mesure où les personnes
n’ont pas besoin de rechercher les éléments dont elles ont besoin. Un formulaire d’aspect agréable améliore non seule-
ment la convivialité et l’efficacité de la base de données, mais il permet également d’éviter la saisie de données incorrectes.
Microsoft Office Access contient des outils destinés à simplifier la création de formulaires, et propose différents types de
formulaires et de nouvelles fonctionnalités qui améliorent la facilité d’emploi de votre base de données.
Ainsi, le formulaire va nous permettre de manipuler sur une même feuille des rems provenant de plusieurs tables simul-
tanément : par exemple, dans notre exemple de base de données Magasin L3 issu du TP de la page , nous pourrons avoir
un formulaire qui affichera dans la même fenêtre toutes les rems concernant une commande : rems générales sur la com-
mande (provenant de la table Commande, rems sur le client ayant passé cette commande (provenant de la table Clients
et le détail de cette commande (provenant des tables lignes-commande et Produits) alors que précédemment, ces données
étaient éclatées sur plusieurs feuilles de données.
Les rems saisies ou modifiées dans le formulaire seront modifiées dans les tables à partir desquelles le formulaire a été créé.
– Dans le volet de navigation, cliquez sur la table ou la requête qui contient les données que vous souhaitez faire
figurer dans le formulaire (Dans notre cas, la table Clients). Vous pouvez également ouvrir la table ou la requête
en mode Feuille de données.
– Sous l’onglet Créer, dans le groupe Formulaires, cliquez sur Formulaire double affichage.
– Access crée le formulaire et l’affiche en mode Page. Ce mode vous permet d’apporter des modifications à la
conception du formulaire tout en ayant les données affichées. Par exemple, vous pouvez ajuster la taille des
zones de texte en fonction des données à afficher, si nécessaire.
• Créer un formulaire affichant plusieurs enregistrements à l’aide de l’outil Plusieurs éléments : Lorsque vous créez un
formulaire à l’aide de l’outil Formulaire standard, le formulaire créé par Access affiche un seul enregistrement à la
fois. Si vous avez besoin d’un formulaire qui affiche plusieurs enregistrements tout en offrant davantage de possibilités
en termes de personnalisation qu’une feuille de données, vous pouvez utiliser l’outil Plusieurs éléments.
Dans le volet de navigation, cliquez sur la table ou la requête qui contient les données que vous souhaitez faire figurer
dans le formulaire (Par exemple, la table Clients).
Sous l’onglet Créer, dans le groupe Formulaires, cliquez sur Plusieurs éléments.
Access crée le formulaire et l’affiche en mode Page. Ce mode vous permet d’apporter des modifications à la concep-
tion du formulaire tout en ayant les données affichées. Par exemple, vous pouvez adapter la taille des zones de texte
en fonction des données à afficher.
Lorsque vous utilisez l’outil Plusieurs éléments, le formulaire créé par Access ressemble à une feuille de données.
Les données sont disposées dans des lignes et des colonnes, et vous voyez plusieurs enregistrements à la fois. Toute-
fois, un formulaire Plusieurs éléments offre davantage d’options de personnalisation qu’une feuille de données, avec
notamment la possibilité d’ajouter des éléments graphiques, des boutons et d’autres contrôles.
Pour le moment, nous affichons tous les champs de la table Clients. Ensuite nous cliquons sur Suivant. On choisit ici
la façon d’afficher les champs choisis dans le formulaire. Quatre possibilités se présentent :
Colonne simple : Le formulaire va afficher les champs sous la forme : nom du champ : contenu du champ. Le for-
mulaire va afficher les champs d’un enregistrement à la fois.
Tabulaire : Le formulaire va afficher les champs choisis sous la forme d’un tableau : en haut du formulaire vont être
affichés les noms des champs, et, en dessous sous forme de tableau, le contenu, avec un enregistrement par ligne.
Cette façon d’afficher les données ressemble à la feuille de données.
Feuille de données : C’est la même chose que la feuille de données utilisées pour saisir des rems dans une table, la
seule différence est que ne sont affichés ici que les champs sélectionnés dans l’étape précédente.
Justifié : Va afficher les champs choisis les un à la suite des autres, ce n’est pas très beau (enfin c’est une Verbatim
de goût).
Nous utiliserons le plus souvent le mode Colonne simple ou le mode Tabulaire. Nous choisissons ici le mode Colonne
Simple, puis on clique sur Suivant.
On choisit ici le ”décor” que l’on va donner au formulaire, il existe quasiment une trentaine de décors prédéfinis. Bien
sûr, on pourra, par la suite, modifier un décor choisi ici. Choisissez le décor qui vous semble le meilleur (celui qui
vous plaı̂t le plus).
Enfin, on va nommer son formulaire, c’est sous ce nom qu’il apparaı̂tra dans l’onglet Formulaires de la fenêtre
principale d’Access, puis cliquez sur Terminer, le formulaire est créé.
Access nous propose alors de commencer tout de suite la saisie dans notre nouveau formulaire. Vous pouvez voir ici
le formulaire tel qu’il est une fois créé : Il utilise les champs choisis dans la table sélectionnée, il affiche les champs
sous forme de Colonne simple (un couple nom du champ - contenu du champ par ligne) et utilise le décor choisi.
Les rems qui vont être saisies ou modifiées dans ce formulaire le seront dans la table qui est associée à ce formulaire.
Pour se déplacer parmi les enregistrements dans le formulaire, on utilise les icônes fléchés en bas du formulaire :
Exercice :
Sur cette base, créez des formulaires pour chacune des 6 tables de votre BD (Suivre l’ordre de création des tables).
Les contrôles indépendants : Ils n’ont aucune relation avec la table qui est liée au formulaire (n’oubliez pas que chaque
formulaire manipule des rems provenant d’une table de la base). Par exemple une image placée sur le formulaire n’a
pas de relation avec la table, c’est un contrôle indépendant, du texte affiché sur le formulaire (on pourrait par exemple
placer un titre ”Formulaire Clients” en haut du formulaire), ce texte ne provient pas de la table, il n’a aucun rapport
avec elle, c’est donc un contrôle indépendant.
Les contrôles dépendants : Les contrôles dépendants sont liés à la table liée au formulaire, ils vont afficher le contenu d’un
champ, toute modification dans ce contrôle ira modifier le champ auquel il est lié dans la table : Dans notre exemple,
le contrôle à droite est dépendant du champ Nom de la table Clients, il affichera, pour l’enregistrement courant, le
contenu du champ Nom. Toute modification dans ce contrôle ira modifier le contenu du champ Nom de la table Client
pour l’enregistrement en cours.
Attention : Notez que le contrôle à gauche est un contrôle indépendant, il se contente d’afficher le texte ”nom”, tandis
que celui de droite est dépendant et va chercher son contenu dans le champ de la table dont le nom est affiché (champ
”nom”), nous verrons plus bas comment rendre un contrôle dépendant.
Les contrôles calculés : Les contrôles calculés ne vont pas chercher les rems qu’ils vont afficher dans un champ de la table
lié au formulaire mais à partir du contenu d’autres contrôle du formulaire, par exemple un contrôle dans le formulaire
lié à la table Produit pourra afficher le prix TTC à partir des contrôles affichant les prix hors taxe et la TVA.
La liste complète des contrôles que nous pourrons utiliser apparaı̂t dans le bouton Contrôle du menu Création. Vous pouvez
déplacer le curseur sur chacun d’eux pour obtenir leur nom (i-e leur rôle). Nous expliquons ci-dessous le rôle de certains
d’entre eux.
• dans la boı̂te à outils Formulaires du menu Créer , nous cliquons sur Création de formulaire. Access nous crée un
formulaire vierge.
• Ensuite, ce qu’il faut faire, c’est dire à Access où puiser les rems qui figureront sur ce formulaire. Bien entendu, il
s’agit de la table Clients. Alors, nous double-cliquons sur le petit carré noir situé à l’intersection des règles verticales
et horizontales d’Access. Une feuille de propriétés s’affiche, laquelle contient un ensemble d’onglets. Nous cliquons
sur l’onglet Données puis, dans la partie Source de cet onglet, nous sélectionnons la table Clients.
• A partir de là, nous pouvons insérer tous les contrôles nécessaires dans ce formulaire.
Ledit formulaire est ainsi créé, même s’il est encore vierge. Nous nous devons donc d’y insérer un certain nombre de
contrôles (paragraphe suivant). Toute modification effectuée sur le formulaire (choix de couleurs, police de caractères,
images, etc.) ne se fera que via les propriétés du formulaire. Il importe donc de bien parcourir lesdites propriétés pour
en retenir celles qui paraissent essentielles.
3. Access crée en fait DEUX contrôles : il suppose, à juste titre, que l’on va lier ce contrôle avec un champ, il crée
donc un contrôle Etiquette qu’on à vu avant qui contient le texte Texte xx (où xx est un nombre quelconque) et notre
fameux contrôle Zone de Texte qui contient la mention indépendant.
4. On va supposer ici qu’on veut lier ce contrôle au champ Nom de notre table Clients
5. On remplace Texte xx, par Nom : (histoire de savoir ce qu’il va falloir saisir dans le contrôle d’à côté)
6. Vous avez pu noter la mention indépendant, ce qui signifie que, pour l’instant, le contrôle Zone de Texte créé n’est lié
à rien, on peut taper du texte dedans mais le texte ne sera sauvé nulle part. Pour dire à Access qu’on veut sauver ce
texte dans le champ Nom de la table Clients, on clique avec le bouton droit sur le contrôle et on clique sur Propriétés :
(a) Ici se trouvent toutes les propriétés qui vont définir l’aspect et le comportement de notre contrôle, il y en a
beaucoup et je ne vais pas les détailler. Celle qui nous intéresse particulièrement et la propriété Source Contrôle
de l’onglet Données. C’est ici qu’on indique à Access d’où viennent les rems qui vont être affichées dans le
contrôle.
(b) Il y a une flèche qui descend à droite, si on clique dessus, tous les champs de la (ou des) table(s) liés au formulaire
vont s’afficher, on y choisi le champ Nom, et on ferme la fenêtre de propriétés.
7. Le contrôle n’est plus indépendant, à la place de la mention Indépendant, il est affiché Nom, c’est-à-dire le nom du
champ avec lequel il va être lié. A partir de maintenant, lors de l’affichage d’un enregistrement dans le formulaire, le
nom du client sera affiché dans ce contrôle, et toute modification de son contenu sera répercutée dans la table. Nous
pouvons le vérifier (en mode affichage).
Cette fois-ci, nous allons afficher le formulaire sous forme Tabulaire. Comme ce formulaire va contenir la liste des
lignes d’une commande, c’est la meilleure façon d’afficher une liste.
Dans l’en-tête se trouvent les titres des colonnes, et dans le détail, les lignes du formulaire.
Nous sommes bien d’accord, ce formulaire affiche le détail de toutes les commandes. Comme on peut le voir dans la 1ère
colonne, il concerne plusieurs commandes.
Bien, maintenant, nous allons ajouter un contrôle dans ce formulaire pour calculer le montant TTC de chaque ligne, c’est-à-
dire dans la zone détail, nous ajoutons deux contrôles :
Pour calculer le montant TTC, on affiche les propriétés du contrôle et dans la propriété Source de l’onglet Données, on tape
la formule de calcul : ( [Prix Unit] + ( [Prix Unit] * [TauxTVA] / 100 ) ) * [Quantite].
Bien sûr, dans les crochets, n’utilisez que les noms effectifs utilisés pour créer vos tables.
Ca marche !
Plus fort, maintenant, nous allons afficher le montant total commandé. Nous sommes toujours d’accord, le montant total
115
va être le montant total pour toutes les commandes, notre formulaire pour l’instant ne fait pas de distinction entre les com-
mandes.
Vous avez pu remarquer que le formulaire a en plus de l’en-tête et du détail, une partie Pied de formulaire. Cette partie ne
sera affichée qu’en bas du formulaire, une fois toutes les lignes affichées. Comme précédemment, nous mettons dans cette
partie du formulaire un contrôle Zone de Texte dans lequel nous allons faire le calcul de la somme.
Que contient la formule ? La même que tout à l’heure, mais nous avons ajouté le mot-clef Somme avant :
Access va calculer la somme de toutes les lignes ici.
Et voilà le travail : en bas du formulaire apparaı̂t la somme totale.
Une fois arrivés ici, nous avons notre formulaire Facture qui contient les rems générales sur la commande et le formulaire
Super ligne commande qui contient les détails de toutes les commandes. Il serait bien de pouvoir insérer ce formulaire dans
le premier et de lui faire afficher seulement les lignes commandes correspondant à la commande choisie.
Pour cela, on va rouvrir notre formulaire Facture et poser dessus un contrôle Sous- Formulaire.
Un assistant s’affiche alors : Access nous demande à partir de quoi il va afficher ce sous-formulaire ? D’une table ou d’un for-
mulaire existant déjà ? Nous choisissons la deuxième solution et nous choisissons notre formulaire Super lignes commande.
C’est ici que tout se fait. Il va falloir indiquer à Access quel est le rapport entre le formulaire et le sous formulaire qu’il
contient. Si on se contentait d’insérer le sous formulaire tel quel dans le formulaire, il continuerait à afficher tout le temps la
totalité des lignes commandes quelle que soit la commande affichée dans le formulaire principal.
Nous voulons qu’il affiche dans le sous-formulaire les lignes commande correspondant à la commande affichée dans le for-
mulaire principal.
Quel est le rapport entre les deux ? Comment faire une relation entre les deux ? Simplement : le formulaire contient le numéro
de la commande en cours, le sous-formulaire contient pour chaque ligne de commande affichée le numéro de la commande
concernée. Il va donc falloir dire à Access que les lignes affichées dans le sous formulaire vont être celles dont le numéro de
commande est celui qui est affiché dans le formulaire.
Pour cela, on indique dans la colonne de gauche quel est le champ qui contient le numéro de commande dans le formulaire
principal et quel est le champ qui contient aussi un numéro de commande dans le sous-formulaire.
A la place du sous-formulaire, il y a un rectangle blanc. Ce qui implique que toute modification dans ce sous-formulaire ne
pourra se faire ici, il faudra la faire directement dans le formulaire Super ligne commandes. Dans Access, on peut directe-
ment modifier le sous-formulaire à partir d’ici, il n’y a plus de rectangle blanc mais directement le formulaire.
Maintenant, lorsque vous ouvrez le formulaire principal, vous avez, pour une commande donnée en haut, son contenu
exact et son montant. Vous noterez que le numéro de commande est répété pour chaque ligne, vous pouvez, comme il est
inutile maintenant puisque déjà présent dans l’en-tête, le supprimer du formulaire.
Voilà pour les sous-formulaires.
Il existe une méthode plus simple pour faire ce que nous venons de faire. Il suffit pour cela, d’abord de bien relier les tables
entre elles, ensuite lorsqu’on crée le premier formulaire de mettre toutes les champs de toutes les tables concernées dans le
même formulaire : n˚ de commande, n˚ de client, date venant de la table Commande, nom, prénom, adresse venant de la
table Client, n˚ de commande, n˚ de produit, quantité venant de la table Lignes-commande et libellé, prix unitaire et tva
venant de la table Produits.
Et là, ô magie ! Access a deviné tout seul ce que nous voulions faire (grâce aux relations quand même), et nous pro-
pose de faire tout seul ce que nous avons fait avant. Vous remarquez que l’exemple qu’il nous propose à droite ressemble
étrangement à ce que nous avons fait à la main.
Ici on nomme le formulaire, vous pouvez noter qu’il a crée tout seul le sous formulaire et qu’il en profite pour nous demander
son nom. Et voilà le travail ! En cinq secondes, il a fait ce qui nous a pris beaucoup de temps ! Il nous faudra simplement
ajouter ensuite dans le sous formulaire le calcul des montants TTC et le montant total.
Comme quoi, si les relations sont bien faites, Access fait les trois quart du boulot tout seul.
Ici se termine l’histoire des formulaires. Il reste d’autres contrôles comme les boutons bascule, les images, les objets OLE,
etc. . . Nous ne les utiliserons pas souvent.
Exercice : Essayez de reprendre ces créations de formulaires de vous-même, sans vous aider du support. . .
Table des figures
4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.6 un LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.7 Une carte réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.11 Architecture ”Mainframe” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.12 Architecture ”Client/Serveur” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Liste des tableaux