1NF é o mais básico dos formulários normais - cada célula de uma tabela deve conter apenas uma informação e não pode haver linhas duplicadas.
2NF e 3NF são todos dependentes da chave primária. Lembre-se de que uma chave primária pode ser composta de várias colunas. Como Chris disse em sua resposta:
Os dados dependem da tecla [1NF], da tecla inteira [2NF] e nada além da tecla [3NF] (então, me ajude a Codd ).
2NF
Digamos que você tenha uma tabela contendo os cursos realizados em um determinado semestre e tenha os seguintes dados:
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
Isso não está no 2NF , porque a quarta coluna não depende de toda a chave - mas apenas de uma parte dela. O nome do curso depende do ID do curso, mas não tem nada a ver com o semestre em que ele foi realizado. Assim, como você pode ver, temos informações duplicadas - várias linhas nos informando que o IT101 está programando e o IT102 é Databases. Então, corrigimos isso movendo o nome do curso para outra tabela, em que CourseID é a chave INTIRE.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Sem redundância!
3NF
Ok, digamos que também adicionamos o nome do professor do curso e alguns detalhes sobre eles no RDBMS:
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
Agora, espero que seja óbvio que o TeacherName depende do TeacherID - portanto, isso não está no 3NF . Para consertar isso, fazemos o mesmo que fizemos no 2NF - retire o campo TeacherName dessa tabela e coloque-o por conta própria, que possui o TeacherID como a chave.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Sem redundância !!
Uma coisa importante a lembrar é que, se algo não está em 1NF, também não está em 2NF ou 3NF. Assim, cada forma normal adicional requer tudo o que as formas normais mais baixos tinha, além de algumas condições adicionais, que devem todos ser cumpridas.
Eu nunca tive uma boa memória de palavras exatas, mas na minha classe de banco de dados, acho que o professor sempre dizia algo como:
fonte
The data depends on the key [1NF], nothing but the key [3NF]
? Por favor, não nos confunda, pois uma resposta sentenciosa não esclarece a resposta, mas confunde os visitantes!Aqui está uma resposta rápida, reconhecidamente massacrada , mas em uma frase:
1NF: Sua tabela está organizada como um conjunto não ordenado de dados e não há colunas repetidas.
2NF: você não repete dados em uma coluna da sua tabela por causa de outra coluna.
3NF: Cada coluna da sua tabela se refere apenas à chave da sua tabela - você não teria uma coluna em uma tabela que descreva outra coluna na sua tabela que não seja a chave.
Para mais detalhes, consulte a Wikipedia ...
fonte
1NF: Apenas um valor por coluna
2NF: Todas as colunas de chave não primária na tabela devem depender de toda a chave primária.
3NF: Todas as colunas de chave não primária na tabela devem depender DIRETAMENTE de toda a chave primária.
Eu escrevi um artigo com mais detalhes aqui
fonte