Estou um pouco confuso com a definição de 3NF.
De acordo com a Wikipédia:
A terceira forma normal (3NF) é uma forma normal usada na normalização do banco de dados. A 3NF foi originalmente definida por EF Codd em 1971. A definição de Codd afirma que uma tabela está na 3NF se e somente se ambas as condições a seguir forem válidas:
- A relação R (tabela) está na segunda forma normal (2NF)
- Todo atributo não primo de R é dependente não transitivamente de toda superchave de R.
Mas, de acordo com o livro Database System Concepts 6th Edition de Abraham Silberschatz, Henry F.Korth, S.Sudarshan :
Um esquema de relação R está na terceira forma normal (3NF) em relação a um conjunto F de dependências funcionais se, para todas as dependências funcionais em F+ da forma α → β, onde α ⊆ R e β ⊆ R, pelo menos um dos seguintes retenções:
- α → β é uma dependência funcional trivial.
- α é uma superchave para R.
- Cada atributo A em β − α está contido em uma chave candidata para R.
Além disso, de acordo com o Database Systems 6th Edition de Ramez Elmasri Shamkant B. Navathe :
Um esquema de relação R está na terceira forma normal (3NF) se, sempre que uma dependência funcional não trivial X→A ocorre em R, ou (a) X é uma superchave de R, ou (b) A é um atributo primo de R.
Depois de ler as definições acima, não tenho certeza se um esquema de relação deve estar na 2NF para estar na 3NF. Além disso, um esquema de relação precisa estar na 3NF para estar na BCNF?
As formas normais são especificadas de forma que, para qualquer forma normal, o modelo também atenda aos critérios para as formas normais de menor número. Então, sim, se o seu modelo está na 3ª forma normal, ele também está na 2ª forma normal e na 1ª forma normal.
Ao normalizar um modelo, você normalmente trabalha para resolver uma forma normal antes da próxima. Isso torna a normalização mais simples e menos propensa a erros, pois você aplica apenas algumas regras por vez. É possível que uma entidade em uma forma normal inferior também esteja em uma forma normal superior. A maioria das entidades da 3ª forma normal também estão na 4ª e 5ª forma normal.
4ª, 5ª e 6ª formas normais vão além da dependência funcional. Quando aplicável, eles simplificam ainda mais os dados, à custa de mais tabelas. Eles reduzem a redundância e aumentam a integridade dos dados.
Sim, a definição de Korth para 3NF implica 2NF.
Suponha que haja uma relação Livros
com o conjunto de dependências funcionais:
A chave candidata aqui é
{pub_id, auth_id}
.Obviamente, esta relação não está na 2NF porque
publisher_name
é dependente depub_id
, que é um subconjunto da chave candidata (portanto, não é totalmente dependente funcionalmente da única chave candidata).Agora, vamos tentar aplicar a definição de Korth para 3FN.
{pub_id}
ou{auth_id}
uma superchave.Assim, embora não existam dependências transitivas, esta relação não está na 3FN.
Além disso, se tentarmos normalizar esta relação para 3NF, seremos forçados a decompor a relação da seguinte forma:
O que é equivalente à decomposição 2NF de Books .
Ao tentar implementar 2nf e 3nf, você pode ter uma ideia melhor. Em tempo real, você não pode diferenciar entre esses dois, pois eles acontecem ao mesmo tempo. Quando você está 2nf-ing, você simplesmente não pode parar por aí e w 3nf não é ele mesmo se não tiver chaves primárias ou superchaves definidas.