<==Mise en place des liens - Autres liens simples | ^ Structure | Principes à respecter dans les liens==> |
On ne l'a pas mis sur la page précédente, alors le voilà : le fichier à jour et prêt pour les liens multiples
On va monter d'un cran, et raisonner... Une classe comprenant des élèves, tentons de lier ces élèves à leur classe. Il faut un lien entre la table CLA (les classes) et la table PER (les personnes), qui contient des élèves, mais pas seulement. Quels éléments sont nécessaires ?
Mais revenons à nos moutons, car la page est encore longue. Nous avons "typé" nos personnes...
On pourrait donc schématiser le lien comme suit :
Mais il y a manifestement quelque chose qui ne marche pas : le lien ne tient pas compte de la notion de temps.
les élèves ne sont "rattachés" à la classe que pour un an ! Et une classe est un élément intemporel, presque autant qu'un élève... Si nous bâtissons notre lien comme indiqué sur le schéma, soit nos élèves restent dans la même classe pour toute leur existence en tant qu'élève, soit il faut changer dans la table des personnes la classe, au moins chaque année.
Or il faut parler ici d'une notion importante : les données d'un enregistrement au sein d'une table ne devraient pas varier avec le temps. Si c'est le cas (on doit changer les données chaque mois ou chaque année, p.ex.), la structure n'est pas optimale...
La solution passe par donc par une table intermédiaire. Ce type de table assure le lien entre des valeurs de deux tables et permet, justement de créer un enregistrement nouveau pour chaque évènement. En l'occurrence quelle est-elle ? La table des inscriptions, INS, évidemment ! Une inscription est valable pour un temps donné. Et chaque année, nous avons de nouvelles inscriptions, même si nos élèves et nos classes sont les mêmes. Reprenons...
Donc, partant de l'ancre CLA__, on a :
Bon, au travail !
Commençons par ce calcul, qui semble compliqué... Donc, "Gérer la base de données", onglet Rubriques, dans la table CLA_Classes, on crée une rubrique zkc_AnneCourante, et on indique comme type de rubrique "Calcul". Après avoir cliqué sur "Créer", la fenêtre de calcul s'ouvre automatiquement. Que fait-on ?
On ne va pas rentrer tout de suite dans les détails des calculs, mais on va, à nouveau, raisonner pour faire ce calcul :
Heureusement, FileMaker Pro n'est franchement pas très compliqué dans ses expressions de calcul et on peut bâtir une expression grâce à la fonction "Obtenir ( DateActuelle)", qui donne la date du jour, et au signe "&", qui concatène (colle ensemble) des chaînes alphanumériques.
Pour nos deux options, nous allons utiliser la fonction Cas( Test1 ; Résultat1 ; Résultat par défaut ) qui permet de donner deux résultats différents (et même plus mais on a dit qu'on ne rentrait pas dans les détails tout de suite) en fonction du test (si le test est vrai, le résultat 1 s'applique, sinon c'est le résultat par défaut) :
Cas(
Mois ( Obtenir ( DateActuelle ) ) > 9 ;
Annee ( Obtenir ( DateActuelle ) ) & "-" & Annee ( Obtenir ( DateActuelle ) ) + 1 ;
Annee ( Obtenir ( DateActuelle ) ) - 1 & "-" & Annee ( Obtenir ( DateActuelle ) )
)
|
Ouf ! Assez lisible, finalement ! C'est intéressant, ce calcul : à chaque fois qu'on ouvre le fichier, l'année scolaire en cours est calculée ! Bien, on rentre ce calcul très compliqué dans la fenêtre de calcul (vous pouvez même faire un copier ici et coller dans la fenêtre FMP), on précise en bas qu'on souhaite un "résultat du calcul" de type texte et on fait OK.
Le même calcul est utilisé dans la table INS, pour déterminer l'année scolaire lors de l'inscription. La seule différence est que, dans ce cas, la donnée ne peut pas être changée, par définition.
Il n'y a pas de souci : au lieu de faire un calcul, on crée une rubrique texte. Plaçons-nous sur la table INS_Inscriptions. On crée la rubrique Zkc_Annee, de type texte puis on clique sur Créer puis Options... Pour ceux qui ont bien suivit, FileMaker va alors émettre un message disant que ce nom existe déjà. C'est que la rubrique est déjà créée. On la sélectionne et on clique sur Options...
Dans l'onglet "Entrée automatique", on sélectionne "résultat de calcul" pour faire un auto-calcul. La fenêtre de calcul s'ouvre, on y place le même calcul que ci-dessus. Comme notre rubrique est de type "texte", le résultat de calcul est indiqué comme "texte" et on ne peut pas le modifier. On valide par OK. On laisse l'option "Ne pas remplacer val. exist. de la rubrique (si il y a lieu)" cochée et on impose que la rubrique soit une entrée non modifiable lors de la saisie (dernière option en bas). C'est tout.
Revenons sur la table CLA_Classes pour créer la rubrique constante zkk_Eleve. On va se référer à ce qui a déjà été fait pour zkk_0 et zkk_1, selon son choix : donnée non modifiable, auto-calcul non modifiable ou calcul, peut importe, du moment que le résultat soit une chaîne de caractères donnant "eleve".
Mouais... Et si il y avait une faute d'orthographe lorsque l'utilisateur encode le type de personne dans la table PER ? On pourrait encoder Eleve, eleve, éleve, élève, Elève, etc... Un truc : comme la rubrique zkk_Eleve est en charge de pointer vers le type de personne dans la table PER, on ne va pas se contenter d'une seule possibilité, mais de multiples, sous forme de liste (une liste étant des chaines de caractères séparées par des retours chariot). Ainsi, pour zkk_Eleve dans la table CLA, on peut se faire un calcul avec une liste de chaines de caractères :
Ainsi, on est à peu près sûr de rencontrer toutes les possibilités : la rubrique zkk_Eleves pointant vers la rubrique "zk_Type" de la table INS et la rubrique "Type" de la table PER, on devrait ainsi pouvoir se lier à toutes les combinaisons possibles. Leçon à retenir : lorsqu'on a plusieurs valeurs sous forme de liste dans une rubrique servant de lien, le lien pointera vers toutes les possibilités de la liste. Bien pratique !
Tout est en place, maintenant. Il nous reste à créer les liens. Hop, allons dans l'onglet "Liens".
Tout d'abord, on duplique une OT de la table INS et on place cette nouvelle OT à côté de l'ancre CLA__, en la renommant cla_INS__. On fait de même en dupliquant une OT de la table PER et on la place à droite de la bouée cla_INS__, en la renommant cla_ins_PER__Eleve, car filtrée sur les élèves.
Ensuite, on commence à faire un premier lien, de CLA::zkp vers cla_INS::zkf_CLA :
Ensuite, on clique deux fois sur le lien ainsi créé (le carré avec le signe "=" entre les deux OT, et celui-ci s'ouvre. On y voit effectivement le premier lien créé entre zkp et zkf_CLA. Dans la liste des rubriques à gauche (OT CLA__), on sélectionne zkc_AnneeCourante, et à droite (OT cla_INS__), on sélectionne zkc_Annee, puis on clique sur "Ajouter". Attention, l'option par défaut n'est pas ajouter mais modifier. Si vous l'activez par inadvertance, vous modifier le lien courant.
Ensuite, on fait de même avec, à gauche, la rubrique zkk_Eleve, et à droite, la rubrique zk_Type :
Finalement, ce premier lien complet devrait ressembler à ceci :
On clique sur "OK" pour fermer le lien. Le graphe des liens se présente ainsi, où on voit très bien le lien triple (attention, on a du placer l'OT cla_INS__ au-dessus de cla_MAT__ pour éviter que les liens se croisent) :
Attaquons maintenant le deuxième lien, entre cla_INS__ et cla_ins_PER__Eleve. Les étapes suivantes conduisent à ce double lien :
Ensuite, on peut fermer la boutique, en cliquant dans les coins supérieurs droits de OT, faire un peu de rangement toujours avec les outils d'alignement et laisser le graphe de lien ainsi :
Ouf ! Nos liens multiples sont ainsi créés, et nos élèves de l'année en cours sont liés à leur classe !
Nous verrons plus tard, dans la section des Modèles, comment les utiliser.
Si on veut créer le même genre de lien pour obtenir les professeurs affectés à une classe, il suffit de créer la rubrique constante zkk_Professeur dans la table CLA, sans oublier de lui indiquer une valeur constante et non modifiable. Puis on met en place les nouvelles bouées et leurs liens. On en profite éventuellement pour renommer notre première bouée cla_INS__ en cla_INS__Eleve.
Un petit peu de ménage, et voilà notre graphe complété et rangé. Comme c'est beau !
Nous reste donc à établir quelques principes à respecter dans les liens
Le fichier bien mérité à l'issue de cette longue étape : il est là
<==Mise en place des liens - Autres liens simples | ^ Structure | Principes à respecter dans les liens==> |