Ok, nous allons jeter un coup d'œil à votre tentative de 2FN:
étudiant
idEtudiant | studentName | courseCode | modCode | resultCode
Cours
courseCode | courseTitle
Module
MODCODE | modTitle | crédits
Parlons d'abord de Étudiant d'abord.
Votre clé ne peut pas être studentID, car le code resultCode dépend de studentID et de courseCode (vous avez un résultat pour chaque cours). Mais votre studentName dépend uniquement de l'ID de l'étudiant, donc une partie de la clé (studentID, code de cours). Donc 2NF est violé. Vous devez faire quelque chose comme ceci:
étudiant
idEtudiant | studentName | courseCode | MODCODE
Cours
courseCode | courseTitle
Module
MODCODE | modTitle | Crédits
Résultat
idEtudiant | courseCode | resultCode
Mais s'il vous plaît garder à l'esprit que ce respecte le 2NF, mais semble toujours pas correct, parce que les modules et les cours sont maintenant complètement indépendants.Donc, essayez ceci:
étudiant
idEtudiant | studentName | MODCODE
Module
MODCODE | modTitle | Crédits
Cours
courseCode | courseTitle | MODCODE
Résultat
idEtudiant | courseCode | resultCode
Un cours appartient à un module (un module a plusieurs cours) - de mon point de vue. Ceci est automatiquement dans 2NF (parce que la clé est toujours juste un attribut (sauf le résultat, mais il y a juste un attribut non-clé qui dépend toujours des deux attributs clés), donc rien ne peut dépendre d'une "partie" de la clé). Et c'est aussi le cas pour 3NF, car toute entité «physique» a sa représentation logique dans le modèle de données (plus une règle empirique qu'un formalisme).
Maintenant, nous allons jeter un oeil à votre tentative 3FN. Je pense que vous avez le module < -> dépendance de cours à l'envers, mais concentrons-nous sur la normalisation.
étudiant
idEtudiant | studentName | courseCode
Cours
courseCode | courseTitle
Module
MODCODE | modTitle | crédits | courseCode
Résultats
idEtudiant | modCode | resultCode
Ceci est correct 3NF, parce qu'il n'y a pas d'autre candidat clé que la clé lui-même. Donc, il ne peut y avoir de dépendance transitive.
Pour clarifier ceci: un candidat clé est l'un des nombreux ensembles minimaux de clés possibles. Dans votre relation, vous avez trouvé au moins un candidat clé avec un élément (à l'exception de la relation de résultats). Donc, tout autre candidat clé ne peut pas avoir plus d'un élément. Cela signifie que vous pouvez simplement regarder chaque attribut et décider "cela peut-il être une clé ou non?" Et dans votre exemple vous trouvez, qu'aucun autre attribut ne peut être une clé - donc c'est automatiquement en 2NF et 3NF.
Cette question est entièrement dénuée de sens sans connaître les dépendances des attributs – Cubic
Cela ne fait pas partie de la question, en travaillant sur les dépendances des attributs - car je ne sais pas sur quel attribut dépendrait de qui. – konfused
Cette question n'appartient pas à StackOverflow, veuillez la poster sur http://dba.stackexchange.com/ –