Manque table pour Emploi du temps sous access
frostéo
Messages postés
6
Statut
Membre
-
blux Messages postés 27997 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27997 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai entrepris de faire un emploi du temps sous access pour une école supérieure dans laquelle je bosse.
L'emploi du temps actuel sous excel pause problèmes (en plus d'être très lourd : 1 ligne par heure de 8H à 21H), j'ai passé énormément de temps à créer des recherches sous VBA alors que j'ai découvert qu'access faisait ça très bien. Bref access me voilà
à l'aide des infos que j'ai pu glaner, j'ai monté le modèle de tables et des relations MAIS je bloque sur un problème:
pour 1 cours je peux avoir plusieurs intervenants :
1 prof et plusieurs assistants (nombre variable d'assistants selon les promos et les cours)
et je ne sais pas comment faire pour qu'il n'y ait pas d'enregistrements vides (j'ai lu que des enregistrement vides était le signe d'une BDD mal montée)
mes tables sont:
personnel(CPersonnel, suivi de leurs info perso en tant que salariés, pas en tant qu'enseignants/assistants)
groupe(CGroupe, LibelléGrp) j'utilise groupe parce que certains cours se font en sous groupes de promo
matière (CMatière, LibelléMat)
cours(CCours, CMatière, jour, heuredeb, durée)
salle(CSalle,LibelléSalle)
relationcours(CPersonnel (là je met le prof),CGroupe,CSalle,CMatière, remarque)
Dans remarque j'avais commencé à mettre les assistants, mais impossible de faire des recherches ensuite, comme de donner à une personne (prof sur certains cours et assistant sur d'autres) un emploi du temps grace à un état... et 1 assistant se retrouvait programmé dans 2 cours différents en même temps ... pas pratique.
Mon problème (comme je le ressens) me semble double:
1 personne peut avoir 2 status: enseignant et assistant (mais pas en même temps) selon le jour.
où et comment j'insère le/les assistants pour qu'au final je puisse sortir 1 emploi du temps par personne...
Me faut il une table supplémentaire ? avec quel lien logique? ou dois-je réarranger mes données?
D'avance merci.
PS: pour donner une idée, voilà le type de requete que je vais être amené à faire pour me permettre de sortir:
Emploi du temps par personne
Emploi du temps de toutes les promos (ou groupes) pour 1 journée/semaine (voir plus)
Rechercher les doublons de personnes (assistant et/ou prof) à une même date (tranche horaire)
J'ai entrepris de faire un emploi du temps sous access pour une école supérieure dans laquelle je bosse.
L'emploi du temps actuel sous excel pause problèmes (en plus d'être très lourd : 1 ligne par heure de 8H à 21H), j'ai passé énormément de temps à créer des recherches sous VBA alors que j'ai découvert qu'access faisait ça très bien. Bref access me voilà
à l'aide des infos que j'ai pu glaner, j'ai monté le modèle de tables et des relations MAIS je bloque sur un problème:
pour 1 cours je peux avoir plusieurs intervenants :
1 prof et plusieurs assistants (nombre variable d'assistants selon les promos et les cours)
et je ne sais pas comment faire pour qu'il n'y ait pas d'enregistrements vides (j'ai lu que des enregistrement vides était le signe d'une BDD mal montée)
mes tables sont:
personnel(CPersonnel, suivi de leurs info perso en tant que salariés, pas en tant qu'enseignants/assistants)
groupe(CGroupe, LibelléGrp) j'utilise groupe parce que certains cours se font en sous groupes de promo
matière (CMatière, LibelléMat)
cours(CCours, CMatière, jour, heuredeb, durée)
salle(CSalle,LibelléSalle)
relationcours(CPersonnel (là je met le prof),CGroupe,CSalle,CMatière, remarque)
Dans remarque j'avais commencé à mettre les assistants, mais impossible de faire des recherches ensuite, comme de donner à une personne (prof sur certains cours et assistant sur d'autres) un emploi du temps grace à un état... et 1 assistant se retrouvait programmé dans 2 cours différents en même temps ... pas pratique.
Mon problème (comme je le ressens) me semble double:
1 personne peut avoir 2 status: enseignant et assistant (mais pas en même temps) selon le jour.
où et comment j'insère le/les assistants pour qu'au final je puisse sortir 1 emploi du temps par personne...
Me faut il une table supplémentaire ? avec quel lien logique? ou dois-je réarranger mes données?
D'avance merci.
PS: pour donner une idée, voilà le type de requete que je vais être amené à faire pour me permettre de sortir:
Emploi du temps par personne
Emploi du temps de toutes les promos (ou groupes) pour 1 journée/semaine (voir plus)
Rechercher les doublons de personnes (assistant et/ou prof) à une même date (tranche horaire)
A voir également:
- Manque table pour Emploi du temps sous access
- Table ascii - Guide
- Mode d'emploi - Guide
- Table des matières word - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Temps pour soi iphone - Guide
7 réponses
Salut,
y'a déjà un truc qui ne va pas, c'est que 'relationcours' ne semble pas avoir de champ commun avec 'cours', donc ça ne va pas faciliter les choses...
A partir du moment où un cours peut être dispensé par plusieurs personnes et que plusieurs personnes peuvent dispenser des cours, on a une relation de type n-n entre cours et personnes. Ce qui se traduit par l'apparition d'une table intermédiaire 1-n,n-1, qui comprendra les personnes qui sont amenées à y participer (avec leur statut : enseignant ou assistant), c'est un peu ce que tu as commencé avec la table relationcours, que l'on pourrait nommer 'organisation cours'.
Je serais intéressé par une copie écran de tes relations access, à mon avis, tout se joue là-dessus.
y'a déjà un truc qui ne va pas, c'est que 'relationcours' ne semble pas avoir de champ commun avec 'cours', donc ça ne va pas faciliter les choses...
A partir du moment où un cours peut être dispensé par plusieurs personnes et que plusieurs personnes peuvent dispenser des cours, on a une relation de type n-n entre cours et personnes. Ce qui se traduit par l'apparition d'une table intermédiaire 1-n,n-1, qui comprendra les personnes qui sont amenées à y participer (avec leur statut : enseignant ou assistant), c'est un peu ce que tu as commencé avec la table relationcours, que l'on pourrait nommer 'organisation cours'.
Je serais intéressé par une copie écran de tes relations access, à mon avis, tout se joue là-dessus.
Voilà j'ai en partie suivi tes indications, j'ai ajouté une table sur les roles et une table avec les clé personnel et clé roles mais maintenant je ne sais pas comment relier ça au cours ...
Je me dit c'est comme une facture (et j'ai regardé des exemples ) mais je n'y arrive pas
1 cours à 1 date ne peut avoir qu'1 équipe d'enseignant (1 prof plusieurs assistants) mais les équipes peuvent changer et les roles de ces personnes peuvent changer aussi...
voilà un lien vers une capture de mon écran relation (avant je reliais table personnel(Cpersonnel) à Cpersonnel de OraganisationCours
[URL=http://www.hostingpics.net/viewer.php?id=642885relations_planning2.jpg][IMG]http://img3.hostingpics.net/thumbs/mini_642885relations_planning2.jpg/IMG/URL
D'avance merci
PS j'ai mis une colonne COrgRole au cas où je devrai le déclarer en clé primaire
Je me dit c'est comme une facture (et j'ai regardé des exemples ) mais je n'y arrive pas
1 cours à 1 date ne peut avoir qu'1 équipe d'enseignant (1 prof plusieurs assistants) mais les équipes peuvent changer et les roles de ces personnes peuvent changer aussi...
voilà un lien vers une capture de mon écran relation (avant je reliais table personnel(Cpersonnel) à Cpersonnel de OraganisationCours
[URL=http://www.hostingpics.net/viewer.php?id=642885relations_planning2.jpg][IMG]http://img3.hostingpics.net/thumbs/mini_642885relations_planning2.jpg/IMG/URL
D'avance merci
PS j'ai mis une colonne COrgRole au cas où je devrai le déclarer en clé primaire
Tu fais fausse route.
Il faut simplement relier 'organisationcours' à la table 'personnel'. La clé primaire de 'organisationcours' sera la concaténation des clés primaires des tables attachées, soit 'CCour' (sans 's' puisqu'il n'y en a pas dans la table Cour) et 'CCpersonnel'.
C'est dans cette table que tu mettras le rôle du personnel à ce cours.
Il faut simplement relier 'organisationcours' à la table 'personnel'. La clé primaire de 'organisationcours' sera la concaténation des clés primaires des tables attachées, soit 'CCour' (sans 's' puisqu'il n'y en a pas dans la table Cour) et 'CCpersonnel'.
C'est dans cette table que tu mettras le rôle du personnel à ce cours.
j'ai essayé de comprendre ce que tu m'as dit mais ... non je ne comprends pas, je suis tout novice sur access et je n'ai pas encore la logique (je sens presque les rouages se serrer quand j'essaye d'ingérer ta solution ...)
Pourrais tu me le formuler autrement?
Pourrais tu me le formuler autrement?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je résume les contraintes que j'ai pu comprendre au travers de tes explications :
Un cours est identifié par une clé unique. Ce cours est unique car dans la table il est indiqué des heures, de plus on peut parfaitement avoir plusieurs cours de maths en même temps dans un bahut. Un cours peut être assuré par une ou plusieurs personnes et il est dispensé dans une salle unique (mais ce n'est que de moindre importance).
Un professeur (ou intervenant) est lui aussi unique, mais il ne possède pas le don d'ubiquité. De plus, il peut avoir un rôle différent à chaque intervention dans un cours (voire, pourquoi pas, un rôle différent dans le même cours, mais changeant sur l'année).
Pour savoir qui fait quoi, quand (et où) pour les intervenants et savoir qui intervient à un cours (vu du côté du cours), il faut donc mettre en relation la table qui contient les intervenants et la table des cours.
Comme on a vu qu'un cours pouvait avoir plusieurs intervenants et qu'un intervenant peut donner plusieurs cours, on va logiquement vers une relation de type n-n dans le cadre d'un SGBDR.
Mais cette relation ne peut pas être créée directement, il faut donc intercaler un table intermédiaire qui fera la relation entre ces deux tables. Les deux tables du début seront reliées à cette table intermédiaire par une relation de type 1-n. Et c'est dans cette table que l'on pourra mettre des informations spécifiques à cette occurrence de cours (jean dupond : prof, marcel durand : assistant...).
Lorsque l'on créée ce type de relation, la clé primaire est déduite par concaténation des clés primaires des tables rattachées.
Un peu plus d'infos ici, c'est long, mais c'est très bien (notamment la phase de MLD sur les cardinalités, chapitre 2, paragraphes 3 et 4) :
http://www.sam-mag.com/P53,53,5,43,,,default.aspx
Un cours est identifié par une clé unique. Ce cours est unique car dans la table il est indiqué des heures, de plus on peut parfaitement avoir plusieurs cours de maths en même temps dans un bahut. Un cours peut être assuré par une ou plusieurs personnes et il est dispensé dans une salle unique (mais ce n'est que de moindre importance).
Un professeur (ou intervenant) est lui aussi unique, mais il ne possède pas le don d'ubiquité. De plus, il peut avoir un rôle différent à chaque intervention dans un cours (voire, pourquoi pas, un rôle différent dans le même cours, mais changeant sur l'année).
Pour savoir qui fait quoi, quand (et où) pour les intervenants et savoir qui intervient à un cours (vu du côté du cours), il faut donc mettre en relation la table qui contient les intervenants et la table des cours.
Comme on a vu qu'un cours pouvait avoir plusieurs intervenants et qu'un intervenant peut donner plusieurs cours, on va logiquement vers une relation de type n-n dans le cadre d'un SGBDR.
Mais cette relation ne peut pas être créée directement, il faut donc intercaler un table intermédiaire qui fera la relation entre ces deux tables. Les deux tables du début seront reliées à cette table intermédiaire par une relation de type 1-n. Et c'est dans cette table que l'on pourra mettre des informations spécifiques à cette occurrence de cours (jean dupond : prof, marcel durand : assistant...).
Lorsque l'on créée ce type de relation, la clé primaire est déduite par concaténation des clés primaires des tables rattachées.
Un peu plus d'infos ici, c'est long, mais c'est très bien (notamment la phase de MLD sur les cardinalités, chapitre 2, paragraphes 3 et 4) :
http://www.sam-mag.com/P53,53,5,43,,,default.aspx
Merveilleux document que celui dont tu m'as mis le lien!
J'appréhende mieux maintenant, j'en suis au 4 ème volet et hormis quelques petits flous je sens les rouages de la logique décoincés, pour ça déjà je te suis très reconnaissant (et ma copine aussi, parce que je suis moins bougon)
Je vais reprendre mon projet du début car au final je comptais faire évoluer 'ensuite' la structure de la base, mais puisqu'en fait j'ai le temps (plusieurs mois) je vais essayer d'établir la "cartographie" complète maintenant.
Je met en lien le résultat de tes recommandations (que je saisis maintenant) et de ma compréhension de la lecture.
Le modèle te semble cohérent maintenant?
[url=http://www.hostingpics.net/viewer.php?id=608210relations_planning_corrige_allege.jpg][img]http://img3.hostingpics.net/pics/608210relations_planning_corrige_allege.jpg[/img][/url]
Si c'est le cas je m'en servirai dans mon modèle élargit
merci beaucoup.
J'appréhende mieux maintenant, j'en suis au 4 ème volet et hormis quelques petits flous je sens les rouages de la logique décoincés, pour ça déjà je te suis très reconnaissant (et ma copine aussi, parce que je suis moins bougon)
Je vais reprendre mon projet du début car au final je comptais faire évoluer 'ensuite' la structure de la base, mais puisqu'en fait j'ai le temps (plusieurs mois) je vais essayer d'établir la "cartographie" complète maintenant.
Je met en lien le résultat de tes recommandations (que je saisis maintenant) et de ma compréhension de la lecture.
Le modèle te semble cohérent maintenant?
[url=http://www.hostingpics.net/viewer.php?id=608210relations_planning_corrige_allege.jpg][img]http://img3.hostingpics.net/pics/608210relations_planning_corrige_allege.jpg[/img][/url]
Si c'est le cas je m'en servirai dans mon modèle élargit
merci beaucoup.
Il te faut juste déclarer en clé primaire de la table "distributio..." les deux champs : CPersonnel et CCours, sinon ça ne va pas marcher.
Sinon, ça me semble cohérent, mais cela veut dire que la table cours comprend l'intégralité des cours qui auront lieu, pas question de mettre 'jeudi de 15 à 16', mais il faut une date précise : jeudi 26/02/09 de 15 à 16..., tu auras donc une table très grosse.
Sinon, ça me semble cohérent, mais cela veut dire que la table cours comprend l'intégralité des cours qui auront lieu, pas question de mettre 'jeudi de 15 à 16', mais il faut une date précise : jeudi 26/02/09 de 15 à 16..., tu auras donc une table très grosse.
bonjour,
Effectivement je pense que la table des cours sera grande, mais je me suis dit que la version précédente de ce que j'avais reflétait ma vision restreinte:
à ce moment, j'avais pensé à la structure d'1 semaine, puis je m'étais dit que j'allais implémenter les semaines ensuite, mais ça aurait donné un truc (valable pour collèges ou lycée par exemple) où toutes les semaines auraient les mêmes cours... en supérieur ça ne marche pas trop :S
Alors j'ai mis tout directement dans cours puisqu'il n'y a pas de reproductibilité de l'agencement des cours.
Peut être vois tu un moyen d'alléger le montage ?
Je retourne bosser, je garde près de moi papier crayon pour l'écriture de mon projet "élargit".
Effectivement je pense que la table des cours sera grande, mais je me suis dit que la version précédente de ce que j'avais reflétait ma vision restreinte:
à ce moment, j'avais pensé à la structure d'1 semaine, puis je m'étais dit que j'allais implémenter les semaines ensuite, mais ça aurait donné un truc (valable pour collèges ou lycée par exemple) où toutes les semaines auraient les mêmes cours... en supérieur ça ne marche pas trop :S
Alors j'ai mis tout directement dans cours puisqu'il n'y a pas de reproductibilité de l'agencement des cours.
Peut être vois tu un moyen d'alléger le montage ?
Je retourne bosser, je garde près de moi papier crayon pour l'écriture de mon projet "élargit".
Rajoute la clé primaire de la table "distributio..." et c'est tout ce que je vois pour l'instant.
Si tu as d'autres contraintes ou d'autres choses à voir (traitements particuliers à prévoir), fais-le maintenant : quand la structure est définie, c'est 'achement dur de la modifier sans tout casser (surtout si des données sont déjà présentes en table).
Si tu as d'autres contraintes ou d'autres choses à voir (traitements particuliers à prévoir), fais-le maintenant : quand la structure est définie, c'est 'achement dur de la modifier sans tout casser (surtout si des données sont déjà présentes en table).