# Gnral Dveloppement > ALM > Modlisation > Schma > [MLD] Intranet cole suprieure

## spring.time

Bonjour tout le monde,

je fais actuellement une application intranet pour une cole suprieure.
j'ai besoin de votre aide concernant la modlisation de la BD.
voici les rgles rgissant les donnes:

-un tudiant est caractris par: nom, prnom, date_naissance, ncarte d'identit, nationalit, n tlphone et de ses parents, adresse, moyenne gnrale de BAC, mention de BAC, ...

-un tudiant appartient  un niveau parmi ces 4 niveaux: 3e, 4e, 5e, 6e.

-si l'tudiant est au niveau 5e, il choisit une option parmi 4.

-pour chaque niveau, l'tudiant tudie des disciplines bien dfinies.

-les tudiants des 4 options tudient des disciplines communes et bien sur des disciplines relatives  leurs options.

-l'tudiant a un bulletin par niveau.

-le bulletin de notes se compose de:
notes des disciplines(avec et sans rattrapage) et leurs coefficients, la moyenne de la formation militaire, la moyenne de la coefficients scientifique, la moyenne gnrale avec et sans rattrapage, le classement de l'tudiant s'il n'a pas de rattrapage.

-chaque prof, via son compte, affecte les notes(avec et sans rattrapage)  ses tudiants et ses apprciations, et ces notes sont affiches sur le compte de la direction des tudes.

-la moyenne de la formation militaire de chaque tudiant est donne par un reprsentant de la comit militaire, via son compte.

-la moyenne de la formation scientifique se calcule en fonction des notes des disciplines et la somme des coefficients.

-la moyenne gnrale avec et sans rattrapage ont une formule bien prcise.

-l'tudiant a le droit de choisir les disciplines  repasser dans le rattrapage si la note.

-si l'tudiant obtient une note de rattrapage > 12, il aura 12.

-si l'tudiant a une note de rattrapage < note sans rattrapage, il aura la note la note sans rattrapage.

-la direction des tudes qui dmarre le calcule des moyennes gnrales via son compte.

-il existe 4 n de promotions.

-la direction des tudes et les profs doivent avoir une liste des tudiants de chaque niveau, ou' chaque tudiant est caractris par une matricule qui est compose de npromotion concatn avec le n de l'ordre alphabtique de nom de famille.

-s'il s'agit d'un tudiant doubl, son matricule=son npromotion se dgrade et son n de l'ordre alphabtique de nom de famille deviendra le dernier numro.

-le prof enseigne une ou plusieurs disciplines  un ou plusieurs niveaux.


-----------
voici les tables de la BD:

etudiant( id_etudiant, #id_niveau, #id_promotion, ....)

niveau( id_niveau, niveau)

discipline( id_discipline, #id_coef, #id_prof, #id_niveau, #id_option, discipline)

note( id_note, #id_etudiant, #id_discipline, #id_prof, note_avec_R, note_sans_R)

coef( id_coef, coef)

moyenne_FM( id_moyenne_FM, #id_etudiant, annee_academique)

moyenne_FS( id_moyenne_FS, moyenne_sans_R, moyenne_avec_R, #id_etudiant, annee_academique)

moyenne_generale( id_moy_g, #id_etudiant, #id_moyenne_FM, #id_moyenne_FS, moy_g_avec_R, moy_g_sans_R)

classement( id_classement, #id_etudiant, nclassement)

promotion( id_promotion, promotion)

prof( id_prof, nom, prenom, telephone, ....)


------
que vous en dites de mes tables, c'est logique?


merci  ::D:

----------


## DaizDev

Salut

Je viens de passer quelques temps sur ton projet et...
Qu'est-ce qu'une promotion ?
Les coefficients varient-ils en fonction du niveau et de l'option ?

Ensuite, pour les tables que tu proposes, il te manque 
la gestion des utilisateurstoutes les tables de relation 0,n ou 1,n

Ce qui ne va pas
Tes tables qui ne contiennent que des calculs

Ce que tu ne peux pas faire avec le modle de donnees
Le calcul des moyennesLe calcul de la note de rattrapageLe calcul si la note de rattrapage est inferieure a la note initiale

Ce que je te conseille
De considrer le comit militaire comme un professeurD'afficher le matricule mais tu n'as pas besoin de le stocker

Malgr tout certains calculs doivent etre gards en base comme
le classementla note finalela moyenne par categorie de discipline

J'en suis  18 tables

----------


## spring.time

*Je vous remercie beaucoup* 

pour les promotions et les coefficients , je vais m'en informer auprs de mon encadrant, j'ai une ambigut sur ce point.

pour la gestion des utilisateurs, j'ai 
une table utilisateur(id, nom, mot_de_passe, qualite)
la qualite montre s'il s'agit d'un prof, de la direction des tudes, d'un tudiant, de la comit militaire.

je sais qu'il ne faut pas stocker des donnes calculables, mais pour le cas d'une cole suprieure, il doit y avoir une sauvegarde de:
le matricule de l'tudiant, ses moyennes (avec ou sans rattrapage), son bulletin, son classement. 
alors comment ferais je ?

----------


## DaizDev

Des que tu as une dfinition sur la promotion, je pourrais te donner une solution pour sauvegarder toutes les infos ncessaires. Tant que la promotion n'est pas explique, je ne peux pas te donner une solution claire

Courage

----------


## spring.time

d'accord DaizDev et Merci pour votre aide 

ds que mon encadrant me l'explique je ferais signe  ::D:

----------


## spring.time

pour le n promotion, il s'agit d'un numro allant de 41 jusqu' l'infini,
chaque n promotion a une dure de vie de 4ans.
pendant l'inscription des tudiants de la 3e, on leur affecte un nouveau n promotion,
par exemple, un tudiant X, X appartient  la 3 anne (la promotion 45) en 2012/2013 -son matricule=4519.
l'an 2013/2014 il sera en 4e -matricule 4519.
l'an 2014/2015 il sera en 5e -matricule 4519.
l'an 2015/2016 il sera en 6e -matricule 4519.

s'il choue, son matricule devient:44 concatn avec le dernier n de la liste.

pour les coefficients, ils varient de 1  10, et par dcision de la direction des tudes et la direction gnrale.

j'espre que c'est clair maintenant  ::P:

----------


## DaizDev

Bien !

Vu qu'il est tard, je vais faire rapide  ::): 
Je te laisse en pice jointe le diagramme que j'ai fait avec Mysql Workbench

Tu as vit de peu  toutes ces rgles de gestion manuscrites

Avec ce schma tu peux grer un coefficient par niveau et par discipline, un tudiant ne peut choisir qu'une option par anne scolaire. Le tronc commun est une option pour la base de donnes, une discipline peut tre dans un ou plusieurs groupes de disciplines.

J'ai rajout les champs et ajouter une relation entre Discipline et GroupeDiscipline pour faciliter la sauvegarde des donnes  part.
Il faut que tu cres les tables de sauvegarde que j'ai pas reprsente.

Le reste tu peux ou dois le grer par programmation

----------


## spring.time

je vous remercie  ::P:  je vais me concentrer sur se schma, pour ajouter mes tables et je vous ferai voir le rsultat

----------


## DaizDev

N'hsite pas  poser des questions, la manire de remplir les tables est pas toujours vidente  ::):

----------


## spring.time

Bonjour,
pour faire ce schma, avez vous fait le MCD en premier?

 ::cry::  j'ai du mal  refaire ce schma, je vais faire un MCD


svp, la table choixRattrapage contient un attribut choix(int), quel est son role?
------------------

pour le processus de rattrapage, l'tudiant reoit un premier bulletin, puis il envoie les noms des disciplines  repasser  la direction des tudes, puis il passe son rattrapage, et on lui donne un 2me bulletin ou' il y'a les notes des disciplines sans rattrapage et pour chaque discipline avec rattrapage, on met la note avant rattrapage et aprs rattrapage.
et aussi on met la moyenne gnrale avec et sans rattrapage, et la moyenne de la formation scientifique et la moyenne de la formation militaire.

----------


## DaizDev

Je l'ai fait directement, une mauvaise habitude  ::D: 
Je me suis bas sur le texte de ton post pour le raliser
Temps pass : 3h environ sur 2 jours

----------


## spring.time

donc je fais la meme chose  ::mouarf::

----------


## spring.time

que vous en pensez de mon MCD vesrion 1.0?
Monsieur DaizDev et Monsieur CinePhil, pourriez vous jeter un coup d'oeil  ::oops::

----------


## DaizDev

> la table choixRattrapage contient un attribut choix(int), quel est son role?


choix prend par exemple 0 si l'tudiant n'a pas choisi, 1 pour il ne repasse pas l'exam, 2 il repasse l'exam.
Mais je prfre {Null, 0, 1} au lieu de {0, 1, 2} comme expliqu prcdemment




> pour le processus de rattrapage, l'tudiant reoit un premier bulletin, puis il envoie les noms des disciplines  repasser  la direction des tudes, puis il passe son rattrapage, et on lui donne un 2me bulletin ou' il y'a les notes des disciplines sans rattrapage et pour chaque discipline avec rattrapage, on met la note avant rattrapage et aprs rattrapage.
> et aussi on met la moyenne gnrale avec et sans rattrapage, et la moyenne de la formation scientifique et la moyenne de la formation militaire.


Par rapport au modle EER que je t'ai joint il te manque quelques champs pour ajouter les moyennes avec ratrappage.

Tu peux galement demand si le coefficient change pour une note "rattrapage" et une note "normale"

----------


## fsmrel

Bonsoir,


Je reviens sur les rgles de gestion des donnes initiales :




> voici les rgles rgissant les donnes


Bonne entre en matire. Mais il faut dabord donner une dfinition des concepts (niveau, discipline, option, etc.) et illustrer par lexemple, car autant de lecteurs de votre message, autant dinterprtations des rgles, interprtations qui peuvent ne rien  voir avec la vtre. 

Exemple de rgles qui laissent songeur et qui ds le dpart soulvent bien des questions :
  Si l'tudiant est au niveau 5e, il choisit une option parmi 4 .Est-ce  dire que les tudiants qui sont  un autre niveau ne sont pas concerns par le systme des options ? Quils peuvent choisir les  options quils veulent ?

De la mme faon, quand vous crivez :

  Les tudiants des 4 options tudient des disciplines communes et bien sur des disciplines relatives  leurs options .Quen est-il des tudiants qui ne sont pas du 5e niveau ?

Etc. Illustrez par des exemples.


@ DaizDev

Puisque votre diagramme est au niveau MLD, autant renforcer les contraintes dinclusion quand on peut le faire par le biais des cls trangres, c'est--dire sans avoir besoin de mettre en uvre des assertions (SQL) ou  dfaut, des triggers. Par exemple, selon votre diagramme, on pourrait insrer dans la table DisciplineCoefficient des triplets {DisciplineId, OptionId, NiveauId} dont la projection {DisciplineId, OptionId} ne soit  pas incluse dans la paire {DisciplineId, OptionId} de len-tte de la table DisciplineOption ; de la mme faon on pourrait insrer dans la table DisciplineCoefficient des triplets dont la projection {NiveauId, OptionId} ne soit  pas incluse dans la paire {NiveauId, OptionId} de len-tte de la table NiveauOption :

 

En consquence, pour btonner et garantir les contraintes dinclusion, on peut reprsenter les choses ainsi :

 

Je ne prjuge pas ici de ladquation du MLD et du MCD propos par spring.time.  Par ailleurs, au stade MCD il nest pas courant de mettre en uvre des associations entre associations (DISCIPLINE_COEFFICIENT associant DISCIPLINE_OPTION  et NIVEAU_OPTION), mme si cela est parfaitement lgitime. Mais ceci est une autre histoire.

Mais ces diagrammes expriment-ils les vraies rgles de gestion ?

Vous aviez pos la question :  Les coefficients varient-ils en fonction du niveau et de l'option ? 

Rponse de spring.time :  pour les coefficients, ils varient de 1  10, et par dcision de la direction des tudes et la direction gnrale. 

Autrement dit,  ce stade de la discussion, on ne sait toujours pas formellement si les coefficients sont indpendants des niveaux et des options. Mais ensuite, spring.time propose un MCD selon lequel la rgle est : _Une discipline a exactement un coefficient_, ce qui invalide  nos diagrammes respectifs en ce qui concerne la table DISCIPLINE_COEFFICIENT.

@spring.time :

Cest bien cela ? Confirmez-vous quune discipline a exactement un coefficient, donc que les coefficients sont totalement indpendants des niveaux et des options ?

----------


## fsmrel

A propos des cls.

Examinons la table EtudiantAnneeScolaire :

 

a coince en ce qui concerne la cl {AnneeScolaireId, EtudiantId, NiveauId}. En effet, au vu du triplet, pour lanne scolaire _a_ ltudiant _e_ peut tre  diffrents niveaux, contrairement  la rgle de gestion de donnes initiale. De mme, pour le niveau _n_ et ltudiant _e_, on peut avoir plusieurs annes, ce qui nest possible que si les tudiants peuvent redoubler (et bien au-del si affinit...) Vu ce qua crit spring.time, un tudiant pouvant effectivement redoubler, il faudra mettre en uvre une assertion (ou un trigger  dfaut) pour contrler quun tudiant ne passe pas plus de _n_ annes dans un mme niveau. (_n_ = 2 ?) En tout tat de cause, la cl doit tre ramene  {EtudiantId, AnneeScolaireId}.


A propos de lenseignement des disciplines :

Rgle de gestion de donnes fournie par spring.time : 
  Le prof enseigne une ou plusieurs disciplines  un ou plusieurs niveaux. Le MCD de spring.time nest pas complet, car il dit seulement quun professeur enseigne au moins une discipline, sans prciser le niveau correspondant.

Par ailleurs, toujours selon le MCD, une discipline nest enseigne que par un seul professeur, ce qui est suspect et certainement cause de nombreuses heures supplmentaires...

Passons  la table ProfesseurDiscipline :

 

MCD correspondant :

 

Mais pour un niveau _n_ et une discipline _d_, peut-on avoir plusieurs professeurs ?

 Si la rponse est affirmative, la table propose par DaizDev convient.

 Si la rponse est ngative (conformment au MCD de spring.time !), lattribut ProfesseurId doit dgager de la cl :

 

MCD correspondant :

 


La flche symbolise une CIF (contrainte dintgrit fonctionnelle), exprimant la contrainte selon laquelle pour un niveau et une discipline il ny a quun professeur (lAGL WinDesign permet cela, mais pas PowerAMC).

Quelle est la rgle  retenir ?

----------


## DaizDev

Merci @fsmrel

Je rflchis galement aux notions Option, Niveau, Discipline et leurs interactions.
Mon modle ne va pas car l'tudiant ne peut choisir qu'une option alors que le tronc commun je l'ai imagin comme une option.

J'ai rajout la liaison dont tu parlais pour blinder le modle.

Les rgles du modle actuel
Un tudiant e choisit une option o par AnneeScolaire asDurant la mme AnneeScolaire as, un tudiant e a une Niveau nUne Discipline d est toujours rattache  la mme Option o quelque soit le Niveau n

C'est pas top !

----------


## DaizDev

Quelques maj et l'ajout des tables de sauvegarde avec les liaisons minimales pour ne pas alourdir le schma

----------


## spring.time

Bonjour,

merci beaucoup  vous: DaizDev et fsmrel,




> Bonne entre en matire. Mais il faut dabord donner une dfinition des concepts (niveau, discipline, option, etc.) et illustrer par lexemple, car autant de lecteurs de votre message, autant dinterprtations des rgles, interprtations qui peuvent ne rien  voir avec la vtre.


le cursus scolaire de cette cole se compose de 4ans, donc 4niveaux qui sont:
3e, 4e, 5e, 6e.
les 2premires annes, les tudiants tudient les mmes disciplines=des matires.
 la 5me annes, les tudiants se spcialisent dans 4 spcialits=options, et les tudiants de toutes les spcialits tudient des matires ensembles, comme ils ont des matires propres  leurs spcialits.

----------


## spring.time

> Exemple de rgles qui laissent songeur et qui ds le dpart soulvent bien des questions :
>  Si l'tudiant est au niveau 5e, il choisit une option parmi 4 .
> Est-ce  dire que les tudiants qui sont  un autre niveau ne sont pas concerns par le systme des options ? Quils peuvent choisir les options quils veulent ?
> 
> De la mme faon, quand vous crivez :
>  Les tudiants des 4 options tudient des disciplines communes et bien sur des disciplines relatives  leurs options .
> Quen est-il des tudiants qui ne sont pas du 5e niveau ?


oui seulement les tudiants de la 5me qui sont concerns.
les tudiants de la 3e et 4e tudient tous ensemble,  la 5me, ils ont des matires communes, et leurs matires de spcialit.
 la 6me anne, ils ont un projet de fin d'tude, d'ailleurs leurs bulletins de notes, se composent de (la moyenne de la 5me anne + la note de la soutenance )/2.

----------


## spring.time

> Cest bien cela ? Confirmez-vous quune discipline a exactement un coefficient, donc que les coefficients sont totalement indpendants des niveaux et des options ?


oui, les coefficients sont indpendants des niveaux et des options.

----------


## DaizDev

Donc un tudiant n'a qu'une option, choisie durant la 5eme anne et reconduite pour la 6eme anne ?
Un redoublant en 5eme anne peut-il changer d'option ?

----------


## spring.time

> Mais pour un niveau n et une discipline d, peut-on avoir plusieurs professeurs ?
> 
>  Si la rponse est affirmative, la table propose par DaizDev convient.
> 
>  Si la rponse est ngative (conformment au MCD de spring.time !), lattribut ProfesseurId doit dgager de la cl :


la rponse est ngative, pour un niveau n, pour une discipline donne, on ne peut avoir qu'un seul prof.

----------


## spring.time

> Les rgles du modle actuel
> Un tudiant e choisit une option o par AnneeScolaire as
> Durant la mme AnneeScolaire as, un tudiant e a une Niveau n
> Une Discipline d est toujours rattache  la mme Option o quelque soit le Niveau n


l'tudiant de la 5me anne choisi qu'une option.

il y'a des disciplines qui sont associes  chacune des 4options, comme il y'a des disciplines indpendantes des options.

----------


## spring.time

> Donc un tudiant n'a qu'une option, choisie durant la 5eme anne et reconduite pour la 6eme anne ?


 oui




> Un redoublant en 5eme anne peut-il changer d'option ?


non il ne peut pas la changer

le matricule de chaque tudiant se compose de n de promotion concatn avec 
le n d'ordre alphabtique de nom.
pour un doublant, son matricule devient=(n de promotion-1) concatn avec le dernier n d'ordre alphabtique.

----------


## spring.time

un tudiant peut avoir le meme n de promotion pendant les 4niveaux, mais s'il choue un ou plusieurs fois, ce n de promotion se dgrade d'une unit, l'tudiant alors fera partie de l'ancienne promotion.

est ce que cela convient il avec la table PromotionEtudiant?

----------


## spring.time

voici les tables que j'ai conu :

-etudiant(id_etudiant,...)

-discipline(id_discipline,discipline, coef...)

-niveau(id_niveau, niveau)

-promotion(id_promotion, promotion)

-promotion(id_option, option)

-annne_academique(id_annee, annee)

-moy_form_milit(id_moy_milit, moy, #id_etudiant)

-prof(id_prof,...)

-prof_discipline(#id_prof, #id_discipline, #id_niveau)

-option_niveau(#id_option, #id_niveau)

-etudiant_niveau(#id_etudiant, #id_niveau, #id_annee)

-etudiant_promotion(#id_etudiant, #id_promotion, #id_annee)

-niveau_discipline(#id_niveau, #id_discipline)

-option_discipline(#id_option, #id_discipline)

-seance_discipline(id_seance, #id_prof, #id_discipline, jour, heure_debut, heure_fin, classe)

-absence(#id_seance, #id_etudiant, justification)

-note(id_note, #id_etudiant, #id_discipline, #id_prof, valeur, appreciation, #id_option, #id_annee, #id_niveau, #id_option)

-rattrapage(id_rattr, #id_discipline, #id_etudiant, note_rattrapage, #id_annee)

-bulletin_sans_ratt(id_bulletin_sr, #id_etudiant, moy_form_sc, moy_gen, #id_moy_form_milit)

-bulletin_avec_ratt(id_bulletin_ar, #id_etudiant, #id_rattr, id_note, moy_form_sc, moy_gen_avec_r, #id_bulletin,sr)

----------


## DaizDev

Si j'ai bien compris, tu vas greffer ce nouvel outil  un applicatif existant. mais par rapport au matricule, ses rgles de gestion sont floues. Prenons un cas simple.

Sur deux ans, 4 promotions coexistent au sein de l'tablissement {P0,P1,P2,P3} lies au Niveau des tudiants {N3,N4,N5,N6}

CNAME est le numro dordre alphabtique du nom de famille de l'tudiant
L'option est ignore

Puisque nous travaillons sur 2 ans, nous avons 2 Annes scolaires {AS1, AS2}. 

La liste {CNAME} est-elle  constitue des noms des tudiants {P0,P1,P2,P3}  rpartis en {N3,N4,N5,N6} ?

Si {AS1} se clture avec une sortie de 80 tudiants {P0,N6} et une entre de 100 tudiants en {P4,N3}, qu'en est-il de la liste {CNAME} ?

----------


## DaizDev

> un tudiant peut avoir le meme n de promotion pendant les 4niveaux, mais s'il choue un ou plusieurs fois, ce n de promotion se dgrade d'une unit, l'tudiant alors fera partie de l'ancienne promotion.
> 
> est ce que cela convient il avec la table PromotionEtudiant?


Donc on peut rsumer en :


```

```

Est-ce exact ?

----------


## spring.time

> Puisque nous travaillons sur 2 ans, nous avons 2 Annes scolaires {AS1, AS2}.


de quels 2ans parlez vous? j'ai pas bien compris

----------


## DaizDev

Deux annes scolaires conscutives quelconques

----------


## spring.time

> Sur deux ans, 4 promotions coexistent au sein de l'tablissement {P0,P1,P2,P3} lies au Niveau des tudiants {N3,N4,N5,N6}
> 
> CNAME est le numro dordre alphabtique du nom de famille de l'tudiant
> L'option est ignore
> 
> Puisque nous travaillons sur 2 ans, nous avons 2 Annes scolaires {AS1, AS2}. 
> 
> La liste {CNAME} est-elle constitue des noms des tudiants {P0,P1,P2,P3} rpartis en {N3,N4,N5,N6} ?
> 
> Si {AS1} se clture avec une sortie de 80 tudiants {P0,N6} et une entre de 100 tudiants en {P4,N3}, qu'en est-il de la liste {CNAME} ?



oui comme vous avez dis, chaque niveau a une liste des tudiants dont leurs matricules se composent de npromotion+nd'ordre alphabtique du nom de famille.
ce matricule est utile dans l'identification de l'tudiant,  travers, on sait  quelle promotion, il appartient.

------
 l'inscription  la 3e, on affecte  chaque tudiant un n de promotion et on calcul l'ordre alphabtique de son nom.
et durant les 4ans, l'tudiant porte le mme matricule.
et s'il choue, son matricule, bien videmment, change, et devient, ancienne promotion et il est plac en dernier dans la liste des tudiants.

----
j'ai bien rpondu  votre question?

----------


## spring.time

j'ai des questions  propos de MLD mis  jour 0.2.2:

vous avez cre: 
les tables Discipline, groupeDiscipline, DisciplineGroupeDiscipline, pourriez vous m'expliquer le role de groupediscipline_id dans la table Discipline? il y'a dja la table DisciplineGroupeDiscipline qui associe la discipline  son groupe.

j'ai remarqu dans les tables de sauvegarde,
=>SauvegardeBulletin: que vous avez mis toutes les cls (id) sous forme d'un champ en bleu, il n'y'a pas de cl trangre

=>SauvegardeBulletinGroupeDiscipline: groupediscipline_id est en bleu.

=>SauvegardeBulletinDiscipline: discipline_id est en bleu.

je ne vois de liens logiques avec ces tables de sauvegarde et les autres.

----------


## fsmrel

Bonjour,


Je constate que a cause...





> voici les tables que j'ai conues


On ne peut pas porter de jugement, c'est trop informel. Par exemple, on ne sait pas quelles sont les cls des tables. A ce propos, faites la distinction entre cl primaire (artificielle, c'est--dire non significative et invariante, non connue de lutilisateur) et cl naturelle, dfinie et contrle par lutilisateur, donc pouvant subir les pires avanies dans le temps (voyez le changement du systme dimmatriculation des voitures) et quil faut bien sr viter de propager dans la base de donnes. 

Prenons le cas de la table NIVEAU. La modlisation doit tre telle quau niveau SQL on produise ceci :



```

```


{NiveauId} constitue une cl artificielle et na aucune raison de varier (utilisation par exemple dun auto-incrment). {Niveau} constitue une cl alternative (clause UNIQUE de SQL) et lutilisateur en fait ce quil veut.
Vous pouvez proposer une version plus succincte, par exemple :



```

```

Mais cest le minimum.

Par contraste, votre dfinition de la table Prof_Discipline est bien vague :
 prof_discipline(#id_prof, #id_discipline, #id_niveau) Les cls ny sont pas dfinies. Au vu du symbole  # , on peut supposer que les colonnes qui en sont affubles appartiennent  des cls trangres, mais rfrenant quelles tables ?

Il faut appeler un chat un chat :



```

```

En fait, la dfinition de la table est probablement la suivante :



```

```

Merci de mettre votre inventaire dquerre, afin que l'on puisse en discuter sans rester dans le flou...

----------


## DaizDev

> oui comme vous avez dis, chaque niveau a une liste des tudiants dont leurs matricules se composent de npromotion+nd'ordre alphabtique du nom de famille.
> ce matricule est utile dans l'identification de l'tudiant,  travers, on sait  quelle promotion, il appartient.
> 
> ------
>  l'inscription  la 3e, on affecte  chaque tudiant un n de promotion et on calcul l'ordre alphabtique de son nom.
> et durant les 4ans, l'tudiant porte le mme matricule.
> et s'il choue, son matricule, bien videmment, change, et devient, ancienne promotion et il est plac en dernier dans la liste des tudiants.
> 
> ----
> j'ai bien rpondu  votre question?




```

```

o


```

```




> j'ai des questions  propos de MLD mis  jour 0.2.2:
> 
> vous avez cre: 
> les tables Discipline, groupeDiscipline, DisciplineGroupeDiscipline, pourriez vous m'expliquer le role de groupediscipline_id dans la table Discipline? il y'a dja la table DisciplineGroupeDiscipline qui associe la discipline  son groupe.


Pour facilit la sauvegarde mais tu peux l'enlever  ta convenance




> j'ai remarqu dans les tables de sauvegarde,
> =>SauvegardeBulletin: que vous avez mis toutes les cls (id) sous forme d'un champ en bleu, il n'y'a pas de cl trangre
> 
> =>SauvegardeBulletinGroupeDiscipline: groupediscipline_id est en bleu.
> 
> =>SauvegardeBulletinDiscipline: discipline_id est en bleu.
> 
> je ne vois de liens logiques avec ces tables de sauvegarde et les autres.


Il suffit de rajouter les relations, j'avoue :p mais tu peux aussi choisir de ne pas stocker les Ids mais stocker les valeurs et changer le type en VARCHAR car le but n'est que la sauvegarde. 

Dans le premier cas tu pourras faire des recherches rapides grce aux cls et faire des jonctions en cas de recherche par champ texte, dans le deuxime cas, tu pourras attaquer tes tables avec des recherches de texte directement.
Tout dpend de l'utilisation de l'outil  ::D:

----------


## DaizDev

> Bonjour,
> 
> 
> Je constate que a cause...


Non non 



> ```
> 
> ```


Oh god, il me manque des bases  ::P:

----------


## fsmrel

Jai corrig linstruction CREATE TABLE NIVEAU, car en la revoyant je constate quil y a une erreur vidente : il faut remplacer  VALUES  par  Niveau .

----------


## spring.time

> On ne peut pas porter de jugement, c'est trop informel. Par exemple, on ne sait pas quelles sont les cls des tables.


excusez moi,  ::mrgreen::  




> A ce propos, faites la distinction entre cl primaire (artificielle, c'est--dire non significative et invariante, non connue de lutilisateur) et cl naturelle, dfinie et contrle par lutilisateur, donc pouvant subir les pires avanies dans le temps (voyez le changement du systme dimmatriculation des voitures) et quil faut bien sr viter de propager dans la base de donnes.


 ::P:  merci beaucoup pour l'information, je le savais pas
 la cl naturelle, elle peut me servir pour avoir le n d'ordre alphabtique des noms et le concatner avec le n de promotion ? non ?

----------


## spring.time

> {CNAME} = Cherche(Etudiant.Nom, {NAME_LISTE})
> 
> 
> {NAME_LIST} = ListeEtudiantCritere(Niveau=Etudiant.Niveau AND Etudiant.PromotionInitial Est PromotionEnCours).OrderBy(Nom, ASC) + ListeEtudiantCritere(Niveau=Etudiant.Niveau Et Etudiant.PromotionInitial N'Est Pas PromotionEnCours).OrderBy(Nom, ASC)


je peux limplmenter sous vb.net?

----------


## fsmrel

> la cl naturelle, elle peut me servir pour avoir le n d'ordre alphabtique des noms et le concatner avec le n de promotion ? non ?



Of course. La cl naturelle peut tre chahute dans tous les sens, les valeurs de la colonne (ou des colonnes) correspondante(s) peuvent tre le rsultat de la concatnation, multipli  par lge du capitaine : vu du systme, la seule contrainte qui est impose est de respecter le principe d'unit (et d'irrductibilit) des cls candidates et de ne pas servir de rfrence pour les autres tables, rle qui sera dvolu  la cl primaire, parfaitement invariante, sans signification, sans odeur et sans saveur. 

Le matricule peut donc faire l'objet d'une colonne dans l'en-tte de la table ETUDIANT. Supposons que vous encapsuliez dans cette colonne les ingrdients qui composent ce matricule (ce qui fait quil vous faudra contrler la redondance), la structure sera la suivante :



```

```

----------


## spring.time

Merci beaucoup fsmrel

----------


## DaizDev

> je peux limplmenter sous vb.net?


Oui bien sr mais je ne connais pas trop les RecordSet pour fusionner (Merge) les 2 listes. Tu as plusieurs solutions pour le faire. Tu as 2 requtes  excuter.

----------


## spring.time

> {CNAME} = Cherche(Etudiant.Nom, {NAME_LISTE})
> 
> 
> {NAME_LIST} = ListeEtudiantCritere(Niveau=Etudiant.Niveau AND Etudiant.PromotionInitial Est PromotionEnCours).OrderBy(Nom, ASC) + ListeEtudiantCritere(Niveau=Etudiant.Niveau Et Etudiant.PromotionInitial N'Est Pas PromotionEnCours).OrderBy(Nom, ASC)


svp pourriez vous m'expliquer cette {NAME_LIST}? j'aimerais la traduire en sql.

----------


## fsmrel

Bonsoir,


A propos du trio niveau, option, discipline.

Puisque dune part seuls les niveaux 5 et 6 sont concerns par les options (spcialits), et que dautre part les options du niveau 6 sont exactement celles du niveau 5, il est redondant, donc inutile dtablir une association entre les types dentits NIVEAU et OPTION. Les associations entre les trois types dentits peuvent tre reprsentes ainsi au niveau MCD :

 

Lassociation-type CONSTITUER_DISCIPLINE_COMMUNE permet de prendre en compte les disciplines (matires) communes et lassociation-type CONSTITUER_DISCIPLINE_A_OPTION permet de prendre en compte les disciplines parties prenantes dans les options. Rien ninterdit dans cette reprsentation quune discipline fasse partie  la fois des disciplines communes et des disciplines  option (par exemple, la discipline _d_ fait partie des disciplines communes du niveau _n_ (_n_ < 5) et des disciplines  option du niveau _5_). 

Cela vous convient-il ?

Si oui, pour interdire en outre quune discipline soit  la fois discipline  option et discipline commune (de niveau 5 et 6 donc), il faudrait mettre en uvre une contrainte dexclusion, ce qui est faisable avec WinDesign mais pas avec PowerAMC. On pourrait reprsenter la chose ainsi :

 

Au niveau SQL, la contrainte est programmable  laide dune assertion (ou de triggers si le SGBD ne sait pas ce quest une assertion).

----------


## fsmrel

@ DaizDev

Revenons sur votre diagramme. a coince cette fois-ci au sujet de loption retenue par ltudiant :

 


En effet, au vu de la cl, un tudiant peut opter pour plusieurs matires la mme anne, or  il na droit en tout et pour tout qu une seule option durant son sjour  lcole.


Au niveau MCD, on pourrait reprsenter les choses ainsi (compte non tenu de lanne scolaire) :

 


Le type dentit ETUDIANT_A_OPTION correspond  une spcialisation du type dentit ETUDIANT et permet dassocier un tudiant  exactement (et non pas optionnellement) une option durant son sjour  l'cole. 

Au niveau SQL, il faudra sassurer par une assertion ( dfaut un trigger) quun tudiant nest associ  une option que sil a atteint le niveau 5.

Par ailleurs, la flche bleue symbolise une CIF qui se traduit au niveau MLD  par une cl candidate {EtudiantId, Annee} pour la table issue de l'association-type SE_SITUER : on s'assure ainsi quau cours dune anne scolaire un tudiant nest bien qu un seul niveau.

En revanche, un tudiant peut rester plus dune anne au mme niveau si jai bien compris.

----------


## DaizDev

> svp pourriez vous m'expliquer cette {NAME_LIST}? j'aimerais la traduire en sql.


Il faut donc rajouter un champ promotioninitial_id  Etudiant qui sera une cl pour grer les matricules des redoublants.

La requte 1 : Liste trie par ordre alphabtique des nom des tudiants qui ont pour promotion initiale, la promotion en cours et d'un niveau donn

La requte 2 : Liste trie par ordre alphabtique des nom des tudiants qui ont pour promotion initiale, une promotion diffrente que celle en cours et d'un niveau donn

il faut ensuite fusionner les 2 listes

----------


## DaizDev

Merci @fsmrel




> En revanche, un tudiant peut rester plus dune anne au mme niveau si jai bien compris.


Si j'ai bien compris, pour chaque anne, le matricule d'un tudiant est recalcul. Le matricule est une cl donc naturelle si j'ai bien suivi. Est-il bon de reprendre le MCD en ce basant sur cette cl ?

----------


## spring.time

Bonjour tout le monde,




> il na droit en tout et pour tout qu une seule option durant son sjour  lcole.


oh, pardon  ::oops::  mon encadrant me l'a rectifi, un tudiant peut changer l'option, s'il choue.

----------


## spring.time

> En revanche, un tudiant peut rester plus dune anne au mme niveau si jai bien compris.


oui, mais il fait partie de la promotion prcdente et son matricule change.

----------


## spring.time

> Si j'ai bien compris, pour chaque anne, le matricule d'un tudiant est recalcul. Le matricule est une cl donc naturelle si j'ai bien suivi. Est-il bon de reprendre le MCD en ce basant sur cette cl ?


oui, elle est recalcul chaque anne

----------


## spring.time

concernant la moyenne de la sixime anne elle se calcule da la manire suivante:
1: ((((note soutenance x 2)+(note documentation x 2))/4) x3)+ note militaire)/4
c'est la moyenne gnrale.

2: en deuxime lieu  on va procder au calcul de la moyenne de toutes les annes :
(MG 3me+MG 4me+MG 5me+MG 6me)/4 donc c'est la moyenne des moyennes.

----------


## spring.time

l'inscription  la 3e, chaque tudiant aura son matricule, donc j'ai fait une interface qui permet de choisir la promotion et l'anne acadmique, donc,
etudiant e: niveau 3, annee=2012/2013, promotion 45(chaque anne, on a une npromotion pour la 3e)
donc matricule 4515 par exemple.

il me faut donc une table qui enregistre id_etudiant, id_niveau, id_promotion et id_annee.

que vous en pensez.?

----------


## fsmrel

> Le matricule est une cl donc naturelle si j'ai bien suivi. Est-il bon de reprendre le MCD en ce basant sur cette cl ?


je rpte pour la nime fois ce qu crit Yves Tabourier dans les annes quatre-vingts (_De lautre ct de MERISE_ page 81) :

 _ ... la fonction dune proprit est de dcrire les objets (et les rencontres), alors que lidentifiant ne dcrit rien. Son rle fondamental est dtre sr de distinguer deux jumeaux parfaits, malgr des descriptions identiques.
Lexprience montre dailleurs que lusage des identifiants significatifs (ou codes significatifs) a pu provoquer des  dgts tellement coteux  que la sagesse est dviter avec le plus grand soin de construire des identifiants dcrivant les objets ou, pis encore, leurs liens avec dautres objets..._ 
Comme Tabourier, conservez en mmoire  ce que Goethe, Winston Churchill, George Santayana, Thomas Mann, et bien d'autres ont crit :

 _  Ceux qui ont oubli le pass sont condamns  le revivre ._ 
Lidentifiant dune entit-type ne doit rien dcrire, tre invariant, etc., il est fait dune proprit purement artificielle. 

Sil sagit didentifier ltudiant, on le fera  partir dune proprit de ce type, disons _EtudiantId_,  l'usage du systme (intgrit d'entit, intgrit rfrentielle, oprations de jointure, etc.), tandis que le matricule bizarrode donnera lieu  un identifiant naturel,  l'usage de l'utilisateur qui peut en faire ce qu'il veut, sauf  crer des doublons (respect de la rgle dunicit) et ne figurera sous forme de colonne que dans une seule table de la base de donnes.

Consquence au niveau du MLD, comme je lai dj mentionn  :



```

```






> oh, pardon  mon encadrant me l'a rectifi, un tudiant peut changer l'option, s'il choue.


Faut pas pleurer spring.time, on va arranger a ! (Mais tirez les oreilles de votre encadrant de ma part : des rgles de gestion a se grave dans le marbre, puis quand dans le temps elles fluctuent, les amnagements inhrents dans la base de donnes a se monnaye...) 


Bon, maintenant c'est moins drle, je vais chez le dentiste  ::oops::

----------


## fsmrel

Bonsoir,





> il me faut donc une table qui enregistre id_etudiant, id_niveau, id_promotion et id_annee.
> que vous en pensez.?


Jen pense que votre vu est lgitime. La table quil vous faut est drive du type dentit que jai appele SCOLARITE dans le MCD ci-dessous (vous la renommez  votre guise).


MCD (notez lidentification relative)

 


MLD

 


Jai ajout Le type dentit MATRICULE, car votre systme didentification des tudiants faon Pierre Dac fiche une zoubia pas possible. En effet, produire une base de donnes normalise est tout  fait faisable, mais si on veut y arriver de faon rationnelle et autrement quau pif, il est ncessaire de connatre un minimum de thorie de la normalisation. On arrive  la structure de table (SCOLARISER) qui vous intresse, mais il faut prouver que cette structure est valide. Vous ntes pas oblige dapprendre par cur ce qui suit, mais si cela vous intresse, en tudiant ce qui suit, vous aurez un avant-got de ce quil faut connatre pour normaliser une base de donnes...

On y va. Considrons les donnes de dpart suivantes :
 EtudiantId, Niveau, Promotion, Annee, Matricule
Voyons un chantillon de parcours dtudiants.

Nous sommes en dbut danne 2011.
Ltudiant identifi par EtudiantId = 1 sappelle Albert, en 2008 (je simplifie la priode scolaire 2008-2009) il est de la promotion 41, il est au niveau 3 et son matricule est 4115 ; lanne suivante (2009) il passe au niveau 4 ; lanne daprs (2010) il redouble et son matricule biscornu devient 40123 (la promo comptait 122 tudiants).

Ltudiant identifi par EtudiantId = 2 sappelle Bernard, en 2008  il est lui aussi de la promotion 41, il est au niveau 3 et son matricule est 4150 ; lanne suivante (2009) il passe au niveau 4 ; lanne daprs (2010) il passe au niveau 5.

Ltudiante identifie par EtudiantId = 9 sappelle Carole, qui en 2010 est de la promotion 43, au niveau 3 et elle a pour matricule 4317.

Pour lchantillon la situation est la suivante (si jai  peu prs compris) :



```

```

La structure de la table correspondante est la suivante :

 T {EtudiantId, Promotion, Niveau, Nom, Annee, Matricule}
On saccroche. Pour travailler de faon rationnelle, on doit maintenant mettre en vidence les  dpendances fonctionnelles   partir des rgles de gestion des donnes et en dduire les cls candidates (approche analytique) :

Un tudiant a exactement un nom, do la dpendance fonctionnelle :
 DF1 : {EtudiantId} -> {Nom}Au cours dune anne scolaire un tudiant fait partie dune seule promotion, dun seul niveau et il a un seul matricule :
 DF2 : {EtudiantId, Annee} -> {Promotion, Niveau, Matricule}En revanche, comme un tudiant peut redoubler, DF2 nest pas vrifie si le dterminant est rduit  {EtudiantId}.
Un tudiant peut changer de matricule, mais seulement s'il change de promotion :
 DF3 : {EtudiantId, Promotion} -> {Matricule}Un matricule permet didentifier exactement un tudiant :
 DF4 : {Matricule} -> {EtudiantId}
En utilisant lalgorithme du seau (d  Philip Bernstein), on dduit les cls candidates de la table :
 K1 = {EtudiantId, Annee}

K2 = {Matricule, Annee}
On peut maintenant montrer que la table ne respecte pas la BCNF. 

En effet, les dterminants (parties gauches) de DF1, DF3 et DF4 ne sont pas cls candidates (seule le dterminant de DF2 en est une). On utilise le thorme de Heath pour dcomposer la table T selon les tables T1, T2, T3, T4 :



```

```

Ces tables respectent cette fois-ci la BCNF (et mme la 5NF). 
La table T1 correspond  votre table Etudiant, 
La table T2 correspond  la table que vous appelez de vos vux (SCOLARITE), 
La table T3 est peccamineuse puisque sa seule cl candidate,  savoir {Matricule} est archi significative et modifiable et ne peut donc tre retenue comme cl primaire. On va donc doubler la colonne Matricule dune colonne non significative et invariante matrise seulement par le systme, appelons-la MatriculeId. La structure devient :



```

```

Dans le contexte SQL, {MatriculeId} sera cl primaire et {Matricule} ravale au rang de cl alternative,  
Ce qui est vrai pour la table T3 vaut bien sr pour la table T4 et pour des raisons de cohrence vidente, cette dernire reprend la colonne MatriculeId tandis que la colonne Matricule y est supprime :



```

```

Je nai pas voqu les cls trangres, mais il est vident que la dclaration de T4 est  enrichir :



```

```

De mme que la dclaration de T3 :


```

```

La clause ON DELETE CASCADE signifie que si lon supprime un tudiant de la table ETUDIANT, la suppression se propage dans T3 puis T4.

J'espre ne pas avoir commis d'erreurs de copier/coller...

Je reviendrai sur les options et les relations avec les profs. 

A plus tard

----------


## DaizDev

Oh un pav !  :;): 

Dire que tout a, c'est  cause d'un dentiste...

Super taff !

----------


## spring.time

::P:  impressionnant 

je ne savais pas que la gestion des BD est lie avec les mathmatiques et la thorie des ensembles,

ce cours le votre est trs interessant, je vais le lire et le comprendre, moi qui espre etre un DBA, je vous remercie beaucoup,
 ::roll::  mais quels prrequis mathmatiques il faut avoir pour pourvoir suivre ce cours et pouvoir implmenter toutes ces techniques dans les BD?

----
pour l'attribut annee, je lve donc la table annee, je laisse qu'un attribut  saisir manuellement.d'accord
pour la table T3, j'ai une seule cl primaire qui est id_matricule, l'autre: matricule est unique



si seulement, vous pourrez m'aider pour la suite, la relation entre note, etudiant, discipline, moyenneFS, moyenneFM, bulletin, rattrapage, prof


je serais reconnaissante 

merci encore une fois

----------


## fsmrel

Bonsoir,





> je ne savais pas que la gestion des BD est lie avec les mathmatiques et la thorie des ensembles


Le Modle Relationnel de Donnes a bien sr  voir avec la thorie des ensembles, mais au moins autant, sinon plus ! avec la logique des prdicats du 1er ordre.

Considrons la structure de la table SCOLARITE {EtudiantId, AnneeScolaire, Promotion, Niveau}. Elle reprsente en fait un prdicat  4 places, lequel peut prendre une valeur de vrit,  savoir VRAI ou FAUX :  
*(P1)* Ltudiant reprsent par _ EtudiantId_, au cours de lanne scolaire _ AnneeScolaire_  fait partie de la promotion _ Promotion_  au niveau _ Niveau_.Les lignes de la table reprsentent alors les propositions qui rendent VRAI le prdicat (hypothse du monde clos) :
Ltudiant reprsent par 1, au cours de lanne scolaire 2008-2009 fait partie de la promotion 41, au niveau 3,
Ltudiant reprsent par 1, au cours de lanne scolaire 2009-2010 fait partie de la promotion 41, au niveau 4,
Ltudiant reprsent par 1, au cours de lanne scolaire 2010-2011 fait partie de la promotion 40, au niveau 4,
Ltudiant reprsent par 2, au cours de lanne scolaire 2008-2009 fait partie de la promotion 41, au niveau 3,
Ltudiant reprsent par 2, au cours de lanne scolaire 2009-2010 fait partie de la promotion 41, au niveau 4,
Ltudiant reprsent par 2, au cours de lanne scolaire 2010-2011 fait partie de la promotion 41, au niveau 5,
...Mais attention, supposons quon veuille que loption choisie par un tudiant vienne complter le prdicat, ce qui fait que celui-ci est dsormais  remplacer par un prdicat  5 places :
*(P2)* Ltudiant reprsent par _ EtudiantId_, au cours de lanne scolaire _ AnneeScolaire_ fait partie de la promotion _ Promotion_  au niveau _ Niveau_  et a choisi loption _Option_.Bernard a atteint le niveau 5 et la proposition suivante est valide :
Ltudiant reprsent par 2, au cours de lanne scolaire 2010-2011 fait partie de la promotion 41, au niveau 5 et a choisi loption 3.Mais pour sa part, ltudiant reprsent par 1 (Albert lui-mme) na pas atteint le niveau 5 et donc nest pas concern par les options, mme si dans sa tte il sait trs bien quelle est la spcialit quil vise :
Ltudiant reprsent par 1, au cours de lanne scolaire 2010-2011 fait partie de la promotion 40, au niveau 4 et il na pas choisi doption.Ae ! Le prdicat correspondant est le suivant :
*(P3)* Ltudiant reprsent par _ EtudiantId_, au cours de lanne scolaire _ AnneeScolaire_ fait partie de la promotion _ Promotion_  au niveau _ Niveau_  et na pas choisi doption.Et lon conclut que les prdicats P2 et P3 sont diffrents puisque P2 est  5 places et P3  4 places. Comme nous sommes un peu jeunes pour oser invalider la logique des prdicats de Gottlob Frege, nous pouvons inventer une option factice, disons 0 pour les tudiants nayant pas atteint le niveau requis :
Ltudiant reprsent par 1, au cours de lanne scolaire 2010-2011 fait partie de la promotion 40, au niveau 4 et a choisi loption 0.Mais cela tient quelque part du bricolage. Pour ma part, je suis plus favorable  appeler un chat un chat, ne pas bricoler, donc conserver le prdicat P1 et mettre en uvre le prdicat supplmentaire suivant :
*(P4)* Ltudiant reprsent par _ EtudiantId_, au cours de lanne scolaire _ AnneeScolaire_  a choisi loption _Option_.Do le MCD (Le prdicat P4 fait lobjet du type dentit SCOLARITE_A_OPTION) :

 

Et le MLD

 


A noter que le type dentit SCOLARITE_A_OPTION remplace le type dentit ETUDIANT_A_OPTION qui traduisait la rgle de gestion devenue entre temps obsolte :  un tudiant na droit en tout et pour tout qu une seule option durant son sjour  lcole .





> mais quels prrequis mathmatiques il faut avoir pour pourvoir suivre ce cours et pouvoir implmenter toutes ces techniques dans les BD?


Les prrequis sont tout  fait basiques. Voulant madresser aux praticiens (dont nous faisons partie), jai rdig en cherchant  rester le plus clair possible, viter lhermtisme, mais sans tomber non plus dans le laxisme, car le sujet mrite une certaine rigueur dont on ne peut faire lconomie. 

Je ne peux que vous engager  commencer la lecture...

Quant  lapplication des concepts et techniques, il ny a pas de secret, cest  force de pratique que les choses sclairent et se mettent en place. La normalisation nest pas la panace, elle ne rsout pas tout mais elle contribue vraiment  rendre les choses plus claires et les bases de donnes plus robustes.





> pour l'attribut annee, je lve donc la table annee, je laisse qu'un attribut  saisir manuellement


Que voulez-vous dire par lever une table ?





> si seulement, vous pourrez m'aider pour la suite, la relation entre note, etudiant, discipline, moyenneFS, moyenneFM, bulletin, rattrapage, prof


Avec de laspirine je peux tudier cela, mais il faudrait que vous rassembliez et mettiez en forme ce qui a t crit  ce sujet, en sorte quon y voie clair, sans quil faille crapahuter dans la masse des messages...

----------


## spring.time

> (P4) Ltudiant reprsent par EtudiantId, au cours de lanne scolaire AnneeScolaire a choisi loption Option.


 ::ccool::  j'apprcie beaucoup votre manire d'expliquer, trs mthodique


l'entit SCOLARITE_A_OPTION a comme cl primaire: les 2 cls trangres:
EtudiantId et AnneeScolaireId et une cl trangre OptionId, si j'ai compris




> Que voulez-vous dire par lever une table ?


parce que j'ai remarqu que vous parlez d'attribut annee, il ne s'agit pas d'une table qui a comme attribut id_annee, non?

pour la table SCOLARITE, l'attribut AnneeScolaire, c'est une cl trangre?





> il faudrait que vous rassembliez et mettiez en forme ce qui a t crit  ce sujet, en sorte quon y voie clair, sans quil faille crapahuter dans la masse des messages...


sous forme de MCD? de table MLD comme vous le faites?

----------


## fsmrel

Je viens seulement de voir votre message, je rpondrai videmment plus tard. En attendant :

Retour sur les disciplines. 

Je rsume... Durant une anne scolaire, un tudiant est  un certain niveau. Il suit les disciplines (matires) de ce niveau :  cet effet, on dfinit une association-type NIVEAU_DISCIPLINE qui permet de connatre lensemble des disciplines communes et des disciplines propres aux 4 options du niveau 5. Les types dentits NIVEAU_DISCIPLINE_COMMUNE et NIVEAU_DISCIPLINE_A_OPTION sont des spcialisations faisant lobjet dune contrainte de partitionnement (exclusion et totalit) contraignant une discipline du niveau 5   tre soit une discipline commune, soit une discipline d'une option, mais pas les deux en mme temps (a peut paratre un peu du luxe, mais mettre en vidence un maximum de contraintes n'est jamais une mauvaise chose...) L'association entre OPTION et NIVEAU_DISCIPLINE_A_OPTION permet de connatre les disciplines de chaque option. Comme un tudiant de niveau 5 a choisi son option pour l'anne scolaire, on connat donc les matires quil suit en fonction de cette option, outre les matires communes qui sont celles du niveau dont il fait partie.

En ce qui concerne les professeurs : pour un niveau et une discipline il n'y a qu'un seul professeur enseignant cette discipline.



MCD

 


MLD

 

En SQL, la contrainte de partitionnement (XT) prend la forme dune assertion (un trigger  dfaut).

Dites-moi si cette partie vous convient, peut-tre ai-je laiss passer quelque chose...

----------


## spring.time

Bonjour  ::P:  



> En SQL, la contrainte de partitionnement (XT) prend la forme dune assertion (un trigger  dfaut).
> 
> Dites-moi si cette partie vous convient, peut-tre ai-je laiss passer quelque chose...


oui je comprends, la discipline qui est commune ne doit pas tre insre dans la table pour disciplines lies  des options.

merci fsmrel

----------


## fsmrel

Bonjour spring.time,


Je vous transmets des lments de rponse au fur et  mesure...




> l'entit SCOLARITE_A_OPTION a comme cl primaire: les 2 cls trangres:
> EtudiantId et AnneeScolaireId et une cl trangre OptionId, si j'ai compris


Vous avez compris, mais permettez-moi quelques observations...

CinePhil cite Nicolas Boileau :  Ce que l'on conoit bien s'nonce clairement, et les mots pour le dire arrivent aisment . Appliquons cette maxime et mettons un peu de rigueur dans le vocabulaire. 

Vous parlez dentit : le terme  entit  est du niveau conceptuel (Entit/Relation). SCOLARITE_A_OPTION nest du reste pas une entit mais un *type* dentit (de mme quune proposition nest pas un prdicat, une entit est une instance  ou occurrence en Merise  dun type dentit). Par exemple, si ETUDIANT est un type dentit (on peut dire aussi entit-type), ce sont les tudiants Albert, Bernard, Carole, etc. qui sont des entits. A la rigueur, SCOLARITE_A_OPTION pourrait tre une entit, mais relativement  un type dentit dun mtamodle (mais on sort du sujet qui nous intresse...)

Au niveau MLD, on ne parle plus de type dentit mais de variable relationnelle (Modle Relationnel de Donnes) ou de table (SQL) ou de type denregistrement (modle Codasyl), etc.

Dans le cadre du Modle Relationnel de Donnes, une cl candidate (ou plus simplement cl)  est un * ensemble*   (notez en ce sens lemploi des * accolades*   {  et  } ) dont les lments sont des attributs : {EtudiantId} est cl de la variable relationnelle ETUDIANT drive du type dentit ETUDIANT du MCD. 

Dans le cadre de SQL, * la*   cl primaire est un ensemble dont les lments sont des colonnes : {EtudiantId} est * la*   cl primaire de la table ETUDIANT drive du type dentit ETUDIANT. De la mme faon, les lments de la cl primaire {EtudiantId, AnneeScolaireId} de la table SCOLARITE sont les colonnes EtudiantId et AnneeScolaireId ;  son tour, la table SCOLARITE_A_OPTION d'en-tte {EtudiantId, AnneeScolaireId, OptionId} a pour cl primaire {EtudiantId, AnneeScolaireId}.

Quand vous dites  SCOLARITE_A_OPTION a comme cl primaire les 2 cls trangres EtudiantId et AnneeScolaireId , il faut reformuler cela ainsi : SCOLARITE_A_OPTION a pour cl primaire la paire {EtudiantId, AnneeScolaireId} qui joue aussi le rle de cl trangre en rfrenant la cl primaire {EtudiantId, AnneeScolaireId} de la table SCOLARITE.

 


La minute culturelle :

Lexpression  cl trangre  (_foreign key_) est ... trange, car il sagit plutt dune contrainte de rfrence, mais elle a atteint un ge canonique et on ne va pas la remettre en cause...

Notez encore que, dans le cadre du Modle Relationnel de Donnes, une cl candidate est un ensemble, tout comme une cl trangre, aussi peut-on crire indiffremment pour la variable relationnelle SCOLARITE_A_OPTION :
FOREIGN KEY {EtudiantId, AnneeScolaireId} REFERENCES SCOLARITE {EtudiantId, AnneeScolaireId}Ou, en permutant lordre des colonnes dans la cl trangre :
FOREIGN KEY {AnneeScolaireId, EtudiantId} REFERENCES SCOLARITE {EtudiantId, AnneeScolaireId}Autrement dit, {EtudiantId, AnneeScolaireId} = {AnneeScolaireId, EtudiantId}

Eu gard  la thorie des ensembles, le Modle Relationnel de Donnes est effectivement indiffrent  lordre des lments dans un ensemble. Ceci a t rendu possible quand Ted Codd (pre du Modle) a utilis le concept dattribut pour nommer (et typer) les lments. Il sagit dune extension (mais non dune infraction !) permettant de ne pas avoir  tenir compte de lordre des lments dans len-tte des tables, dans les cls, etc.

Par contre, bien que nommant les lments (c'est--dire les colonnes des en-ttes des tables, les colonnes des cls), SQL est sensible  lordre :
{EtudiantId, AnneeScolaireId} nest pas gal  {AnneeScolaireId, EtudiantId}.{EtudiantId, AnneeScolaireId} et {AnneeScolaireId, EtudiantId} ne sont donc pas des paires mais des couples de colonnes...


Sur ces considrations byzantines, je replonge dans les MCD et MLD...

----------


## spring.time

je vous remercie beaucoup pour cet claircissement, 

pour le choix de l'option, je dois faire une interface qui enregistre pour chaque tudiant son option, donc je ferai appel  la table SCOLARITE_A_OPTION pour faire l'insertion en tenant compte de l'enregistrement qui se trouve dans la table SCOLARITE.


je vous remercie pour le schma de MLD, explicatif

svp, quel outil utilisez vous pour la cration de MLD et MCD?

----------


## fsmrel

> Envoy par fsmrel
> 
> 
> 
> Que voulez-vous dire par lever une table ?
> 
> 
> parce que j'ai remarqu que vous parlez d'attribut annee, il ne s'agit pas d'une table qui a comme attribut id_annee, non?


Je ne saisis toujours pas le sens que vous donnez  lexpression  lever une table . Au fil des discussions, jai voqu lanne, mais au sens gnrique du terme (cf. ici ou l (table T)).
En tout cas, jai ensuite utilis plus formellement lexpression  anne scolaire  qui est synonyme danne acadmique (que je viens de dcouvrir dans mos messages #27 et #52). Si vous confirmez quanne scolaire et anne acadmique sont bien la mme chose, je parlerais dsormais danne acadmique. La table correspondante existe, elle sappelle ANNEE_SCOLAIRE (mais je peux la renommer).





> Quel outil utilisez vous pour la cration de MLD et MCD?


Comme vous, PowerAMC, mais la version 11.  ::D:

----------


## fsmrel

> pour la table SCOLARITE, l'attribut AnneeScolaire, c'est une cl trangre?


Oui, {AnneeScolaire} est cl trangre et rfrence la cl primaire {AnneeScolaire} de la table ANNEE_SCOLAIRE.





> Envoy par fsmrel
> 
> 
>  il faudrait que vous rassembliez et mettiez en forme ce qui a t crit  ce sujet, en sorte quon y voie clair, sans quil faille crapahuter dans la masse des messages...
> 
> 
> sous forme de MCD? de table MLD comme vous le faites?


Plutt sous forme textuelle. Disons quil sagit de reprendre les tout premiers noncs, de les amnager et les complter en fonction de tout ce qui a t dfini et redfini en cours de route. Le mieux est de mettre ces rgles dans un fichier .TXT en pice jointe, de telle sorte quau fil du temps on puisse accder  ce fichier sans avoir  patauger dans la masse des messages.

 ::!::  Au stade o nous en sommes, mettez bien au propre ce qui concerne les notes, les bulletins, les rattrapages.

----------


## fsmrel

A propos des coefficients :

On a dj parl des coefficients et vous aviez crit qu'une discipline n'a qu'un coefficient, indpendamment des niveaux (et des options choisies au niveau 5). Soit, mais alors pourquoi une table des coefficients ? Une colonne dans la table DISCIPLINE devrait suffire :



```

```


Si un jour les coefficients dpendent aussi des niveaux (ce qui intuitivement parat pour le moins plus souple et plus habituel), la colonne COEFFICIENT sera  dporter vers la table NIVEAU_DISCIPLINE.

----------


## spring.time

> e ne saisis toujours pas le sens que vous donnez  lexpression  lever une table . Au fil des discussions, jai voqu lanne, mais au sens gnrique du terme (cf. ici ou l (table T)).
> En tout cas, jai ensuite utilis plus formellement lexpression  anne scolaire  qui est synonyme danne acadmique (que je viens de dcouvrir dans mos messages #27 et #52). Si vous confirmez quanne scolaire et anne acadmique sont bien la mme chose, je parlerais dsormais danne acadmique. La table correspondante existe, elle sappelle ANNEE_SCOLAIRE (mais je peux la renommer).


oui, elles sont la meme chose, c'est pas la peine de la renommer  ::D:

----------


## spring.time

> Plutt sous forme textuelle. Disons quil sagit de reprendre les tout premiers noncs, de les amnager et les complter en fonction de tout ce qui a t dfini et redfini en cours de route. Le mieux est de mettre ces rgles dans un fichier .TXT en pice jointe, de telle sorte quau fil du temps on puisse accder  ce fichier sans avoir  patauger dans la masse des messages.
> 
>  Au stade o nous en sommes, mettez bien au propre ce qui concerne les notes, les bulletins, les rattrapages.


d'accord chef  ::D:

----------


## spring.time

voici les modifications apportes sur les tables:
SCOLARITE et SCOLARITE_A_OPTION

----------


## spring.time

> Au stade o nous en sommes, mettez bien au propre ce qui concerne les notes, les bulletins, les rattrapages.


d'accord

----------


## fsmrel

> voici les modifications apportes sur les tables:
> SCOLARITE et SCOLARITE_A_OPTION


Houl ! a fait trs mal...

 

=>

Vous me copierez 100 fois :  Une table sans cl (primaire) n'est pas un ensemble mais un sac ...
Et aussi cent fois :  Avec fsmrel, le bonhomme Null est interdit de sjour ...

Et ne faites pas comme heretik25 !

----------


## fsmrel

Bonsoir spring.time,


Au sujet des matricules tarabiscots et fumeux (ne serait-ce pas un fils spirituel de l'inventeur du biglotron qui vous a concoct un schmilblick pareil ?  ::P: )

Jai vu que vous aviez eu droit aux rugissements du lion  ::D: , mais il vous a bien aide quand mme !

Pour cette histoire de calcul de matricule, voil quelques lments permettant dj de traiter le cas des tudiants qui ne redoublent pas.

Quelques tables :



```

```


Un dbut de jeu dessai :



```

```


Une variable pour paramtrer lanne scolaire  considrer :



```

```


Une variable de table (temporaire) servant  reprer les redoublants pour lanne scolaire @Annee  considrer (en fait, cette variable de table nest pas ncessaire, mais on gagne en clart en lutilisant) :



```

```


Insertion dans la table MATRICULE (le SUBSTRING, cest juste pour que le rsultat soit moins moche,  vous de mettre en uvre ce qui vous convient...) :



```

```


Pour voir le rsultat :



```

```


Si on ne veut pas utiliser @REDOUBLANT, lInsert devient :



```

```



Bon courage pour la suite...

----------


## fsmrel

> d'accord chef


Mais cest vrai a, jai t chef de char !

----------


## fsmrel

Bonsoir,





> l'tudiant a le droit de choisir les disciplines  repasser dans le rattrapage si la note.


Merci de complter cette  phrase...





> -si l'tudiant obtient une note de rattrapage > 12, il aura 12.
> 
> -si l'tudiant a une note de rattrapage < note sans rattrapage, il aura la note la note sans rattrapage.


Je suppose que si sa note de rattrapage est < 12 mais >  la note  rattraper, alors cest la note de rattrapage qui prvaut.

Mais peu importe, ces remarques nont pas dincidence sur la modlisation.

Revenons sur la structure de len-tte de votre table NOTE :
 NOTE(id_note, #id_etudiant, #id discipline, #id_prof, valeur, appreciation, #id_option, #id_annee, #id_niveau, #id_option)Vrifions si cet en-tte est valide, c'est--dire s'il respecte la BCNF.

Je commence par renommer les attributs (colonnes en SQL) en fonction des noms que jai utiliss jusquici et llimine le nom en double (#id_option) :
 NOTE {NoteId, EtudiantId, DisciplineId, ProfesseurId, Valeur, Appreciation, OptionId, AnneeScolaireId, NiveauId}Qui dit BCNF dit recherche des dpendances fonctionnelles et des cls candidates.


Dpendances fonctionnelles :
 DF0 : {NoteId} -> {EtudiantId, DisciplineId, ProfesseurId, Valeur, Appreciation, OptionId, AnneeScolaireId, NiveauId}

DF1 : {EtudiantId, AnneeScolaireId} -> {OptionId, NiveauId}

DF2 : {EtudiantId, AnneeScolaireId, DisciplineId} -> {ProfesseurId, Valeur, Appreciation, OptionId, NiveauId}

DF3 : {NiveauId, DisciplineId} -> {ProfesseurId}

Observons que lattribut NoteId est artificiel et permet  au niveau conceptuel  de respecter les recommandations de Tabourier : parfait. Mais que se passe-t-il si lon supprime cet attribut de len-tte de la table ? Le dterminant (partie gauche) de DF2 dtermine alors chaque attribut de len-tte, autrement dit ce dterminant est cl candidate. Les attributs qui composent ce dterminant correspondent-ils aux proprits (naturelles) vises par Tabourier ? Non, car tous sont la recopie dattributs eux-mmes issus de proprits artificielles du MCD. Autrement dit, on peut passer NoteId au rasoir dOckham et la structure de NOTE se rsume  :
 NOTE {EtudiantId, DisciplineId, ProfesseurId, Valeur, Appreciation, OptionId, AnneeScolaireId, NiveauId}Et les DF sont les suivantes :
 DF1 : {EtudiantId, AnneeScolaireId} -> {OptionId, NiveauId}

DF2 : {EtudiantId, AnneeScolaireId, DisciplineId} -> {ProfesseurId, Valeur, Appreciation, OptionId, NiveauId}

DF3 : {NiveauId, DisciplineId} -> {ProfesseurId}On observera que si le dterminant {EtudiantId, AnneeScolaireId, DisciplineId} de DF2 est cl candidate, il nen va pas de mme du dterminant {EtudiantId, AnneeScolaireId} de DF1 car pour une paire <EtudiantId, AnneeScolaireId> on peut avoir plusieurs disciplines. 

De mme, le dterminant {NiveauId, DisciplineId} de DF3 nest pas cl candidate car pour une paire <NiveauId, DisciplineId> on peut avoir plusieurs tudiants.

Les paires {EtudiantId, AnneeScolaireId} et {NiveauId, DisciplineId} ntant pas cls candidates, len-tte de NOTE ne respecte pas la BCNF. 

Le diagnostic tabli, reste  soigner et gurir...

Vous le savez maintenant, le mdicament sappelle Thorme de Heath, mais son administration nest pas sans risque. En effet, si on commence la dcomposition en dgageant DF1, on produit les deux structures :
 NOTE_1 {EtudiantId, AnneeScolaireId, OptionId, NiveauId}Et
 NOTE_2 {EtudiantId, AnneeScolaireId, DisciplineId, ProfesseurId, Valeur, Appreciation}C'est--dire quon a perdu DF3 et lon nest pas capable de poursuivre le processus de dcomposition. Vous aurez sans doute observ que le thorme de Heath est accompagn de la recommandation de Rissanen, que nous suivrons sagement.
Revenons  la situation avant dcomposition :
 NOTE {EtudiantId, DisciplineId, ProfesseurId, Valeur, Appreciation, OptionId, AnneeScolaireId, NiveauId} 

DF1 : {EtudiantId, AnneeScolaireId} -> {OptionId, NiveauId}

DF2 : {EtudiantId, AnneeScolaireId, DisciplineId} -> {ProfesseurId, Valeur, Appreciation, OptionId, NiveauId}

DF3 : {NiveauId, DisciplineId} -> {ProfesseurId}Lattribut ProfesseurId du dpendant {ProfesseurId} de DF3 nintervient dans aucun dterminant de quelque DF que ce soit :  en consquence on peut appliquer le thorme de Heath (avec la bndiction de Rissanen), et len-tte de NOTE est dcomposable en :
 NOTE_3 {NiveauId, DisciplineId, ProfesseurId}

NOTE_4 {EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation, OptionId, NiveauId}Cette fois-ci on peut enfin appliquer  nouveau le thorme de Heath pour vacuer DF1. NOTE_4 est dcomposable ainsi :
 NOTE_5 {EtudiantId, AnneeScolaireId, OptionId, NiveauId}

NOTE_6 {EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation}
Au final, restent les en-ttes :
 NOTE_3 {NiveauId, DisciplineId, ProfesseurId} 

NOTE_5 {EtudiantId, AnneeScolaireId, OptionId, NiveauId}

NOTE_6 {EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation}Qui respectent tous la BCNF ( titre dexercice, vous vous en assurerez !) et mme la 5NF.

Maintenant, NOTE_3 existe dj dans le MCD, il sagit de NIVEAU_DISCIPLINE : exit NOTE_3 qui na pas dutilit. 

Pour sa part NOTE_5 est dcomposable en 
NOTE_7 {EtudiantId, AnneeScolaireId, NiveauId} 

NOTE_8 {EtudiantId, AnneeScolaireId, OptionId}NOTE_7 est un sous-ensemble de SCOLARITE : exit NOTE_7 qui na pas dutilit.

NOTE_8 existe dj dans le MCD, il sagit de SCOLARITE_A_OPTION : exit aussi NOTE_8.

Suite  ce travail de normalisation il ne reste que NOTE_6 qui ne soit pas un thorme, c'est--dire infrable  partir de ce dont on dispose dj : on en fera donc un type dentit, appelons-le NOTE  et la partie du MCD correspondante est la suivante (en bleu, les types d'entits indispensables pour noter les tudiants) :


*MCD*

 


*MLD*

----------


## fsmrel

Reprenons la structure ne respectant pas la BCNF (cf. mon message prcdent) :
NOTE {EtudiantId, DisciplineId, ProfesseurId, Valeur, Appreciation, OptionId, AnneeScolaireId, NiveauId}Et considrons par ailleurs votre table des notes de rattrapage :
 rattrapage(id_rattr, #id_discipline, #id_etudiant, note_rattrapage, #id_annee)Renommons table et attributs (tout en ajoutant lapprciation du professeur, a ne mange pas de pain et au besoin on pourra supprimer lattribut correspondant sil na pas dutilit) :
 NOTE_RATTRAPAGE {id_rattr, EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation}
A son tour, lattribut id_rattr peut passer au rasoir dOckham, tout comme a sest produit pour lattribut id_note de votre table NOTE. La structure devient :

 NOTE_RATTRAPAGE {EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation}On retrouve donc la structure de NOTE_6 (cf. mon message prcdent) :
 NOTE_6 {EtudiantId, AnneeScolaireId, DisciplineId, Valeur, Appreciation}
Sur ces considrations, une note de rattrapage permettant, comme son nom lindique, de rattraper une note insuffisante, du point de vue de la modlisation elle en est comme un cho, et la modlisation devrait ressembler  celle-ci :

* MCD* 
 


* MLD*

----------


## spring.time

> ```
> 
> ```


une requete bien gourmande  ::mouarf:: 
je vous remercie infiniment.....

elle permet donc d'affecter  chaque tudiant son matricule, c'est pas par groupe de promotion.

j'aimerais trier les tudiant de la 3e, affecter  chaque tudiant un matricule qui l'accompagne durant toutes les 4annes(3e, 4e, 5e, 6e)
si un tudiant redouble, il appartient donc  la promotion precedente, et il est plac le dernier dans la liste.

je dois refaire la requte  ce qu'elle s'excute sur chaque bloc (promotion-anne), non sur toutes les promotions ensembles.

----
par exemple:




> INSERT INTO ANNEE_SCOLAIRE (AnneeScolaireId, AnneeScolaireLibelle) VALUES (1, '2008-2009') ;
> INSERT INTO ANNEE_SCOLAIRE (AnneeScolaireId, AnneeScolaireLibelle) VALUES (2, '2009-2010') ;
> INSERT INTO ANNEE_SCOLAIRE (AnneeScolaireId, AnneeScolaireLibelle) VALUES (3, '2010-2011') ;
> INSERT INTO ANNEE_SCOLAIRE (AnneeScolaireId, AnneeScolaireLibelle) VALUES (4, '2011-2012') ;
> INSERT INTO ANNEE_SCOLAIRE (AnneeScolaireId, AnneeScolaireLibelle) VALUES (5, '2012-2013') ;
> 
> INSERT INTO PROMOTION (PromotionId, PromotionNo, PromotionLibelle) VALUES (0, 40, 'Pas de promo') ;
> INSERT INTO PROMOTION (PromotionId, PromotionNo, PromotionLibelle) VALUES (1, 41, 'Promo 2010') ;
> INSERT INTO PROMOTION (PromotionId, PromotionNo, PromotionLibelle) VALUES (2, 42, 'Promo 2011') ;
> ...


pour le niveau 3, anne 2008/2009:
Albert (maricule 41001)
Bernard(matricule 41002)

Albert aura toujours 41001 s'il ne redouble pas, si oui, on met  jour son matricule=> 4071(70 nombre d'tudiants de la promotion 40)

pour le niveau 3, anne 2009/2010:
Bernard (matricule 42001)
Emilie (matricule 42002)
Franois (matricule 42003)
Hugh (matricule 42004)

pour le niveau 3, anne 2010/2011:
Chris (matricule 43001)
Dorine (matricule 43002)
Gilles (matricule 43003)

----------


## spring.time

> l'tudiant a le droit de choisir les disciplines  repasser dans le rattrapage si la note.
> Merci de complter cette phrase...


excusez moi  ::oops:: 

si un tudiant obtient des notes moins de 12, il a le droit de les refaire, comme il peut ne pas faire un rattrapage (il fait ses propres calculs pour ne pas avoir une moyenne de la formation scientifique <12)

----------


## fsmrel

Bonsoir,

A propos des bulletins.




> l'tudiant a un bulletin par niveau


Jaurais tendance  dire que cest par anne scolaire. En tout cas, qui peut le plus peut le moins, si on sait produire un bulletin par anne alors on sait produire un bulletin par niveau. 

Les lments que vous fournissez sont les suivants :




> bulletin_sans_ratt(id_bulletin_sr, #id_etudiant, moy_form_sc, moy_gen, #id_moy_form_milit)
> 
> bulletin_avec_ratt(id_bulletin_ar, #id_etudiant, #id_rattr, id_note, moy_form_sc, moy_gen_avec_r, #id_bulletin,sr)


Concernant le bulletin sans rattrapage, les informations qui ne sont pas modlises sont les suivantes : 

 1  Moyenne de la formation scientifique,
2  Moyenne de la formation militaire,
3  Moyenne gnrale sans rattrapage,
4  Moyenne gnrale avec rattrapage,
5  Numro de classement,
6  Et, si jai  peu prs compris, pour les tudiants en fin de 6e anne, la note se soutenance, la note de documentation et la note militaire.
Concernant le bulletin avec rattrapage, il ne manque rien.

Si on part du principe quon a un bulletin par tudiant et par anne scolaire (c'est--dire pour une scolarit), on dfinit un type dentit BULLETIN (sous-entendu sans rattrapage), et on met en place une association entre SCOLARITE et BULLETIN :
 Une scolarit a au plus un bulletin et un bulletin fait rfrence exactement  une scolarit.Le type dentit BULLETIN comporte les proprits suivantes :
 MoyenneFM (moyenne de la formation militaire), 
 NoClassement (Numro de classement).A BULLETIN on associe un type dentit ne concernant que les tudiants en 6e anne, pour disposer des notes concernant la soutenance, la documentation et la notation militaire. Ces types de notes font lobjet du type dentit TYPE_NOTE.

Concernant la moyenne de la formation scientifique et la moyenne gnrale avec ou sans rattrapage, on a tous les lments pour calculer a. A moins que jai mal compris et oubli des choses, le MCD ci-dessous devrait suffire pour constituer les bulletins (sachant par ailleurs que, pour un tudiant et une anne scolaire, on sait retrouver le niveau, loption, le professeur, etc.) 

 


Maintenant, vous trouverez que tout cela est dsarticul et vous prfrerez peut-tre MCD suivant, plus classique :

 

Qui a pour MLD :

 


C'est vous qui voyez, vous me direz. Pour ma part, je prfre la 1re version, je m'en expliquerai  l'occasion d'un prochain message.

----------


## fsmrel

Bonjour spring,





> une requete bien gourmande


Comment a ? ! Vous auriez donc un milliard dtudiants ?  ::P:  Les tablissements fsmrel ne font pas dans le dtail, mais dans le gros (voire le demi-gros comme ci-dessous)...  ::mouarf:: 





> j'aimerais trier les tudiant de la 3e, affecter  chaque tudiant un matricule qui l'accompagne durant toutes les 4annes(3e, 4e, 5e, 6e)
> si un tudiant redouble, il appartient donc  la promotion precedente, et il est plac le dernier dans la liste.


Well. En plus de la variable @Annee, on dclare une variable @PromotionNo pour filtrer sur la promotion et pouvant prendre les valeurs 40, 41, 42, etc. Exemple (promo 42) :



```

```


On dclare une variable de table @REDOUBLANT puisquon doit sintresser aux redoublants et on y insre les tudiants malchanceux pour lanne @Annee et la promotion @PromotionNo :



```

```

 
On dclare une table @T pour y loger les noms des tudiants de la promotion @PromotionNo pour lanne @Annee. En ce qui concerne les INSERTS, dans la mesure o les redoublants dj enregistrs comme tels pourraient ficher la zoubia, il me parat prudent dutiliser la technique  Ceinture, bretelles et pingle  nourrice , c'est--dire tenir compte de ce quil y a dans la table @REDOUBLANT :



```

```


On peut passer au calcul du matricule (noter que jai utilis la clause IDENTITY pour la table MATRICULE) :



```

```


Histoire de changer, vous noterez que la clause ROW_NUMBER() OVER(ORDER BY Etudiantnom) a disparu, au profit de la table @T :  vous de voir ce que vous prfrez...

Comme Dorine redouble, jai ajout des tudiants non redoublants auxquels elle sest jointe (promo 42) pour voir un peu ce que a donne ;  vous de pousser les tests... :




```

```


Je vais essayer de regarder le calcul du matricule des redoublants, mais il y a aussi les J.O.  la tl !

A plus tard, donc...

----------


## fsmrel

Calcul du matricule pour les redoublants. 


Cest bien plus drle quand il y a plus dun redoublant, donc outre Dorine, on va faire redoubler sa 5e anne  Nomie :



```

```



Je modifie la structure de la table @REDOUBLANT car jai besoin dun auto-incrment (colonne RedoublantSeq) :  



```

```



Dclaration dune variable hbergeant le nombre dtudiants (non redoublants) de la promo :



```

```



Production du matricule des redoublants (Dorine et Nomie) :



```

```



Je ne me suis pas intress aux zros sparateurs, jai laiss flotter les rubans...

Je vous laisse le soin de simplifier tout ce schmilblick SQL.  ::zen::

----------


## spring.time

les mots m'chappent.....je vous remercie infiniment pour toutes ces explications

je vais rorganiser tout cela  ::P:

----------


## fsmrel

Bonjour spring,


Si vous abandonnez la discussion dans laquelle le lion a rugi, noubliez pas de la marquer rsolue.


Have a good time!

----------


## spring.time

bonjour  ::D: 

svp, concernant le MLD des bulletins:
vous parlez de bulletin de rattrapage et sans rattrapage, mais je ne vois que la variable relationnelle Bulletin.




> Concernant la moyenne de la formation scientifique et la moyenne gnrale avec ou sans rattrapage, on a tous les lments pour calculer a


mais si on pouvait les stocker, pour l'historique et pour ne pas refaire  chaque besoin leur calcul, ou' les mettre?

autre chose, je vois dans le MLD, qu'il y'a un lien entre NOTE_DISCIPLINE et BULLETIN, le sens de la fleche, je ne comprends pas  ::oops::  

pour BULLETIN, vous signifiez son type, mais comment on peut distinguer entre les 2?

le lien entre NOTE et BULLETIN, svp pourriez vous m'expliquer d'avantage?
et Merci  ::):

----------


## spring.time

Salut, 
j'ai test la 1re requete, pour chaque promotion x et anne y,(  #78)
mais je ne reois pas une liste trie par l'ordre alphabtique des noms  ::oops:: 
il faut que je rajoute quelque chose?

svp j'ai essay de dcortiquer la requete pour la comprendre, mais  ::oops::  pourriez vous m'expliquer svp les jointures?

----------


## fsmrel

Hello spring,





> Je ne reois pas une liste trie par l'ordre alphabtique des noms, il faut que je rajoute quelque chose?


Il y a un ORDER BY x.EtudiantNom qui a manifestement disparu  loccasion des copier/coller et qu'il faut mettre  sa place. Requte complte (ligne 14) :



```

```


Tenez-moi au courant.




> J'ai essay de dcortiquer la requete pour la comprendre, mais  pourriez vous m'expliquer svp les jointures ?


Qu'est-ce qui ne va pas avec les jointures ? Est-ce parce qu'il y a 4 tables concernes (triple jointure) ?

----------


## spring.time

je vous remercie pour votre gnrosit et pour votre patience...




> Qu'est-ce qui ne va pas avec les jointures ? Est-ce parce qu'il y a 4 tables concernes (triple jointure) ?


je ne saisis toujours pas les jointures avec 

```
JOIN
```

, par exemple, pour la requete de insert de la variable table @REDOUBLANT, il y'a plus d'un appel de 

```
JOIN PROMOTION as z
```

 et autre 

```
as t
```

, je ne comprends pas ::oops::

----------


## spring.time

::ccool::  oui ordrer by a fait l'affaire

----------


## fsmrel

Bonsoir spring,


Je rappelle dabord que la jointure est lopration par excellence de lalgbre relationnelle et cest Ted Codd qui en est linventeur (en 1969). Pour les autres oprateurs, il les a repris des mathmatiques en les adaptant aux relations n-aires, alors que les mathmatiques sintressent essentiellement aux relations binaires (le terme relation na videmment rien  voir avec les relations plutt smantiques (_relationships_) du modle Entit/Relation de Chen ou de Merise).

Considrons la RELVAR (table SQL) des tudiants et celle des scolarits :



```

```

Les images suivantes symbolisent les relations (tables en SQL, lequel utilise le mme mot pour variable et valeur) :



```

```



```

```

Selon SEQUEL (le nom de SQL en 1974), pour effectuer la jointure des deux tables, on crit :



```

```

Loprateur de comparaison utilis ici est  = , on dit en loccurrence quon effectue une qui-jointure. Disons que du point de vue thorique, on effectue le produit ETUDIANT X SCOLARITE, auquel on applique une restriction (WHERE).

En relationnel, la jointure se note tout simplement : ETUDIANT JOIN SCOLARITE, ou SCOLARITE JOIN ETUDIANT, car  JOIN est commutatif. On peut aussi crire : JOIN (ETUDIANT, SCOLARITE).

Par la suite, comme on peut effectuer des auto-jointures (jointure dune table avec elle-mme), il a t ajout la possibilit de qualifier les colonnes au sein dune requte SQL, en faisant prcder un nom de colonne d'un qualificateur plus un point sparateur (exemple :  e.EtudiantId), qualificateur qui ci-dessous est un alias pour un nom de table ("e" pour ETUDIANT) :


```

```

Dans la requte que vous dcortiquez, jai utilis des qualificateurs, mais a ntait pas ncessaire (je cherche seulement  gagner de la place  laffichage...)

Pour produire un rsultat (une relation) ne comportant que le contenu des colonnes intressantes, en plus de la jointure on dclare une projection (SELECT en SQL) :



```

```

En relationnel : JOIN (ETUDIANT, SCOLARITE) {EtudiantId, PromotionId, AnneeScolaireId}O {EtudiantId, PromotionId, AnneeScolaireId} dnote la projection (utilisation impose des accolades).

Au rsultat :



```

```


Quand en 1986, Chris Date a propos la jointure externe (OUTER JOIN), il a donn la possibilit de qualifier dinterne (INNER) la jointure SQL. Tout cela a t repris dans la norme SQL/92 et beaucoup de Sqlistes ont pris lhabitude dutiliser la jointure interne :



```

```

(On peut faire lconomie du qualificatif INNER, et cest du reste ce que jai fait).

Au nom du principe de fermeture, le rsultat du mariage des relations est aussi une relation, le bb est de mme nature que ses parents et peut  son tour se marier et enfanter.

Appelons BB le rsultat de la jointure JOIN (ETUDIANT, SCOLARITE) :

 BB = JOIN (ETUDIANT, SCOLARITE)On peut donc marier BB et PROMOTION. En relationnel :
BB JOIN PROMOTIONEt lon crit, pour tout marier en mme temps (en notant que la jointure est associative)... :
JOIN (ETUDIANT, SCOLARITE, PROMOTION)En SQL :



```

```

Comme il faut filtrer sur la promotion @PromotionNo, on effectue une restriction (WHERE) en plus :


```

```


Par exemple, pour @PromotionNo = 41 (c'est--dire PromotionId = 1), le rsultat prcdent est restreint  :



```

```

Et comme on doit aussi filtrer sur lanne scolaire dont la valeur est  rcuprer dans ANNEE_SCOLAIRE, on fait aussi participer cette table au mariage :



```

```

Sans oublier de filtrer :


```

```


Pour l'anne scolaire 2010-2011 (c'est--dire AnneeScolaireId = 3), le rsultat est  nouveau restreint :



```

```


Et voil...

Est-ce que a va un peu mieux, ou est-ce que a empire ?

----------


## fsmrel

> je vois dans le MLD, qu'il y'a un lien entre NOTE_DISCIPLINE et BULLETIN, le sens de la flche, je ne comprends pas


Le sens de la flche reflte celui de la contrainte dintgrit rfrentielle qui veut quune note fasse ncessairement rfrence  un bulletin. Mais ce MLD est en balance avec celui que je propose ci-dessous comme alternative.





> le lien entre NOTE et BULLETIN, svp pourriez vous m'expliquer d'avantage?


Jai trait des notes dans le message #73, o jexpliquais que NOTE est le nom donn finalement  la relvar NOTE_6 rsultant du travail de normalisation. Disons qu ce stade, on ne s'intresse pas encore aux notes de rattrapage.

La partie correspondante du MCD tait la suivante :

 

Dans ce diagramme, la mise entre parenthses dune cardinalit 1,1 symbolise lidentification relative (au sujet de ce type d'identification voyez notamment ici). Par exemple, SCOLARITE na pas didentifiant propre, mais hrite des identifiants des types dentits  partenaires , ETUDIANT et ANNEE_SCOLAIRE. Dans le langage de Peter Chen (auteur de larticle considr comme fondateur du modle Entit/Relation), on peut considrer SCOLARITE comme un type dentit faible (_weak entity_). 

En ralit SCOLARITE est un dguisement pour un type dassociation SCOLARISER :

 

Pourquoi donc avoir transform SCOLARISER en SCOLARITE ? Parce que  cest ballot !  le modle Entit/Relation (tel quil est repris avec PowerAMC) ne permet pas dassocier une association, or SCOLARISER devrait tre associe  NOTE et bien sr  NIVEAU et PROMOTION. Si on prend lexemple dune association avec NIVEAU :

 

De la mme faon, dun point de vue smantique, NOTE est en ralit une association (porteuse de donnes)  appelons-la SANCTIONNER_PAR_NOTE  entre les types dentits SCOLARITE et DISCIPLINE :

 

Ce qui se lit : Au terme dune anne scolaire, la scolarit dun tudiant est sanctionne par une note dans chacune des disciplines quil a tudies.

Quand interviennent les notes de rattrapage (message #74), on est conduit  tablir une association entre lassociation SANCTIONNER_PAR_NOTE et le type dentit NOTE_RATTRAPAGE, ce que Power AMC interdit une fois de plus, toujours pour la mme raison. La solution de contournement est donc de dguiser SANCTIONNER_PAR_NOTE en type dentit (NOTE est renomme ici en NOTE_DISCIPLINE) :

 

Ce qui correspond aux rgles de gestion :
Une note de rattrapage permet damliorer exactement (c'est--dire au moins une et au plus une) une note insuffisante dans une discipline.

Une note dans une discipline peut faire lobjet dau plus une note de rattrapage.


Pour en venir au bulletins : 

Une scolarit est sanctionne par au plus un bulletin et un bulletin sanctionne exactement une scolarit, do le diagramme : 

 

Un bulletin comporte entre autres choses  le dtail des notes obtenues par un tudiant dans les disciplines scientifiques de son niveau. La rgle de gestion correspondante est la suivante :
Un bulletin comporte chacune des notes obtenues par un tudiant dans ses disciplines et une note obtenue par l'tudiant dans une discipline est inscrite sur son bulletin.La modlisation correspondante est celle-ci (indpendamment des notes de rattrapage) :

 

Mais dans le message #77, jai propos lalternative suivante :
 

En effet, quand on descend des nuages pour atterrir au niveau oprationnel, on peut avoir des problmes pour raccrocher les wagons entre BULLETIN et NOTE_DISCIPLINE, car les notes dun tudiant doivent tre connues au moment o il s'agit de constituer son bulletin : dans le contexte du Modle Relationnel de Donnes, avec un langage du type Tutorial D, il ny a pas de problme, on peut engranger * en une fois*   le moyenne FM ainsi que le numro de classement dune part et les notes dautre part, mais avec SQL Server, changement de chanson, cela doit se faire * en deux temps*  (tandis que la norme SQL permet de biaiser, temporiser, grce  la clause INITIALLY DEFERRED utilisable pour les cls trangres). Quand on modlise, on doit privilgier les contraintes smantiques : un bulletin comporte au moins une note dans une discipline, mais les remontes venant de la soute, peuvent nous dtourner de ce principe, si lon ne veut pas en baver des ronds de chapeau une fois au pied du mur SQL (prononcez _Askew Wall_, je vous laisse traduire...)

Vous avez bien sr toute libert pour faire comme vous lentendez, mais pour ma part, jopte pour la version pragmatique des choses dont voici le MLD (lautre fois javais fourni le MLD de la version smantique) :

.


A suivre (les bulletins de rattrapage et tout a...)

----------


## fsmrel

Bonjour,





> pour BULLETIN, vous signifiez son type, mais comment on peut distinguer entre les 2?


Distinguer entre quoi et quoi ? 





> vous parlez de bulletin de rattrapage et sans rattrapage, mais je ne vois que la variable relationnelle Bulletin.


Cest normal. En effet, jai crit :




> Concernant le bulletin sans rattrapage, les informations qui ne sont pas modlises sont les suivantes : 
> 
>  1  Moyenne de la formation scientifique,
> 2  Moyenne de la formation militaire,
> 3  Moyenne gnrale sans rattrapage,
> 4  Moyenne gnrale avec rattrapage,
> 5  Numro de classement,
> 6  Et, si jai  peu prs compris, pour les tudiants en fin de 6e anne, la note se soutenance, la note de documentation et la note militaire.
> Concernant le bulletin * avec rattrapage*, il ne manque rien.


Un bmol concernant le numro de classement : la main de lhomme peut-elle intervenir hors algorithme, par exemple dans cas dex quo  dpartager ? Jai fait figurer un attribut NoClassement dans len-tte de BULLETIN, mais en thorie il est  retirer si le calcul est compltement automatique.

Si au niveau du MCD on mettait en uvre un type dentit BULLETIN_RATTRAPAGE (donc une relvar au niveau du MLD),  on naurait rien  y mettre : on sabstient donc de modliser ce type dentit (on pourra revenir sur ce sujet  propos de l*optimisation*  (quel vilain mot...) de la base de donnes, mais pour le moment, on part du principe quon a un systme suffisamment puissant et des utilisateurs trs patients...)

En revanche, rien nempche de dfinir une * vue*   portant le nom de BULLETIN_RATTRAPAGE (ou BULLETIN_AR si vous prfrez) et dont les donnes proviennent de relations existantes (attention, le mot _ relation_   est  prendre ici au sens du Modle Relationnel de Donnes, une relation est une valeur prise par une relvar), que ces donnes soient de base ou calcules ( limage de la moyenne de la formation scientifique ou de la moyenne gnrale) :



```

```


Dans le MCD, le type dentit BULLETIN est une structure daccueil pour les seules donnes concernant les bulletins, et  quon ne sait pas infrer des autres donnes, en loccurrence il sagit de la moyenne de la formation militaire (comme je lai signal, jy ai fait figurer le numro de classement, mais si on sait le calculer de faon totalement automatique, en toute rigueur NoClassement doit disparatre).






> Envoy par fsmrel
> 
> 
> Concernant la moyenne de la formation scientifique et la moyenne gnrale avec ou sans rattrapage, on a tous les lments pour calculer a.
> 
> 
> mais si on pouvait les * stocker* , pour l'historique et pour ne pas refaire  chaque besoin leur calcul, o les mettre?


Vous abordez en fait  le problme de loptimisation (synonyme de :  amlioration de la performance ). Si on dispose de tous les lments pour calculer les moyennes, avec ou sans rattrapage, quel intrt aurait-on  _a priori_   les  stocker  comme vous le souhaitez ? Cest l quintervient la mise en place par le DBA dun prototype de performance, permettant destimer lordre de grandeur du temps ncessaire pour effectuer les calculs. Si les mesures montrent que la dure des calculs nest pas perceptible, on en reste l. Si les mesures montrent que cette dure est excessive, alors seulement on  stocke  les rsultats. A cet effet, la structure daccueil naturelle serait la table BULLETIN pour ce qui ne concerne pas la partie rattrapage, cette dernire partie faisant lobjet dune table  du bout des lvres appelons-la BULLETIN_RATTRAPAGE  contenant les rsultats de calcul (moyennes) propres au rattrapage et trop onreux  produire. En tout tat de cause, les rsultats stocks ne devraient concerner que les calculs de moyenne faisant intervenir des notes. Si lon considre la moyenne gnrale pour les tudiants de 6e anne (cf. votre post #51) : 
 ((((note soutenance x 2)+(note documentation x 2))/4) x3)+ note militaire)/4Comme ces notes de soutenance, documentation et militaire sont dj stockes, la dure du calcul de la moyenne gnrale ne va quand mme pas mettre un ordinateur  genoux ! Cette moyenne na pas  faire lobjet dun attribut polluant len-tte dune quelconque table. Mme chose en ce qui concerne la moyenne des moyennes.
Pour rsumer, si le prototypage des performance montre que la dure de tel ou tel calcul faisant intervenir des notes est pnalisante, alors seulement on prvoira une structure daccueil (attributs ad-hoc dans len-tte de  BULLETIN et/ou mise en uvre de BULLETIN_RATTRAPAGE) pour hberger les rsultats correspondants :

MCD



MLD



A plus tard

----------


## spring.time

je vous remercie beaucoup et excusez moi de mon absence

oui, j'ai bien compris la notion de join mais ici:


```

```


je ne comprends pas ces 2lignes:


```

```

 ::oops::

----------


## fsmrel

Bonsoir spring,





> je ne comprends pas ces 2 lignes :
> 
> 
> ```
> 
> ```


tant donn que jeffectue une auto-jointure pour SCOLARITE (jointure de la table avec elle-mme), je compare la promotion z de la scolarit x de ltudiant avec la promotion t de sa scolarit y. Mais peu importe, la requte nest pas complte. 

En attendant, pour simplifier les calculs, jai ajout une colonne AnneeScolaireNo dans len-tte de la table ANNEE_SCOLAIRE, prenant les valeurs 2008, 2009, etc.) :



```

```



Considrons maintenant  lexemple ci-dessous et cherchons les redoublants pour lanne scolaire 2012-2013, promotion 42 :

A lorigine, Louis, Dorine, Nomie et Quentin font partie de la promo 43 tandis quOlaf a toujours fait partie de la promo 42. Nomie et Quentin ont redoubl en 2011 et Dorine en 2012. La situation avant requte est la suivante :





```

```

Nouvelle version de la requte dinsert  (avec @Annee = '2012-2013' et @PromotionNo = 42) :



```

```


Crayon en main, dans le dmontage du meccano, considrez que lon a deux jeux de tables SCOLARITE, PROMOTION et ANNEE_SCOLAIRE : (x, z, v) dune part, (y, t, w) dautre part. 

Maintenant, quel rsultat  obtient-on avec cette requte ?

Louis ny figurera pas puisquil na jamais fait partie la promo 42.

Parmi les 4 tudiants restants, sont   considrer comme redoublants en 2012 ceux qui lors de lanne scolaire prcdente ont fait partie de la promo 43. 

Olaf na jamais fait partie de la promo 43, il ne fait donc pas partie des redoublants de lanne 2012.
Nomie et Quentin ne faisaient pas partie de la promo 43 en 2011. Il ne reste que Dorine qui a redoubl en 2012 et satisfait la condition :
 z.PromotionNo = t.PromotionNo - 1 AND v.AnneeScolaireNo = w.AnneeScolaireNo + 1.Je rappelle que lon a deux rfrences  la table PROMOTION, une 1re (z) en relation avec la 1re rfrence  SCOLARITE (x), une 2e (t) en relation avec la 2e rfrence  SCOLARITE (y).

Mme principe pour lanne scolaire, on a une 1re rfrence  ANNEE_SCOLAIRE (v) en relation avec la 1re rfrence  SCOLARITE (x), une 2e rfrence (w) en relation avec la 2e rfrence  SCOLARITE (y).

La requte peut paratre complexe, mais sa complexit est la mesure du systme  gomtrie variable et fou dimmatriculation des tudiants...


N.B. Il faut renommer la table OPTION (par exemple en SPECIALITE), car  OPTION  est un mot rserv SQL.

----------


## fsmrel

Bonjour spring,


Suite du bombardement...


A propos de la table ANNEE_SCOLAIRE

Jai omis de dclarer {AnneeScolaireNo} comme cl candidate. Par ailleurs, si la valeur de AnneeScolaireNo est gale par exemple  2008, alors la valeur de AnneeScolaireLibelle doit tre gale  '2008-2009'. En consquence, la colonne AnneeScolaireLibelle peut disparatre auquel cas lorsque dans une requte vous faites rfrence  AnneeScolaireLibelle, soit vous calculez sa valeur  partir de AnneeScolaireNo, soit vous conservez AnneeScolaireLibelle comme colonne dans la table, mais vous ajoutez un contrle de structure, comme ci-dessous :  



```

```


Pour ma part, vu la grande masse dinserts  effectuer, en gros un par an  ::D:  :, je conserverais sans problme la colonne dans la table.



Pour y voir plus clair dans la dtection des redoublants.

Dune faon gnrale, vu le diagramme :

 

Vous pouvez dfinir une table drive (vue) qui reprenne les lments des cinq tables comme sil ny en avait quune seule, appelons-la ETUDIANT_SCOLARITE. Cette table drive sarticule autour de SCOLARITE et on rcupre les donnes des tables qui gravitent autour : 

 

Ce qui se traduit par le code SQL suivant :



```

```



La prise en compte des redoublants peut alors prendre la forme :



```

```


A vous de voir si cette faon de procder qui se veut "simplificatrice" vous convient.

----------


## spring.time

excusez moi pour ce retard, mais j'essaye d'analyser tout ce que vous m'avez dit, et l'implmenter....
je ne sais comment vous remercier  ::oops::  Monsieur fsmrel


je vous met au courant de mon travail trs prochainement  ::D:

----------


## fsmrel

Bonsoir spring,

Surtout restez zen, si vous avez un problme n'hsitez pas  en faire part. La rentre est pour bientt ?

----------


## spring.time

excusez moi   ::oops::  je travaillais toujours sur l'application, 
la rentre est dans 2semaines  ::calim2::  lol
------
svp, j'ai un un blocage, au niveau des tables:
niveau_discipline
niveau_discipline_commune
niveau_discipline_a_specialite

j'aimerais par exemple, afficher pour chaque niveau n et dans une anne a, tous les profs avec les niveaux et les spcialits qu'ils enseignent.
j'ai pas de problme s'il s'agit des 2niveaux 3 et 4
mais pour les niveaux 5 et 6, il y'a des profs qui enseignent des disciplines, et ces disciplines sont lies  des spcialits, le prof il peut prendre une spcialit, comme il peut enseigner toutes les spcialits,

je me bloque, comment j'affiche les profs de 5e et 6e pour une anne a, qui enseignent des disciplines, sachant que ces disciplines, peuvent tre lies  une spcialit ou aux 4 spcialits?

est ce que vous m'avez compris?

merci

----------


## fsmrel

Bonsoir spring,


Avant de traiter des spcialits, jai une remarque  faire. Vous dites que vous navez pas de problme en ce qui concerne les niveaux 2,3 et 4 : soit.

Toutefois, selon votre message #23, il est convenu jusquici, que pour un niveau et une discipline donns, il ny a quun professeur. Mais cette contrainte n'est-elle pas  complter ? En effet, si cest Albert qui enseigne la physique pour le niveau 2 pour la priode 2008-2009, a ne peut pas tre quelquun dautre par la suite ?





> comment j'affiche les profs de 5e et 6e pour une anne a, qui enseignent des disciplines, sachant que ces disciplines, peuvent tre lies  une spcialit ou aux 4 spcialits?


Votre problme est-il li  la modlisation qui ne serait pas complte (problme de la priode que je viens d'voquer) ? Est-il li  la programmation en SQL ? Au besoin, expliquez-vous par l'exemple.

En tout cas, en ltat actuel du MLD, pour retrouver les noms des spcialits (options) enseignes par un professeur, on effectue une jointure des tables PROFESSEUR, NIVEAU_DISCIPLINE, NIVEAU_DISCIPLINE_A_OPTION, OPTION.

Rappel de lorganisation du MLD :

----------


## spring.time

oui vous avez raison, les affectations des profs changent chaque anne, donc il me faut une anne dans niveau_discipline.

----------


## spring.time

j'ai pens  une interface qui permet de lier chaque discipline aux niveaux appropris(j'utilise donc les 3tables niveau_discipline sans prof et niveau_discipline_commune et niveau_discipline_a_specialite) , puis une autre pour affecter chaque prof, pour une anne donne aux 4 niveaux(une nouvelle table appele affectation(id_niveau, id_discipline, id_prof, id_annee).


qu'est ce que vous en pensez, c'est correct?

----------


## fsmrel

> vous avez raison, les affectations des profs changent chaque anne, donc il me faut une anne dans niveau_discipline.


On est donc daccord. La rgle de gestion : Pour un niveau et une discipline donns on ne peut avoir qu'un seul professeur. doit voluer ainsi : Pour un niveau, une discipline et une anne scolaire donns on ne peut avoir qu'un seul professeur. Pour cette partie, le MLD devient donc le suivant, o la table NIVEAU_DISCIPLINE est dote dune colonne supplmentaire,  savoir AnneeScolaireId, participant  la cl de la table :

 


Passons aux spcialits. Selon le MLD ci-dessus, un professeur ne peut pas enseigner un nombre restreint de spcialits...  ::(: 

On va donc faire voluer le modle, pour rectifier cela. Le plus simple est de remplacer le lien PROFESSEUR - NIVEAU_DISCIPLINE par deux liens : le 1er entre PROFESSEUR et NIVEAU_DISCIPLINE_COMMUNE (comme dans le MLD prcdent, on sait quel est lensemble des disciplines communes enseignes par un professeur, telle anne,  tel niveau), le 2e entre PROFESSEUR et NIVEAU_DISCIPLINE_A_OPTION (on sait cette fois-ci quel est lensemble des spcialits enseignes par un professeur, telle anne,  tel niveau, en relation avec telle discipline). 

 

Arrive-t-on  ce dont vous avez besoin ?

----------


## spring.time

je vous remercie pour votre patience, 

il y'a autre chose que j'ai totalement oubli  ::oops::   pour les disciplines communes  toutes les spcialits, un prof peut ne pas enseigner les tudiants de toutes les spcialits, par exemple les tudiants de la 5e tudient tous (des 4spcialits) l'anglais, et ils peuvent avoir meme prof, comme ils peuvent avoir des profs diffrents, selon la disponibilit des profs.
vous m'avez compris?
comment connaitre les spcialits prises en charge par les profs qui enseignent des disciplines communes?

----------


## spring.time

est ce je met un colonne id_option dans la table niveau_discipline_commune?

----------


## fsmrel

> pour les disciplines communes  toutes les spcialits


Vous voulez manifestement parler des disciplines qui concernent les tudiants de niveau 4 ou 5. Rfrons-nous  votre tout 1er message :
 Les tudiants des 4 options tudient des disciplines communes et bien sur des disciplines relatives  leurs options. Selon cet nonc, pour ces tudiants il y a des disciplines dites communes, non concernes par les spcialits, et il y a en plus des disciplines en relation avec  les options (spcialits) sur lesquelles les tudiants ont port leur choix, do la modlisation retenue (spcialisation en deux tables : NIVEAU_DISCIPLINE_COMMUNE et NIVEAU_DISCIPLINE_A_OPTION).

Maintenant, vous parlez de disciplines communes  toutes les spcialits : il y a l une diffrence, une extension (?) par rapport  l'nonc initial et qu'exprime votre question  est ce je met un colonne id_option dans la table niveau_discipline_commune?   laquelle on ne peut donner aucune rponse en ltat. Le mieux serait que vous reformuliez l'nonc initial s'il n'est pas complet, et que vous donniez des exemples concrets, prcis et exhaustifs illustrant l'ensemble des situations relles, en insistant sur les ventuelles nouveauts, sur ce qui nest pas (ou mal) pris en compte dans le modle.





> ils peuvent avoir des profs diffrents, selon la disponibilit des profs.


Encore une nouveaut. Jusquici, pour un niveau, une anne scolaire et une discipline donns, on a un seul professeur. Vous dites maintenant que ce nest plus le cas, mais ce que vous noncez reste trop vague pour tre pris en compte. _A priori_, la rgle est peut-tre dj  faire voluer ainsi :
Pour un niveau, une anne scolaire et une discipline donns, on a un seul professeur *titulaire* Ce qui laisserait la possibilit de traiter (au sein de la base de donnes) des remplacements des professeurs provisoirement (ou dfinitivement) empchs denseigner telle ou telle discipline pour tel niveau. Si cela va dans votre sens, je pose la question : 

Sagit-il seulement de prvoir en dbut danne scolaire qui remplacera qui ? Sagit-il de savoir en cours danne qui a remplac qui ? De quelle date  quelle date ?

Vous semblez insister sur remplacements des professeurs enseignant des  spcialits. Y aurait-il en l'occurrence des particularits ?

----------

