Estou tendo uma discussão interessante com outro designer de banco de dados sobre normalização. Neste exemplo, temos uma tabela GameTitles e cada registro deve conter o ano em que o jogo foi lançado. Ele diz que a 2NF exige que tudo deva ser normalizado; portanto, para estar em conformidade, o campo ano deve ser dividido em uma tabela ReleaseYears com sua própria chave primária, referenciada pela tabela GameTitles. Eu digo que deve permanecer como um campo na própria tabela GameTitles.
Meu argumento para isso é que um ano é apenas um valor numérico não primitivo que é estático por sua própria natureza (ou seja, 2011 sempre será 2011). Devido a isso, ele serve como seu próprio identificador e não precisa de nada para fazer referência a ele, pois é o que é. Isso também introduz manutenção adicional, pois agora você precisa adicionar um novo ano à tabela apenas para fazer referência a ela. Se você preencher previamente a tabela com um grande intervalo de anos, terá registros extras que potencialmente não terão referências a eles. Isso também aumenta o tamanho do banco de dados, pois agora você possui uma tabela extra, sobrecarga de registro e a chave primária adicional para o ano em si. Se você mantiver o ano como um campo na tabela GameTitles, você eliminará toda essa manutenção adicional e despesas gerais.
Pensamentos sobre isso?
edit: destinado a postar isso no StackOverflow. Alguém pode votar para excluir ou sinalizar isso para obter atenção?