J'ai un problème avec la deuxième forme normale (2NF) et je n'ai pas pu le résoudre en utilisant Google. Ça me rend fou parce que je suis professeur et je ne veux pas enseigner de mauvaises choses à mes élèves.
Ayons une table avec 5 champs.
Gradations = {StudentName, SubjectCode, SubjectName, #Exam, Grade}
Les dépendances sont de cette façon:
StudentName, SubjectCode, #Exam -> Grade
SubjectCode -> SubjectName
SubjectName -> SubjectCode
Par conséquent, la clé candidate 1 est {StudentName, SubjectCode, #Exam} et la clé candidate 2 est {StudentName, SubjectName, #Exam} .
Les attributs principaux sont {StudentName, SubjectCode, SubjectName, #Exam} et les attributs non premiers sont Grade
Selon la définition de la deuxième forme normale, un attribut non premier ne peut pas dépendre d'une partie d'une clé candidate. Le seul attribut non premier (Grade) ne dépend pas d'une partie d'une clé candidate, ce tableau semble donc en 2NF.
Le problème est que je pense que quelque chose ne va pas (et je peux me tromper). Je pense que les sujets devraient avoir leur propre table.
Notes = {StudentName, Subject Code, #Exam, Grade}
Subjects = {Subject Code, SubjectName}
Mais 2NF ne produit pas cela. 3NF concerne les dépendances entre les attributs non premiers, il ne produit donc pas cela non plus. Mais il me semble que c'est le bon résultat, car il n'y a pas de redondance.
Je suppose que si l'attribut non premier était défini comme "attribut qui n'est pas une clé candidate", 2NF produirait le résultat souhaité. Mais j'ai vérifié cela encore et encore et l'attribut non premier est défini comme "attribut qui n'appartient pas à une clé candidate".
Qu'est-ce que je fais mal?