Estou com um problema com o segundo formulário normal (2NF) e não consegui resolvê-lo usando o Google. Isso está me deixando louco porque sou professora e não quero ensinar coisas erradas aos meus alunos.
Vamos ter uma mesa com 5 campos.
Classificação = {StudentName, SubjectCode, SubjectName, #Exam, Grade}
As dependências são assim:
StudentName, SubjectCode, #Exam -> Grade
SubjectCode -> SubjectName
SubjectName -> SubjectCode
Portanto, a chave candidata 1 é {StudentName, SubjectCode, #Exam} e a chave candidata 2 é {StudentName, SubjectName, #Exam} .
Os atributos principais são {StudentName, SubjectCode, SubjectName, #Exam} e os atributos não principais são Grade
De acordo com a definição da segunda forma normal, um atributo não primário não pode depender de uma parte de uma chave candidata. O único atributo não primário (Grade) não depende de uma parte de uma chave candidata, portanto, esta tabela aparece em 2NF.
O problema é que acho que algo está errado (e posso estar errado). Eu acho que os assuntos deveriam ter sua própria mesa.
Classificação = {StudentName, Código da disciplina, # Exame, Nota}
Assuntos = {Código do Assunto, Nome do Assunto}
Mas o 2NF não produz isso. O 3NF trata de dependências entre atributos não primos, portanto também não produz isso. Mas parece-me que este é o resultado certo, porque não tem redundância.
Eu acho que se o atributo não primário fosse definido como "atributo que não é uma chave candidata", o 2NF produziria o resultado desejado. Mas verifiquei isso de novo e de novo e o atributo não primário é definido como "atributo que NÃO PERTENCE a uma chave candidata".
O que estou fazendo de errado?