1FN: Primeira Forma Normal (Atomicidade)
Para uma tabela estar na 1FN, ela deve satisfazer os seguintes critérios:
-
Atomicidade: Cada coluna deve conter valores atômicos (indivisíveis). Não podem existir conjuntos de valores ou listas em uma única célula.
-
Unicidade: Cada registro deve ser único (existência de Chave Primária).
-
Colunas Homogêneas: Os valores em uma coluna devem ser do mesmo tipo.
Exemplo de Violação (Não Atômico): Tabela de Estudantes onde a coluna Telefones armazena múltiplos números:
| ID | Nome | Telefone |
|---|---|---|
| 1 | Joao | 62 9857-9913, 62 97555-0101 |
| 2 | Maria | 61 99874-2846 |
Solução para 1FN: Separar os dados, criando uma tabela separada para telefones, relacionando com o ID do estudante:
| ID | Nome |
|---|---|
| 1 | Joao |
| 2 | Maria |
| ID_Estudante | Telefone |
|---|---|
| 1 | 62 9857-9913 |
| 1 | 62 97555-0101 |
| 2 | 61 99874-2846 |
2FN: Segunda Forma Normal (Dependência Parcial)
Para estar na 2FN, a tabela deve:
-
Estar na 1FN.
-
Não possuir Dependência Parcial.
Isso se aplica apenas a tabelas com Chaves Primárias Compostas. Todos os atributos que não são chave devem depender da totalidade da chave primária, e não apenas de uma parte dela.
Exemplo de Violação: Tabela Notas_Curso com Chave Primária Composta (ID_Aluno, ID_Curso) :
| ID_Aluno (PK) | ID_Curso (PK) | Nome_Curso | Nota |
|---|---|---|---|
| 1 | 101 | Matemática | A |
| 2 | 101 | Matemática | B |
| 1 | 102 | Física | A |
O atributo Nome_Curso depende apenas de ID_Curso (parte da chave), não da combinação ID_Aluno + ID_Curso .
Solução para 2FN: Remova a dependência parcial para uma nova tabela:
Tabela: Cursos
| ID_Curso (PK) | Nome_Curso |
|---|---|
| 101 | Matemática |
| 102 | Física |
Tabela: Notas
| ID_Aluno (PK) | ID_Curso (PK) | Nota |
|---|---|---|
| 1 | 101 | A |
| 2 | 101 | B |
| 1 | 102 | A |
3FN: Terceira Forma Normal (Dependência Transitiva)
Para estar na 3FN, a tabela deve:
-
Estar na 2FN.
-
Não possuir Dependência Transitiva.
Atributos que não são chave devem depender apenas da chave primária. Nenhum atributo não-chave deve depender de outro atributo não-chave.
Exemplo de Violação: Tabela Pedidos com Chave Primária ID_Pedido :
| ID_Pedido (PK) | Valor_Total | ID_Cliente | Cidade_Cliente |
|---|---|---|---|
| 500 | 100.00 | 10 | São Paulo |
| 501 | 250.00 | 10 | São Paulo |
Aqui, Cidade_Cliente depende de ID_Cliente . Mas ID_Cliente não é a chave primária da tabela Pedidos. A dependência é: ID_Pedido -> ID_Cliente -> Cidade_Cliente . Isso é transitivo.
Solução para 3FN: Mova os dados transitivos para sua própria tabela.
| ID_Cliente (PK) | Cidade_Cliente |
|---|---|
| 10 | São Paulo |
| ID_Pedido (PK) | Valor_Total | ID_Cliente (FK) |
|---|---|---|
| 500 | 100.00 | 10 |
| 501 | 250.00 | 10 |
Resumo
- 1FN: Eliminar grupos de repetição. Garante atomicidade.
- 2FN: Eliminar dependências parciais (atributos dependendo de parte de uma chave composta).
- 3FN: Eliminar dependências transitivas (atributos dependendo de outros atributos que não são a chave).