1FN: Primeira Forma Normal (Atomicidade)

Para uma tabela estar na 1FN, ela deve satisfazer os seguintes critérios:

  1. Atomicidade: Cada coluna deve conter valores atômicos (indivisíveis). Não podem existir conjuntos de valores ou listas em uma única célula.

  2. Unicidade: Cada registro deve ser único (existência de Chave Primária).

  3. 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:

IDNomeTelefone
1Joao62 9857-9913, 62 97555-0101
2Maria61 99874-2846

Solução para 1FN: Separar os dados, criando uma tabela separada para telefones, relacionando com o ID do estudante:

IDNome
1Joao
2Maria
ID_EstudanteTelefone
162 9857-9913
162 97555-0101
261 99874-2846

2FN: Segunda Forma Normal (Dependência Parcial)

Para estar na 2FN, a tabela deve:

  1. Estar na 1FN.

  2. 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_CursoNota
1101MatemáticaA
2101MatemáticaB
1102FísicaA

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
101Matemática
102Física

Tabela: Notas

ID_Aluno (PK)ID_Curso (PK)Nota
1101A
2101B
1102A

3FN: Terceira Forma Normal (Dependência Transitiva)

Para estar na 3FN, a tabela deve:

  1. Estar na 2FN.

  2. 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_TotalID_ClienteCidade_Cliente
500100.0010São Paulo
501250.0010Sã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
10São Paulo
ID_Pedido (PK)Valor_TotalID_Cliente (FK)
500100.0010
501250.0010

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).