Tout d'abord qu'est-ce que merise?
Merise permet de conceptualiser un contexte pour pouvoir en déduire des relations entre les acteurs du contexte. (Ceci est ma définition, vous trouverez peut être autre chose en cherchant sur elgoog).
Dans ma vie merise me permet de savoir comment je vais constituer ma base de données. Les relations entre les tables et les liens entre les clés.
Comment fonctionne merise.
Pour le MCD (Modèle conceptuel de données)
On va constituer des carrés et des ronds (ovale en fait). Les carrés représenteront une entité qui à une existance propre et les ronds les associations entre les entités.
(faire plus d'explication sur le fonctionnement de merise et donner les 3 formes normales etc)
Pour le MLR (Modèle logique relationnel)
On va transformer le MCD en MLR (selon les situations il est plus pratique de faire le MLR avant le MCD).
Chaque entité et certaines association auront une ligne représentant une table de base de données.
Un petit exemple :
Une classe est constitué de 30 élèves et 1 professeur. Je veux faire un logiciel informatique qui pourra me lister tout les constituant d'une classé (Professeur + élèves).
Tout d'abord on peut voir dans ce contexte que le point central sera la classe.
La classe aura des liens avec les élèves et le professeur.
MCD
(DESSIN A FAIRE)
MLR
- On peut donc créer une entité élève qui sera comme ceci :
élève (id_elev, nom, prenom, date_naissance, sexe);
On note que l'id est souligné. Une id est sistématiquement souligné. Il est possible de faire une id composé de 2 ou plusieurs attributs exemple (nom, prenom)
- On peut ensuite créer une entitée professeur :
professeur (id_prof, nom, prenom); (la matière n'est pas demandé dans le contexte donc le nom, prenom suffira pour l'exemple)
- Et enfin on va créer la classe :
classe(id_class, nom);
Nous avons nos 3 entités mais aucune d'elles n'est relié. Pour mettre des élèves dans une classe il va falloir faire appel à des clés etrangères.
Une clé étrangère et un attribut faisant référence à un autre attribut d'une autre entité.
exemple
Cliquez pour révéler
Cliquez pour masquer
Comme 1 élève ne peut avoir qu'une classe il y a un rapport de 1 vers 1.
Quand il y a un rapport de 1 vers 1 alors la clé de l'entité classe devient clé étrangère dans l'autre.
Une classe peut avoir plusieurs élèves (30), il y a un rapoort de 1 vers 30 dit de 1 à n.
Lorsqu'il y a un rapport de 1 à n la clé de l'entité classe devient clé étrangère dans l'autre.
De facon générique
1 à 1 d'un coté et 1 a n de l'autre (voir MCD) vous prenez la clé de la classe ou il y a le 1 a n et vous la mettez dans l'entité ou il y a le 1 à 1.
- Donc élève qui était comme ceci :
élève (id_elev, nom, prenom, date_naissance, sexe);
professeur (id_prof, nom, prenom);
classe(id_class, nom);
- devient
élève (id_elev, nom, prenom, date_naissance, sexe, #id_class);
#id_class faisant référence à l'id de l'entité classe(id_class)
professeur (id_prof, nom, prenom);
classe(id_class, nom);
On nottera le #nom qui fait référence à l'utilisation d'une clé étrangère.
A partir de ce moment un élève ne sera que dans une classe car on ne pourra avoir 2 id_class dans un élève.
- Pour le professeur c'est la même chose
élève (id_elev, nom, prenom, date_naissance, sexe, #id_class);
#id_class faisant référence à l'id de l'entité classe(id_class)
professeur (id_prof, nom, prenom, #id_class);
#id_class faisant référence à l'id de l'entité classe(id_class)
classe(id_class, nom);
Pour aller plus loin voici le script SQL correspondant.
Cliquez pour révéler
Cliquez pour masquer
CREATE TABLE `classe`
(
id int(2),
nom var_char(30),
PRIMARY KEY (`id`),
)
CREATE TABLE `eleve`
(
id int(2),
nom var_char(30),
prenom var_char(30),
date_naissance datetime,
sexe boolean,
id_class int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`id_class`) REFERENCES classe(`id`)
)
CREATE TABLE `professeur`
(
id int(2),
nom var_char(30),
prenom var_char(30),
id_class int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`id_class`) REFERENCES classe(`id`)
)
A noter qu'un contexte peut avoir plusieurs solutions. Ma solution n'est peut etre pas la meilleure mais elle répond au contexte.
Un autre exemple
Une classe est constitué de 30 élèves et 6 professeurs. Un professeur peut enseigner dans plusieurs classes. Je veux faire un logiciel informatique qui pourra me lister tout les constituant d'une classé (Professeur + élèves).
(A FINIR)