IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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

info Pour plus d'informations sur les contraintes, consultez ce tutoriel : Contraintes avancées sous Microsoft Access.
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.


info 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;


idea 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

info Pour les débutants, consultez ce tutoriel : Créer des requêtes simples.
info Pour plus d'informations sur les requêtes et les jointures, consultez ces tutoriels :
- Comprendre les jointures dans Access.
- Access - Les Bases : V-3. Les requêtes multi-tables.

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.


info 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)


 

Valid XHTML 1.0 TransitionalValid CSS!

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.