Bonjour Beegees,
La suite du feuilleton...
Je n'ai aucun mécanisme pour repérer où est l'étudiant, par contre, je pensais utiliser le numéro de matricule, déjà repris dans la table élève, pensez-vous
1) que c'est permis de faire cela avec MERISE
2) que c'est une bonne solution ? Si non, en avez vous une autre ?
Le numéro de matricule de l’élève participe au repérage, puisqu’il est impliqué, mais son niveau (alias Année) y participe aussi, ainsi que la Matière pour noter l’élève.
Si je comprends bien une table Année avec comme propriété BA1,... MA2.
Mais que sont exactement des propriétés, c'est le nom des champs ?
Dans un de vos précédents messages ("Pourriez vous m'expliquer les termes MCD, MCT"), je vous ai suggéré la lecture de certains ouvrages ou documents libres d’accès et éclairant tout cela. Bref, une propriété correspond à ce que vous appelez champ (terme que l’on utilise plutôt pour des fichiers) ou attribut (voir informellement colonne) au niveau relationnel. Une propriété telle que Année (ou Niveau_Nom dans le schéma de MLD ci-dessous) peut prendre les valeurs "BA1", "BA2", "BA3", "MA1", "MA2", etc. au fil des modifications dans le temps), de même que la propriété Nom peut prendre les valeurs "Beegees", "Martin", etc.
Pour essayer de vous éclaire un peu plus, je joins en fin de document un MLD obtenu par rétroconception (SQL Server), dans lequel il est tenu compte de votre observation : "Chaque matière est appartient à un seul niveau." (En espérant que le fichier JPG vous soit accessible...)
Les instructions CREATE TABLE ont été régénérées en conséquence.
Je représente aussi sous forme tabulaire le contenu des tables du niveau logique (éléments identifiants soulignés) :
Niveau ([Niveau_Id, Niveau_Nom)
___________1_______BA1
___________2_______BA2
___________... ______...
Matiere (Niveau_Id, Matiere_Id, Matiere_Nom, Annee_Appli)
___________1________1________Mat-x_______1984
___________1________2________Mat-y_______1985
___________2________1________Mat-z_______1987
___________2________4________Mat-u_______1980
___________...________...________..._________...
Eleve (Eleve_Id,_____Nom,______ Prénom)
________1_________Beegees____Bernard
________2_________Martin______Louis
________...__________...________...
Eleve_Niveau (Eleve_Id, Niveau_Id, Annee_Solaire)
_______________1_______1_________2000
_______________1_______2_________2001
_______________2_______1_________2004
_______________...______..._________...
Eleve_Matiere (Eleve_Id, Niveau_Id, Matiere_Id, Points)
________________1_______1_________1_______100
________________1_______1_________2________80
________________1_______2_________4_______120
_______________... ______...________..._______...
Les instructions de création des tables, adaptées :
CREATE TABLE Niveau (
Niveau_Id INTEGER NOT NULL,
Niveau_Nom CHAR(64) NOT NULL,
PRIMARY KEY(Niveau_Id)
);
CREATE TABLE Eleve (
Eleve_Id INTEGER NOT NULL,
Nom CHAR(64) NOT NULL,
Prenom CHAR(64) NOT NULL,
PRIMARY KEY(Eleve_Id)
);
CREATE TABLE Matiere (
Niveau_Id INTEGER NOT NULL,
Matiere_Id INTEGER NOT NULL,
Matiere_Nom CHAR(64) NOT NULL,
Annee_Appli INTEGER NOT NULL,
PRIMARY KEY(Niveau_Id, Matiere_Id),
FOREIGN KEY (Niveau_Id)
REFERENCES Niveau(Niveau_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
/* On suppose qu'un élève ne redouble pas (sinon, rendre l'année scolaire identifiante) */
CREATE TABLE Eleve_Niveau (
Eleve_Id INTEGER NOT NULL,
Niveau_Id INTEGER NOT NULL,
Annee_Scolaire INTEGER NOT NULL,
PRIMARY KEY(Eleve_Id, Niveau_Id),
FOREIGN KEY (Niveau_Id)
REFERENCES Niveau(Niveau_Id)
ON DELETE NO ACTION
ON UPDATE CASCADE,
FOREIGN KEY (Eleve_Id)
REFERENCES Eleve(Eleve_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Eleve_Matiere (
Eleve_Id INTEGER NOT NULL,
Niveau_Id INTEGER NOT NULL,
Matiere_Id INTEGER NOT NULL,
Points INTEGER NOT NULL,
PRIMARY KEY(Eleve_Id, Niveau_Id, Matiere_Id),
FOREIGN KEY (Niveau_Id, Matiere_Id)
REFERENCES Matiere(Niveau_Id, Matiere_Id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (Eleve_Id, Niveau_Id)
REFERENCES Eleve_Niveau(Eleve_Id, Niveau_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Partager