Mam problem z drugą normalną formą (2NF) i nie udało mi się go rozwiązać za pomocą Google. Doprowadza mnie do szału, ponieważ jestem nauczycielem i nie chcę uczyć niewłaściwych rzeczy dla moich uczniów.
Zróbmy stół z 5 polami.
Oceny = {StudentName, SubjectCode, SubjectName, #Exam, Grade}
Zależności są w ten sposób:
StudentName, SubjectCode, #Exam -> Grade
SubjectCode -> SubjectName
SubjectName -> SubjectCode
Dlatego kluczem kandydata 1 jest {StudentName, SubjectCode, #Exam}, a kluczem kandydata 2 jest {StudentName, SubjectName, #Exam} .
Główne atrybuty to {StudentName, SubjectCode, SubjectName, #Exam}, a atrybuty inne niż Prime mają ocenę
Zgodnie z definicją drugiej postaci normalnej atrybut niepierwotny nie może zależeć od części klucza kandydującego. Jedyny atrybut niepierwotny (klasa) nie zależy od części klucza kandydującego, więc ta tabela wydaje się w 2NF.
Problem polega na tym, że myślę, że coś jest nie tak (i mogę się mylić). Myślę, że badani powinni mieć własny stół.
Oceny = {StudentName, kod przedmiotu, #Exam, ocena}
Tematy = {kod podmiotu, nazwa podmiotu}
Ale 2NF tego nie produkuje. 3NF dotyczy zależności między atrybutami niepierwotnymi, więc też tego nie produkuje. Wydaje mi się jednak, że jest to właściwy wynik, ponieważ nie ma nadmiarowości.
Wydaje mi się, że gdyby atrybut niepierwotny zdefiniowano jako „atrybut, który nie jest kluczem kandydującym”, 2NF dałoby pożądany wynik. Ale sprawdzałem to raz po raz i atrybut inny niż podstawowy jest zdefiniowany jako „atrybut, który nie należy do klucza kandydującego”.
Co ja robię źle?