OVH Cloud OVH Cloud

Association n-naire --> associations bi-naires

4 réponses
Avatar
Denis Bitouzé
Bonjour,

je suis relativement d=E9butant dans le domaine des SGBDR et je me pose
des questions quant =E0 la pertinence du sch=E9ma que je dois adopter.

Je cherche =E0 mettre en place un syst=E8me d'=E9dition d'emploi du temps
dans l'=E9tablissement o=F9 j'enseigne.

J'ai donc naturellement des entit=E9s :

-- enseignants ;
-- mati=E8res ;
-- publics (1=E8re ann=E9e, 2=E8me ann=E9e, etc.) ;
-- types de s=E9ance (cours, TD, TP, etc.) ;
-- etc.

Bien s=FBr, l'association =E0 laquelle on songe naturellement est celle qui
lie les enseignants aux mati=E8res. Mais, il se trouve
-- que certaines mati=E8res sont enseign=E9es par certains enseignants en
1=E8re ann=E9e mais par d'autres en 2=E8me ann=E9e ;
-- que certaines mati=E8res soient enseign=E9es en 1=E8re ann=E9e par un
certain enseignant en cours et par un autre en TD, etc.

J'ai donc l'impression d'avoir affaire =E0 une association n-naire
(n=3D4) pour laquelle il faudrait construire une table de jointure,
nomm=E9e, par exemple, =AB interventions =BB et dont les enregistrements
contiendraient par exemple :

int_id ens_id mat_id pub_id typ_id
4 12 5 2 1
5 12 4 1 1
6 8 4 1 2

Or, j'ai souvent lu que ces associations n-naires =E9taient =E0 =E9viter et=
=E0
remplacer, ce qui est presque toujours possible, par des
associations binaires. Et l=E0, paf, je ne vois pas tr=E8s bien comment il
serait judicieux de mod=E9liser les choses. Aussi, malgr=E9 mes nombreuses
lectures, en particulier sur SQLPro, je me tourne vers vous pour un
petit conseil.

Merci d'avance.
--=20
Denis

4 réponses

Avatar
P'tit Marcel
Denis Bitouzé wrote:
Je cherche à mettre en place un système d'édition d'emploi du temps
dans l'établissement où j'enseigne.

J'ai donc naturellement des entités :

-- enseignants ;
-- matières ;
-- publics (1ère année, 2ème année, etc.) ;
-- types de séance (cours, TD, TP, etc.) ;
-- etc.




1/ attention à ce que tu définis comme 'matières'. S'agit-t'il de la /
d'une des spécialités d'un enseignant (genre capes de géo) ou d'un
rassemblement plus ou moins arbitraire de cours (genre informatique)

2/ pour modéliser, je te conseille de te limiter aux relations
pertinentes (et non toutes les relations possibles). ça ne mange pas de
pain de définir quelques attributs majeurs des entités (ça permet de
clarifier la définition de l'entité)

3/ après analyse du modèle, des entités peuvent fusionner ou se
transformer en simple attribut.

pour donner un exemple, tu pourrais dans ton cas avoir un modèle du genre :

enseignant 1-n cours (ou n-n)
public/classe 1-n cours
type 1-n cours (ou type comme attribut)
cours 1-n tranche_horaire*salle

la matiere serait un attribut d'enseignant ou bien de cours ou bien une
entité liée à cours.

cours peut avoir des attributs propres tq coefficient, nombre d'heures
au programme, dépendance avec un autre cours (genre pour s'inscrire à
SGBD 101 il faut avoir réussi Orthographe 213, ou pas de TD sans Amphi),
etc.


mes deux centimes.
--
Geoffroy
Avatar
Denis Bitouzé
Le Mon, 15 Nov 2004 23:01:20 +0100
"P'tit Marcel" a écrit:

1/ attention à ce que tu définis comme 'matières'. S'agit-t'il de la
/ d'une des spécialités d'un enseignant (genre capes de géo) ou d'u n
rassemblement plus ou moins arbitraire de cours (genre informatique)



Ni l'un ni l'autre ;) :
1) une matière n'est pas une des spécialités d'un enseignant : elle
peut être enseignée par différents enseignants selon que :
a) ce sera en 1ère année, en 2ème année,..., en CAPES, etc. ;
b) ce sera en cours, TD, TP, etc.
donc, à ce titre, chaque matière peut être vue comme un rassemblement
plus ou moins arbitraire de « cours » (mais je ne suis pas tout à fait
sûr de ce que tu entends par « cours ») ;
2) chaque matière peut être vue comme une spécialité ; par exemple,
chez nous, l'informatique est un tout et ne se décline pas en
sous-matières.

Autrement dit,
-- chaque matière est en soit atomique : par exemple, il n'y a pas
*une* matière « physique », mais *des* matières « électricité », «
mécanique des fluides», « thermodynamique », etc. ;
-- il y a une déclinaison de chaque matière à faire :
-- selon le public (1ère année, en 2ème année,..., en CAPES, e tc.)
-- selon le type de séance (cours, TD, TP, etc.).

2/ pour modéliser, je te conseille de te limiter aux relations
pertinentes (et non toutes les relations possibles). ça ne mange pas
de pain de définir quelques attributs majeurs des entités (ça permet
de clarifier la définition de l'entité)



Euh, je ne suis pas sûr de bien te comprendre. Pourrais-tu donner un
exemple d'attribut majeur d'entité ?

En fait, si je souhaite préciser tant les choses, c'est pour faciliter
la tâche et limiter les erreurs de la secrétaire qui saisira les
données de l'emploi du temps avec l'interface Web prévue ; par exemple,
lorsqu'elle aura choisi, pour une séance d'une heure donnée d'un jour
donné :
-- le public dans la liste des publics ;
-- le type de séance dans la liste des types de séance ;
-- la matière dans la liste des matières ;
l'enseignant soit pré-sélectionné dans la liste des enseignants. J'ai
oublié de préciser que, chez nous, l'emploi du temps change chaque
semaine et que, donc, rendre la chose ergonomique pour la secrétaire
est loin d'être un luxe...

Ces précisions ont aussi pour but de pouvoir facilement faire des
bilans, par exemple pour être en mesure de donner en cours d'année, le
nombre d'heures effectuées par l'enseignant Duschmol, en cours et en
TD...

3/ après analyse du modèle, des entités peuvent fusionner ou se
transformer en simple attribut.



Euh, là encore, pourrais-tu me donner un exemple d'entités fusionnant
ou se transformant en simple attribut ?

pour donner un exemple, tu pourrais dans ton cas avoir un modèle du
genre :

enseignant 1-n cours (ou n-n)
public/classe 1-n cours
type 1-n cours (ou type comme attribut)
cours 1-n tranche_horaire*salle



Je vais examiner cela mais, euh, peux-tu me dire ce que tu entends par
ce * ?

la matiere serait un attribut d'enseignant



Certains enseignants enseignent plusieurs matières
(informatique et maths par exemple), donc ça irait à
l'encontre de je ne sais plus quelle forme normale, non ?

ou bien de cours



Oui, mais on aimerait pouvoir par exemple distinguer le cours «
cours magistral de maths en 1ère année » du cours « TD de maths en 2ème
année » donc il faudrait, à l'entité « cours », ajouter les att ributs «
type de séance » et « public », me trompè-je ?

ou bien une entité liée à cours.



Je vais examiner cela...

cours peut avoir des attributs propres tq coefficient, nombre
d'heures au programme, dépendance avec un autre cours (genre pour
s'inscrire à SGBD 101 il faut avoir réussi Orthographe 213, ou pas de
TD sans Amphi), etc.



Tout à fait !

mes deux centimes.



Bien plus que cela ! Merci beaucoup !
--
Denis
Avatar
Denis Bitouzé
Le Tue, 16 Nov 2004 23:14:32 +0100
"P'tit Marcel" a écrit:

> (mais je ne
> suis pas tout à fait sûr de ce que tu entends par « cours ») ;

un enseignement par un professeur à un groupe d'élèves fixe, qui
s'effectue par séances pendant un laps de temps long (semestre,
année).



OK mais, avec mes maigres connaissances, je voyais ces cours regroupés
en une table de jointure : celle dont je causais dans mon mail initial,
que je nommais alors « interventions » et dont les enregistrements
contenaient par exemple :

int_id ens_id mat_id pub_id typ_id
4 12 5 2 1
5 12 4 1 1
6 8 4 1 2

Je ne vois pas ce qui ne va pas dans cette approche...

exemple : "je vais plus au cours de TP LaTex, le prof veut plus qu'on
load Unreal tournament sur les PC"



Tu as choisi l'exemple de LaTeX au hasard ? ;)

> Euh, je ne suis pas sûr de bien te comprendre. Pourrais-tu donner
> un exemple d'attribut majeur d'entité ?

le nom, le nombre d'heures au programme, l'heure de début d'une
tranche horaire de cours...



Ah oui, bien sûr ! Je croyais que ça cachait un concept précis...

> Euh, là encore, pourrais-tu me donner un exemple d'entités
> fusionnant ou se transformant en simple attribut ?

a- deux entités liées par une relation 1-1 peuvent généralement être
fusionnées.



Ça, OK.

b- dans un modèle de données classique de prise de commande, le
client est une entité et l'entête de commande en est une autre. Dans
certains modes de fonctionnement (vente au comptoir), on simplifie le
schéma et les données du client sont stockées dans la commande sous
forme d'attributs.



Entendu, mais où, dans le modèle dont je parlais initialement, ai-je
pêché par manque de simplicité ? La table « interventions » plus haut
est-elle vraiment trop atomisée ?

> Oui, mais on aimerait pouvoir par exemple distinguer le cours «
> cours magistral de maths en 1ère année » du cours « TD de maths en
> 2ème année » donc il faudrait, à l'entité « cours », ajou ter les
> attributs « type de séance » et « public », me trompè-je ?

oui.



Euh (désolé pour le bruit) : « oui » pour

-- « me trompè-je »

ou pour

-- « il faudrait, à l'entité « cours », ajouter les attributs « type
de séance » et « public » » ?

Merci !
--
Denis
Avatar
Denis Bitouzé
Le Sat, 20 Nov 2004 00:01:43 +0100
"P'tit Marcel" a écrit:

Denis Bitouzé wrote:
>
> Je ne vois pas ce qui ne va pas dans cette approche...

moi non plus.



Aaaaahhh, ouf !

Cette table ne contiendra pas seulement ces
identifiants, mais aussi des attributs propres (genre nb d'heures du
programme, et autres que j'ai déjà décrits).



Tout à fait !

Le fait que l'entité est
liée à de nombreuses données de référence (= quasi-invariante s) n'est
amha pas une erreur en soi, cela traduit qu'elle est l'élément
central de ton univers.



OK. Encore que « mon » univers, hein, c'est plus grand que ça,
heureusement ;)

Au passage, je te recommande de choisir des noms plus parlants comme
"matiere_id" ou "public_id". Le Ko ne coûte plus grand chose et les
programmeurs qui maintiendront peut être ton code dans 10 ans t'en
remercieront.



C'est vrai ; en fait, n'y connaissant pas grand chose mais
cherchant à faire le mieux possible, j'ai voulu suivre les conseils «
Normalisation des noms des objets des bases de données », de Frédér ic
Brouard, qu'on trouve ici :

http://sql.developpez.com/standards/

et qui spécifient en particulier :

« Les noms de colonnes doivent être préfixée par le trigramme de la
table d'origine et reprendre le nom d'attribut. »

> Tu as choisi l'exemple de LaTeX au hasard ? ;)

non, google est mon ami !



Argh, démasqué !

> Entendu, mais où, dans le modèle dont je parlais initialement,
> ai-je pêché par manque de simplicité ? La table « interventions »
> plus haut est-elle vraiment trop atomisée ?

c'est impossible à dire tant que tu n'auras pas formalisé la totalit é
des données qui seront effectivement gérées (et à quelles fins) et
que tu ne les auras pas regroupées en entités. Par exemple, si tu
constatais que le "type" ou la "matière" est finalement une
information facultative, inutilisée, subjective, variant dans le
temps, etc., tu pourrais choisir de remplacer typ_id rep.mat_id par
un simple attribut alphanumérique libre et supprimer la table de
référence.



OK.

Je ne suis pas si perfide



Je n'ai jamais insinué une chose pareille, c'est pas mon genre ;)

Merci encore !
--
Denis