0

https://dba.stackexchange.com/questions/98427/normilsation-2nf-and-3nfNormalization - 2NF et 3NF

Je suis passé par plusieurs questions et tutoriels youtube; Je comprends que 2NF supprime les dépendances partielles et 3NF est les transitives, mais je ne peux pas comprendre comment l'exemple suivant devrait ressembler à 2NF.

studentID | studentName | courseCode | courseTitle | modCode | modTitle | crédits | resultCode

Ma tentative est le suivant pour 2FN:

étudiant

idEtudiant | studentName | courseCode | modCode | resultCode

Cours

courseCode | courseTitle

Module

MODCODE | modTitle | crédits

Est-ce correct? Sinon, où vais-je me tromper et pourquoi?


Voici le 3FN:

étudiant

idEtudiant | studentName | courseCode

Cours

courseCode | courseTitle

Module

MODCODE | modTitle | crédits | courseCode

Résultats

idEtudiant | modCode | resultCode

Même chose pour cela; Est-ce correct - sinon où et pourquoi?

+0

Cette question est entièrement dénuée de sens sans connaître les dépendances des attributs – Cubic

+0

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

+1

Cette question n'appartient pas à StackOverflow, veuillez la poster sur http://dba.stackexchange.com/ –

Répondre

0

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.