web-dev-qa-db-fra.com

Normalisation avec deux clés primaires potentielles

J'ai ce qui suit STUDENT relatif à la première forme normale, où id a été identifié comme clé primaire (email ici est également unique pour tous les tuples):

STUDENT(id, email, first_name, last_name)

Je veux normaliser cette relation/tableau de telle sorte qu'il soit dans une troisième forme normale (3NF).

Les dépendances que j'ai pu identifier à partir de ce qui précède STUDENT relatif/tableau sont les suivantes

Full:

{ id } → { email }

Transitif:

{ email } → { first_name, last_name }

Voici la partie où je suis confus. J'ai identifié email comme une dépendance transitive, car il peut être identifié par la clé primaire (id) et l'attribut/colonne email peut identifier et déterminer le first_name Et last_name.

... Si je devais continuer avec cette idée, je serais éventuellement à une 3NF qui ressemble à:

[.____] STUDENT(id, email)STUDENT_INFO(email, first_name, last_name)

Toutefois, la relation/table STUDENT semble très redondante, car tout ce qu'il fait est indiqué à une autre relation/table. Mon processus de normalisation est-il correct? Ou ai-je eu la fausse dépendance de mes dépendances? Il semble que je rencontre toujours ce problème lorsque la relation/table initiale dispose de deux clés candidates qui pourraient être la clé primaire (id ou email _ Les deux pourraient identifier de manière unique chaque ligne).

3
Shnick

Voici où j'ai mal tourné:

La chose importante sur les dépendances transitives est ces deux facteurs clés:

  1. Si B dépend de A, et c dépend de B, alors c aussi dépend d'un (A → B → C)
  2. B n'est pas (ou une partie de) une clé candidate

Dans mon exemple, j'ai identifié ce qui suit comme une dépendance transitive:

{ email } → { first_name, last_name }

Cependant, ce n'est pas le cas, comme email est une clé candidate , et si nous utilisons id comme clé primaire, nous avons une dépendance complète:

{ id } → { email, first_name, last_name }
1
Shnick