Ho un problema con il secondo modulo normale (2NF) e non sono stato in grado di risolverlo utilizzando Google. Mi sta facendo impazzire perché sono un insegnante e non voglio insegnare cose sbagliate ai miei studenti.
Diamo una tabella con 5 campi.
Gradings = {StudentName, SubjectCode, SubjectName, #Exam, Grade}
Le dipendenze sono in questo modo:
StudentName, SubjectCode, #Exam -> Grade
SubjectCode -> SubjectName
SubjectName -> SubjectCode
Pertanto, la chiave candidata 1 è {StudentName, SubjectCode, #Exam} e la chiave candidata 2 è {StudentName, SubjectName, #Exam} .
Gli attributi primi sono {StudentName, SubjectCode, SubjectName, #Exam} e gli attributi non primi sono Grade
Secondo la definizione di seconda forma normale, un attributo non primo non può dipendere da una parte di una chiave candidata. L'unico attributo non primo (Grado) non dipende da una parte di una chiave candidata, quindi questa tabella sembra in 2NF.
Il problema è che penso che qualcosa non vada (e potrei sbagliarmi). Penso che i soggetti dovrebbero avere il proprio tavolo.
Gradings = {StudentName, Subject Code, #Exam, Grade}
Subject = {Subject Code, SubjectName}
Ma 2NF non produce questo. 3NF riguarda le dipendenze tra attributi non primi quindi non produce neanche questo. Ma mi sembra che questo sia il risultato giusto, perché non ha ridondanza.
Immagino che se l'attributo non primo fosse definito come "attributo che non è una chiave candidata", 2NF produrrebbe il risultato desiderato. Ma l'ho verificato più volte e l'attributo non primo è definito come "attributo che NON APPARTIENE a una chiave candidata".
Che cosa sto facendo di sbagliato?