Prowadzę interesującą dyskusję z innym projektantem bazy danych na temat normalizacji. W tym przykładzie mamy tabelę GameTitles i każdy rekord musi zawierać rok, w którym gra została wydana. Mówi, że 2NF nakazuje znormalizować wszystko, więc aby zachować zgodność, pole roku należy podzielić na tabelę ReleaseYears z własnym kluczem podstawowym, do którego odwołuje się tabela GameTitles. Mówię, że powinno pozostać jako pole na samym stole GameTitles.
Moim argumentem za tym jest to, że rok jest po prostu nieprymitywną wartością liczbową, która z natury jest statyczna (tj. 2011 zawsze będzie 2011). Z tego powodu służy jako własny identyfikator i nie potrzebuje niczego, aby się do niego odwoływać, ponieważ jest tym, czym jest. Wprowadza to również dodatkowe czynności konserwacyjne, ponieważ teraz musisz dodać nowy rok do tabeli, aby się do niego odwołać. Jeśli wypełnisz tabelę szerokim zakresem lat, masz dodatkowe rekordy, które potencjalnie nie będą miały do nich odniesień. Zwiększa to również rozmiar bazy danych, ponieważ masz teraz dodatkową tabelę, narzut rekordów i dodatkowy klucz podstawowy dla samego roku. Jeśli utrzymasz rok jako pole na stole GameTitles, wyeliminujesz wszystkie te dodatkowe czynności konserwacyjne i koszty ogólne.
Myśli na ten temat?
edit: Chcę opublikować to na StackOverflow. Czy ktoś może zagłosować za usunięciem tego lub oznaczeniem go jako uwagi?