Créer une application de gestion de bandes dessinées
Date de publication : 19/03/10 , Date de mise à jour : 19/03/10
VII. Ajout de contraintes
VIII. Ajout de données de tests
IX. Création d'une requête
IX-A. Tri sur une clé étrangère
IX-B. Tri sur un champ texte contenant des nombres
X. Modification des jointures des relations
VII. Ajout de contraintes
Les contraintes portent bien leur nom : elles vont contraindre l'utilisateur à saisir des valeurs qui répondent à des règles de validation.
Pour des règles simples, il est possible les définir directement dans le champ.
D'autres règles plus complexes nécessiteront plus tard du code en VBA.
Un exemple simple : les notations :
Nous avons en effet défini plusieurs champs de notation :
note_bd,
note_serie et
note_auteur.
Ces notes n'ont aucune autre contrainte que d'être numérique (le type de données du champ).
Nous souhaitons
limiter la saisie à une note entre 0 et 10.
Ouvrez la table
tblAuteurs en mode création.
A partir de Access 2007, les tables sont listées dans le volet de navigation à gauche.
Avant Access 2007, les tables sont listées dans la fenêtre de base de données.
Pour ouvrir une table en mode création, cliquez sur la table avec le bouton droit et choisissez
Mode création (le bouton avec l'équerre).
Sélectionnez le champ
note_auteur et modifier les paramètres en bas :
-
Valide Si : >=0 Et <=10
-
Message si erreur : La note doit être comprise entre 0 et 10
Lors de la saisie de la note, le message inscrit dans
Message si erreur s'affichera si la note ne respecte pas la règle
Valide si.
On peut faire encore mieux en proposant une liste à l'utilisateur :
- Dans les paramètres du champ, cliquez sur l'onglet
Liste de choix.
- Modifiez la propriété
Afficher le contrôle, choisissez la valeur
Zone de liste déroulante.
- Comme
Origine Source, sélectionnez
Liste valeurs.
- Dans
Contenu, saisissez les valeurs possibles séparées par des points-virgules :
0;1;2;3;4;5;6;7;8;9;10.
- Vous pouvez même limiter la saisie à la liste définie avec la propriété
Limiter à liste (la contrainte
Valide si devient alors inutile).
Petite remarque : une telle liste de choix peut être créée également à l'aide de l'assistant liste de choix, en choisissant l'option
Je taperai les valeurs souhaitées.
Vous pouvez alors apporter les mêmes modifications aux champs
note_bd et
note_serie.
Autre contrainte possible : imposer la saisie d'un champ :
Par exemple pour la table des auteurs, on peut imposer la saisie du nom.
Ouvrez la table
tblAuteurs en mode création et sélectionnez le champ
nom_auteur.
En bas, dans les propriétés du champ, définissez
Null interdit égale à
Oui.
Définissez également
Chaîne vide autorisée égale à
Non.
Il est important pour un champ texte de définir ces deux propriétés :
-
Null interdit à Oui oblige l'utilisateur à saisir une données;
-
Chaîne vide autorisée à Non interdit l'utilisateur de saisir une chaîne vide, c'est-à-dire de mettre un texte puis de le supprimer.
Par contre on laisse la possibilité de ne pas saisir de prénom, au cas où l'auteur ne soit connu que son nom ou pseudonyme.
On impose de la même manière la saisie d'un titre de bande dessinée dans le champ
titre_bd de la table
tblBds.
Puis on impose la saisie d'un titre de série dans la table
tblSeries.
Autre contrainte, un exemplaire doit forcément être rattaché à une bande dessinée du catalogue :
Imposons donc la saisie du champ
id_bd dans la table
tblExemplaires.
Ce champ étant numérique, il n'y a pas de propriété
Chaîne vide autorisée.
Définissez uniquement la propriété
Null interdit = Oui.
Ajoutons maintenant une contrainte d'unicité du couple Série/Tome :
En effet, dans la table
tblBds, on défini la série d'appartenance (
id_serie) et le tome (
tome_bd).
Il ne doit pas être possible de définir un même tome deux fois pour la même série.
Dans la table
tblBds en mode création, sélectionnez les champs
id_serie et
tome_bd.
Cliquez ensuite dans l'onglet
Création sur le bouton
Index :
Avant Access 2007, vous trouverez ce bouton index dans la barre d'outils en haut, ou dans le menu :
Affichage =>
Index.
Dans le fenêtre des index, vous trouvez la clé primaire nommée
PrimaryKey composée du champ
id_bd.
En effet la clé primaire est un index.
Ajoutez deux lignes pour créer notre index :
- Nom de l'index : TomeSerie, à mettre uniquement sur la première ligne;
- Pour la première ligne, modifiez en bas :
Unique = Oui afin de ne pas accepter de doublons.
- Nom du champ sur chacune des lignes : id_serie puis tome_bd;
Fermer et enregistrez la table.
La création de cet index a deux effets :
D'abord il sera interdit de saisir des doublons de Série+Tome.
Ensuite Access gère un index, c'est à dire une table des matière qui va accélérer la recherche des BDs par Série et Tome.
L'insertion et la modification de données sera un peu plus lente car il faudra qu'Access gère à la fois la table et l'index.
Par contre la lecture sera plus rapide car l'index agit comme une table des matière et permet de trouver rapidement un enregistrement.
VIII. Ajout de données de tests
Avant d'aller plus loin dans la conception de notre base de données, nous allons ajouter quelques données de test.
En renseignant ces données, nous allons pouvoir mettre en oeuvre les listes de choix et les contraintes que nous avons définies.
Si vous n'avez pas de bandes dessinées sous la main, le site
BD Gest' regorge d'informations.
|
Si vous ne souhaitez pas remplir vous-même ces données de tests, vous trouverez à la fin de ce chapitre la base de données pré-remplie.
|
Voici les quelques séries que j'ai choisies pour les données de tests :
-
Horologiom;
-
Finkel;
-
La Nef des fous;
-
Les tuniques bleues;
En toute logique, nous remplissons d'abord les tables de référentiels.
Ouvrez la table
tblRoles : un double-click suffit à ouvrir la table en saisie.
Saisissez la colonne
Libellé rôle les différents rôles possibles :
- 01- Scénariste;
- 02- Dessinateur;
- 03 -Coloriste;
|
Petite astuce : vous pouvez facilement ordonner les valeurs qui apparaîtront dans la liste en ajoutant un numéro au début.
Pour le tri, il est nécessaire de mettre la numérotation sur deux chiffres si le nombre de valeurs peut atteindre au moins 10.
Bien entendu, il faut avoir défini un tri (ici sur le libellé du rôle) lors de la création des listes de choix avec l'assistant.
On aurait également pu ajouter un champ numérique dédié pour le tri et le masquer à l'affichage.
|
Le champ
id_role étant un numéro automatique, Access incrémente lui-même ce champ.
Si Access vous demande si vous souhaitez enregistrer les modifications apportées à la mise en forme de la table, vous pouvez répondre Oui.
Ces modifications sont par exemple une modification de la taille des colonnes.
Les modification effectuée sur les données sont enregistrées automatiquement.
Ajoutez de la même manière les différents formats dans la table
tblFormats :
Ajoutons ensuite quelques valeurs dans la table
tblEtats :
Puis ajoutez les auteurs des bandes dessinées à la table
tblAuteurs.
Commençons par la série Horologiom.
Le scénariste et le dessinateur sont une seule et même personne :
Lebeault Fabrice.
Il suffit donc de renseigner son nom et prénom dans la table.
Le nom est imposé par une contrainte, ce que nous pouvons tester en essayant de saisir un enregistrement sans le nom.
Si vous souhaitez lui attribuer une note, vous pouvez la saisir dans le champ
Note de l'auteur.
On en profite pour tester la liste de choix de la note, et la contrainte d'avoir une note entre 0 et 10.
La mise en couleur est assurée par
Breton Florence, ajoutons-la également dans la table
tblAuteurs.
Remarque : si on n'a pas d'avis sur la colorisation par exemple, il n'est pas nécessaire de noter l'auteur.
D'ailleurs, le champ
note_auteur a sa propriété
Null interdit égale à Non.
Il est donc possible de laisser le champ égal à
Null, c'est à dire sans aucune valeur.
Reste à ajouter les auteurs des autres séries :
J'ai mis quelques notes pour les tests, un peu au hasard; ne le prenez pas mal si j'ai sous-noté votre auteur préféré. ;o).
Tous ces auteurs ont été ajoutés sans distinction dans la table auteurs.
Il faut maintenant préciser le ou les rôles de chacun dans la table d'association
tblEstUn.
Ouvrez cette table
tblEstUn (double-clique).
Notez comme la saisie est facile avec les listes de choix :
Et voici la table qui défini le rôle de nos auteurs:
Deux remarques :
- Certains auteurs peuvent cumuler plusieurs rôles;
- Access affiche le premier champ visible de la liste de choix, mais c'est bien l'identifiant qui est stocké!
Nous sommes prêts à saisir les données de séries, dans la table
tblSeries bien évidemment :
Il suffit de saisir le titre de la série, un commentaire si nécessaire, et une note si vous le souhaitez.
Deux remarques cette fois aussi :
- Appuyez sur les touches CTRL + ENTREE pour passer à la ligne dans le commentaire;
- Rejetez les articles en fin de titre (Le, La , Les, ...) pour des tris plus pertinents.
Il maintenant grand temps de saisir le catalogue de bandes dessinées : la table
tblBds.
Il suffit de saisir :
- Le titre de la bande dessinée;
- Eventuellement un commentaire et une note;
- Le numéro de tome;
- La série d'appartenance.
Vous pouvez tester l'index sans doublon positionné sur le couple Série+Tome.
Il n'est pas possible de saisir deux fois le même tome pour une même série.
Pour saisir la série, utilisez efficacement la liste de choix. Saisissez la première lettre de la série et Access proposera la série correspondante.
Notez qu'on a saisi des numéros de tomes non numériques, pour les hors-série et les intégrales.
Là encore j'ai mis des notes au hasard qui ne reflète en rien la qualité des albums.
J'ai également ajouté une bande dessinée importantes pour nos tests,
sans numéro de tome et sans série.
Cela nous permettra de tester les différentes jointures lorsque nous aborderons les requêtes.
La BD sans tome ni série :
Une remarque importante sur les numéros automatiques :
Vous noterez que la numérotation passe directement de 26 à 86.
En effet lorsque vous éditez une ligne, le numéro est incrémenté.
Si vous annuler la saisie (touche Echap par exemple) ou que vous supprimez la ligne, la numérotation reste incrémentée.
Il est donc possible qu'il y ait des "trous" dans ce numéro.
Cela ne gêne en rien le fonctionnement de la base de données : ce numéro est à usage interne et ne sera pas visible de l'utilisateur.
Pour information, le type de données
Entier long a comme valeur maximale : 2 147 483 647.
Il est très peu probable d'atteindre ce maximum.
Le catalogue de bandes dessinées étant saisi, il faut maintenant définir les auteurs de ces bandes dessinées.
Cela est fait dans la table
tblEstRealisePar :
Il ne sera pas nécessaire de gérer les auteurs dans l'application, nous le faisons pour avoir quelques données de tests.
Je n'ai d'ailleurs pas eu le courage de définir tous les coloristes.
Pour la bande dessinées
Adios Palomita, je n'ai même pas défini d'auteurs.
Une dernière table à remplir : la table des exemplaires
tblExemplaires :
Je vais remplir cette table avec les exemplaires que je possède :
Les dates d'achat, formats et états sont optionnels.
Remarques pour les images :
La gestion des images n'étant pas aisée, nous laissons vides ces tables pour le moment.
Nous traiterons cette gestion des images dans un chapitre à part.
Les données de tests sont maintenant renseignées.
Cela a été un peu laborieux, nous allons bien sûr développer une interface qui permettra à l'utilisateur de remplir bien plus facilement ses données.
Vous pouvez télécharger la base de données contenant les tables avec leurs contraintes et les données de tests :
Les tables et données au format Access 2000
(HTTP)
IX. Création d'une requête
Jusqu'à présent, nous avons uniquement afficher des tables.
Pour aller plus loin, il est utile de créer des requêtes.
Plusieurs types de requêtes sont disponibles : on peut utiliser les requêtes pour ajouter des lignes à une table, modifier des données ou simplement les afficher.
Un des avantages des requêtes est qu'elles nous permettent d'afficher des données issues de plusieurs tables, le lien entre ces tables étant réalisé par des jointures.
Elles permettent également de définir des tris et des filtres.
Nous allons dans un premier temps, et pour nous familiariser avec les requêtes, créer une requête de sélection pour afficher les bandes dessinées correctement triées.
En effet lorsqu'on ouvre la table, les bandes dessinées sont présentées dans l'ordre où elles ont été saisies.
Il est même possible parfois que les lignes ne soient pas dans cet ordre.
Il est donc important de définir un tri d'affichage pour garantir l'ordre des lignes.
On pourrait définir un tri au niveau d'un futur formulaire mais nous allons plutôt le définir dans une requête.
La requête pourra ainsi être réutilisée à plusieurs endroits : dans un formulaire, dans un état, ou même dans une autre requête.
Que souhaitons-nous?
Tout simplement une requête qui affiche la liste des bandes dessinées
triées par série et par numéro de tome.
Pour créer une requête
à partir d'Access 2007 : dans l'onglet
Créer, cliquez sur le bouton
Création de requête.
Le bouton
Assistant requête permet de lancer un assistant pour vous faciliter le travail.
Pour créer une requête
avant Access 2007 : dans la fenêtre de base de données, affichez les requêtes et cliquez sur
Créer une requête en mode création.
Créer une requête à l'aide de l'assistant permet de lancer un assistant pour vous faciliter le travail.
Lancez l'assistant de création de requête.
Dans la fenêtre qui s'affiche, choisissez
Assistant Requête simple et cliquez sur OK.
Dans la liste, sélectionnez la table
tblBds.
Dans un premier temps, sélectionnez tous les champs, il sera ensuite possible de les supprimer s'ils ne sont pas nécessaires.
Remarque : à ce stade de l'assistant, on pourrait ajouter des champs d'une autre table en modifiant la table sélectionnée dans la liste.
Cliquez sur
Suivant pour continuer.
Laissez la sélection à
Détaillée, l'autre option étant utile pour faire des regroupements : compte, somme, ...
Cliquez sur
Suivant pour poursuivre.
Donnez un nom à la requête, par exemple :
qryBds.
Préfixer les noms de requête avec
qry par exemple est utile car parfois les tables et requêtes apparaissent dans une même liste.
On peut ainsi facilement les différencier.
Cliquez sur
Terminer pour continuer.
La requête créée s'ouvre alors en affichage.
On ne voit pas de différence par rapport à l'affichage de la table car on s'est contenté d'ajouter les champs de la table.
Passez en mode création pour visualiser la structure de la requête :
- A partir d'Access 2007, dans l'onglet
Accueil choisissez
Mode Création;
- Avant Access 2007, cliquez dans le menu :
Affichage =>
Mode création.
Cet affichage est appelé
QBE (Query By Exemple).
Dans la partie haute, les tables sont affichées : ici on n'en a qu'une seule.
Dans la partie basse, on trouve en colonne les champs de la requête ainsi que la table d'où ils sont extraits.
La ligne de tri est vide, ainsi que les lignes de critères.
On remarque également que tous les champs sont cochés pour affichage.
Comme nous souhaitons trier par série et par tome, ajoutez un tri à chacun de ces champs.
Choisissez
Croissant comme tri des champs
tome_bd et
id_serie.
Les tris s'effectuent dans l'ordre d'affichage des colonnes, c'est-à-dire par tome puis par série.
Cliquez sur la colonne
tome_bd tout en haut (le curseur se change alors en flèche vers le bas) pour la sélectionner, puis faites-là glisser après la colonne
id_serie.
On demande alors un tri d'abord par série puis par tome.
Notez qu'il aurait aussi été possible de laisser les colonnes dans l'ordre tome puis série, et de rajouter une colonne tome à la fin pour le tri.
On ne demanderait alors pas d'affichage pour cette colonne de tri.
Pour notre cas, on peut faire passer la colonne tome à droite de la colonne série, cela a du sens de toute manière d'avoir d'abord la série puis le tome.
Il sera ensuite possible lors de la création des formulaires et états d'ordonner les colonnes comme on le souhaite indépendamment de l'ordre mis dans la requête.
Repassez en affichage
Feuille de données pour voir le résultat :
Le résultat obtenu n'est pas celui qu'on espérait, il y a apparemment deux erreurs de tri :
- le tri sur la série est incorrect : Horologiom est avant Finkel alors que F est avant H dans l'alphabet;
- le tri sur le tome parait chaotique : 2 est après 19 ...
Prenons ces deux problèmes un par un.
IX-A. Tri sur une clé étrangère
Le tri sur la série est un tri sur une clé étrangère.
On ne trie pas sur le libellé mais sur l'identifiant
id_serie dont la valeur est masquée par la liste de choix qui affiche le titre.
Dans la table
tblSeries on voit bien que :
- Horologiom a comme identifiant 1;
- Finkel a comme identifiant 2;
Donc dans le tri Horologiom est avant Finkel.
Il faut alors effectuer le tri sur le champ
titre_serie pour assurer l'ordre alphabétique.
Ce champ est dans la table
tblSeries et n'est donc pas disponible dans la requête.
Nous allons l'ajouter.
Retournez sur la requête
qryBds en mode création.
Dans la partie haute (où est affichée la table
tblBds), cliquez avec le bouton droit et choisissez
Afficher la table ....
Sélectionnez la table
tblSeries, cliquez sur
Ajouter puis
Fermer.
La table
tblSeries s'affiche au côté de
tblBds, avec le lien que nous avons vu dans la fenêtre des relations.
Ajoutez à la requête le champ
titre_serie, soit en double-cliquant sur le champ de la table, soit en le sélectionnant sur la ligne champ d'une nouvelle colonne.
Définissez un tri croissant pour ce champ, et retirez le tri sur le champ
id_serie.
Faites glisser la colonne du champ
titre_serie avant la colonne
tome_serie pour définir l'ordre de tri d'abord par titre de série puis par tome.
Passer en mode feuille de données :
Finkel est bien maintenant trié avant Horologiom.
Problème résolu? Non pas tout à fait.
Regardez bien le nombre d'enregistrements en bas : il y en a 83.
Si on regarde dans la table
tblBds, on en voit 84.
Une bande dessinée a donc disparu!
L'explication de cette disparition se trouve dans la relation (=jointure) entre nos tables.
Nous avons laissé la relation par défaut qui est
une jointure équivalente.
C'est-à-dire que ne s'affiche que les enregistrements pour lesquels il y a une entrée dans chacune des deux tables.
Hors nous avons une bande dessinée (
Adios Palomita) qui n'est pas associée à une série; elle n'apparaît donc pas dans notre requête.
Nous allons vite corriger cela.
Repassez en mode création et double-cliquez sur le lien entre les deux tables :
Dans les propriétés de la jointure, on voit bien nos deux tables et les champs
id_serie de chacun d'entre-elles.
Puis en-dessous il y a trois boutons très importants qui définissent le type de jointure.
On a actuellement :
Inclure seulement les lignes des deux tables pour lesquelles les champs joints sont égaux.
Ce n'est pas ce que nous souhaitons, nous voulons voir apparaître toutes les bandes dessinées et leur série si disponible.
Il faut donc choisir la troisième option :
Inclure TOUT les enregistrements de la table "tblBds" et seulement ceux de la table "tblSeries" pour lesquels les champs joints sont égaux.
Cliquez donc sur le troisième bouton puis sur OK.
Dans la partie haute, on voit une modification de la relation qui se transforme en flèche de
tblBds vers
tblSeries.
Affichez la requête en mode feuille de données :
La BD
Adios Palomita apparaît et nous avons bien l'intégralité de nos 84 BDs.
La BD qui n'a pas de série a donc un champ
id_serie vide.
|
Maintenant que nous avons mis en évidence l'intérêt des type de jointure, nous les modifierons dans un chapitre suivant dans la fenêtre des relations.
Ainsi on aura par défaut les jointures désirées.
Si besoin on pourra définir un autre type de jointure pour une requête en particulier.
Les jointures définies dans la fenêtre des relations peuvent être modifiées dans chaque requête comme nous venons de le voir.
|
IX-B. Tri sur un champ texte contenant des nombres
Le tri alphabétique sur la série étant maintenant corrigé, occupons-nous du tri sur le tome.
Ce tome a été défini en champ texte afin de permettre la saisie à la fois de numériques et de textes.
Le problème lors du tri est que un champ texte est trié par ordre alphabétique : donc par exemple 2 vient après 12.
Il est possible de tricher en rajoutant les 0 non significatifs à la saisie : par exemple 02 au lieu de 2.
Ainsi 02 est bien trié avant 12.
Mais il faut alors imposer la saisie de ces 0 non significatifs, et il faut aussi se fixer un nombre de chiffres obligatoire.
Si on a plus de 99 albums, il faudrait alors imposer la saisie sur 3 chiffres.
Ceci étant peu pratique, nous allons garder une saisie libre et essayer de trouver une solution lors du tri.
Il est tout simplement possible de formater les nombres et de trier sur ces nombres formatés.
Il faut ajouter un champ calculé à la requête.
En effet il est possible de faire des calculs dans les requêtes (ce "calcul" sera en fait simplement un formatage du champ).
Si vous connaissez déjà les fonctions disponibles, vous pouvez directement les écrire à la place du nom du champ.
Sinon cliquez avec le bouton droit sur la ligne champ dans la première colonne vide et cliquez sur le bouton
Créer....
Le générateur d'expression s'ouvre; il permet de lister les différentes expressions disponibles.
Choisissez
Fonctions puis
Fonctions intégrées.
Dans la liste du milieu, sélectionnez
Texte car nous souhaitez travailler sur du texte.
Puis dans la liste à droite, vous avez toutes les fonctions disponibles pour manipuler les textes.
La fonction qui nous intéresse est la fonction
Format, double-cliquez dessus.
La fonction apparait dans la case en haut, avec ses arguments à remplir.
Pour obtenir de l'aide sur la fonction choisie, cliquez sur le bouton
Aide.
L'aide de la fonction s'affiche; pour plus d'information sur le formatage de nombre, cliquez sur
Voir aussi puis sur
Formats numériques définis par l'utilisateur.
On lit alors dans l'aide que "0" peut être utilisé dans la fonction format pour afficher des zéros non significatifs.
Modifions donc l'appel de la fonction :
- remplacez
«expr» par la valeur à formater : le champ
[tome_bd];
- remplacez
«fmt» par le format désiré :
"0000".
- supprimer
«firstweekday» e t
«firstweek» qui servent au formatage de dates.
Notez ici l'utilisation des crochets qui encadrent le nom du champ; il est important d'utiliser des crochets pour différencie un nom de champ d"une chaîne de caractères.
Souvent, Access comprend tout seul qu'il s'agit d'un champ; parfois il est nécessaire d'ajouter les crochets.
Pour le format par contre, on l'encadre de guillemets car c'est une chaîne de caractères.
On choisit par exemple quatre caractères 0 afin de formater nos numéros de tomes sur quatre chiffres.
On est alors tranquille jusqu'au tome 9999, c'est largement suffisant.
L'expression est donc :
Format ([tome_bd]; "0000") .
Cliquez sur OK, l'expression est ajoutée sur la ligne Champ.
Access a ajouté
Expr1: au début de l'expression : c'est un alias.
C'est-à-dire que notre champ calculé s'appelle
Expr1.
Donnons-lui un nom plus adéquat :
tome_bd_tri par exemple.
Ce champ étant destiné au tri, ajoutez-lui un tri croissant et retirez en même temps le tri sur la colonne
tome_bd qui n'est plus utile.
Affichez les données pour vérifier le tri :
Les tris sont désormais corrects : la liste des BDs est triée par série, puis au sein d'une série les BDs sont triées par tomes.
Nous remarquons également que le formatage n'a pas affecté les tomes non numériques (HS01, HS02, ...) ce qui nous arrange beaucoup.
Le champ
tome_bd_tri qui ne sert qu'au tri peut être masqué à l'affichage : pour cela en mode création décochez la case
Afficher de cette colonne.
X. Modification des jointures des relations
Nous l'avons vu lors de la précédente requête, les jointures par défaut ne nous conviennent pas toujours.
Nous allons donc passer en revue les relations entre nos tables afin de mieux les définir.
Ouvrez la fenêtre des relations :
Soit dans le ruban : onglet
Outils de base de données, bouton
Relations.
Soit avant Access 2007: menu
Outils =>
Relations.
Si besoin : clic droit =>
Afficher toutes les relations.
Nous allons d'abord modifier la relation vu précédemment entre
tblBds et
tblSeries.
Double-cliquez sur le lien entre ces deux tables.
Notez que la relation est définie de la table
tblSeries vers la table
tblBds (de la table à gauche vers la table à droite).
On trouve sur cette fenêtre une case à cocher
Appliquer l'intégrité référentielle.
Si cette case est cochée, cela signifie qu'il ne peut y avoir d'enregistrements orphelins.
C'est-à-dire pour notre cas qu'on ne peut pas avoir dans la table
tblBds une bd appartenant à une série qui n'existe pas dans la table
tblSeries.
Très intéressante, cette fonctionnalité empêche notamment de supprimer une série si des BDs sont définies comme lui appartenant.
Une fois l'intégrité référentielle activée, il est possible de demander une mise à jour ou suppression en cascade des enregistrements liés.
Pour la modification ce n'est pas possible le champ
id_serie de
tblSeries et auto-incrémenté et ne peut être modifié.
Pour la suppression, c'est utile dans certains cas mais pas tous : si on supprime une série, toutes les Bds associés serait supprimées.
Il sera la plupart du temps préférable pour notre application de ne pas cocher cette case de suppression en cascade.
Cochez donc la case
Appliquer l'intégrité référentielle.
Cliquez ensuite sur le bouton
Type Jointure....
Nous retrouvons à cet endroit le type de jointure comme il était présenté dans la requête.
Choisissez comme tout à l'heure la troisième option :
Inclure TOUT les enregistrements de la table "tblBds" et seulement ceux de la table "tblSeries" pour lesquels les champs joints sont égaux.
Cliquez deux fois sur OK pour valider.
La relation affichée présente alors une flèche de
tblBds vers
tblSeries.
La jointure mise en place s'appelle une
jointure à droite.
A droite car on affiche tous les enregistrements de la table de droite (
tblBds étant à droite dans la fenêtre de la jointure)
Définir le type de jointure dans cette fenêtre des relations n'a pour effet que de présenter ce type de jointure par défaut lors de la création d'une requête.
Par contre l'intégrité référentielle a une réelle incidence sur la saisie des données.
Essayer maintenant de supprimer une série dans la table série, un message d'erreur est affiché :
Nous n'aurons ainsi par d'erreur de suppression de série : il faudra d'abord supprimer les BDs avant de supprimer une série.
Poursuivons avec les autres relations :
Entre
tblSeries et
tblAPourImageDeSerie :
Option 2 =
Inclure TOUT les enregistrements de la table "tblSeries" et seulement ceux de la table "tblAPourImageDeSerie" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblAPourImageDeSerie et
tblImages :
Option 3 =
Inclure TOUT les enregistrements de la table "tblAPourImageDeSerie" et seulement ceux de la table "tblImages" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblBds et
tblAPourImageDeBd :
Option 2 =
Inclure TOUT les enregistrements de la table "tblBds" et seulement ceux de la table "tblAPourImageDeBd" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblAPourImageDeBd et
tblImages :
Option 3 =
Inclure TOUT les enregistrements de la table "tblAPourImageDeBd" et seulement ceux de la table "tblImages" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblBds et
tblEstRealisePar :
Option 2 =
Inclure TOUT les enregistrements de la table "tblBds" et seulement ceux de la table "tblEstRealisePar" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblEstRealisePar et
tblAuteurs :
Option 3 =
Inclure TOUT les enregistrements de la table "tblEstRealisePar" et seulement ceux de la table "tblAuteurs" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblEstRealisePar et
tblRoles :
Option 3 =
Inclure TOUT les enregistrements de la table "tblEstRealisePar" et seulement ceux de la table "tblRoles" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Entre
tblAuteurs et
tblEstUn :
Option 2 =
Inclure TOUT les enregistrements de la table "tblAuteurs" et seulement ceux de la table "tblEstUn" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Appliquez la mise à jour et la suppression en cascade.
Cela nous permettra lors de la suppression d'un auteur de supprimer automatiquement ses rôles.
Entre
tblRoles et
tblEstUn :
Appliquez l'intégrité référentielle.
Option 2 =
Inclure TOUT les enregistrements de la table "tblRoles" et seulement ceux de la table "tblEstUn" pour lesquels les champs joints sont égaux.
Entre
tblExemplaires et
tblEtats :
Appliquez l'intégrité référentielle.
Option 3 =
Inclure TOUT les enregistrements de la table "tblExemplaires" et seulement ceux de la table "tblEtats" pour lesquels les champs joints sont égaux.
- Entre
tblExemplaires et
tblFormats :
Appliquez l'intégrité référentielle.
Option 3 =
Inclure TOUT les enregistrements de la table "tblExemplaires" et seulement ceux de la table "tblFormats" pour lesquels les champs joints sont égaux.
Entre
tblExemplaires et
tblBds :
Option 3 =
Inclure TOUT les enregistrements de la table "tblExemplaires" et seulement ceux de la table "tblBds" pour lesquels les champs joints sont égaux.
Appliquez l'intégrité référentielle.
Pour terminer, ajoutons une relation entre les tables
tblEstUn et
tblEstRealisePar.
Nous avons en effet évoqué lors de la conception
une contrainte sur le couple auteur+rôle.
On ne doit pas pouvoir ajouter un auteur dans un rôle qui n'est pas défini pour lui.
Ajoutez une relation entre
tblEstUn et
tblEstRealisePar :
- faites glisser la souris du champ
id_auteur de la première table vers le champ
id_auteur de la deuxième table.
- ajoutez le champ
id_role à la liste.
- dans
type de jointure, choisissez l'option 3 =
Inclure TOUT les enregistrements de la table "tblEstRealisePar" et seulement ceux de la table "tblEstUn" pour lesquels les champs joints sont égaux.
- appliquez l'intégrité référentielle.
La contrainte d'existence du couple auteur+rôle sera vérifié par cette relation grâce à l'intégrité référentielle.
Pour ces jointures, on a défini uniquement des jointures à gauche ou à droite.
Cela nous évitera des problèmes au cas où un enregistrement serait manquant.
Par exemple si on ne défini pas d'auteur pour une BD, la BD ne disparaitra pas de nos requêtes.
L'auteur sera vide, tout simplement.
Nous pourrons par la suite modifier ces jointures indépendemment dans chaque requête.
D'un autre côté, l'intégrité référentielle refusera par exemple de nous laisser supprimer un auteur si des Bds lui sont associées.
Notez que lors de la mise en place de l'intégrité référentielle, Access a ajouté des 1 et des signes infini :
Ne confondez pas ces symboles avec les cardinalités du MLD.
Ces signes sont définis à 1 si le champ de la jointure est sans-doublons (clé primaire par exemple), sinon à infini.
Vous pouvez télécharger la base de données contenant les tables avec leurs relations et la première requête :
Les tables et relations au format Access 2000
(HTTP)
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2010 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite
de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et
jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.