A Primeira Forma Normal (First Normal Form, 1NF) é o estágio inicial da normalização de banco de dados, que coloca restrições rígidas na estrutura das tabelas. Uma tabela está em 1NF se:
- Todos os dados são atômicos. Cada valor em uma célula da tabela deve ser indivisível. Adeus, "listas em uma célula só"! No banco de dados, isso não rola.
- Cada linha é única. Ou seja, a tabela precisa ter uma chave primária (Primary Key) ou um identificador único.
- Não existem grupos de dados repetidos. Valores da mesma entidade não devem aparecer na mesma coluna.
Falando de boa, imagina que a tabela do banco de dados é o seu quarto, e os valores atômicos são objetos separados: lâmpada, mesa, livro. Se o quarto tá bagunçado (tipo, tudo jogado num canto), você não acha a lâmpada ou descobre rapidinho se tem uma mesa reserva. A normalização ajuda a "colocar tudo no seu lugar".
Exemplo de violação da 1NF
Imagina que a gente tem uma tabela de estudantes, onde guardamos info sobre os cursos que eles fazem:
| student_id | name | courses |
|---|---|---|
| 1 | Maria | "Matemática, Física" |
| 2 | Rob | "Biologia, Química" |
Por que essa estrutura é ruim? Os cursos (coluna courses) estão separados por vírgula numa célula só. Isso significa que, se a gente quiser, por exemplo, achar todos os estudantes que estudam física, a query vai virar um pesadelo: vai ter que fazer umas transformações de texto cabulosas. E se um estudante quiser tirar física da lista — já era, mais um problema. Esses dados não são atômicos, o que quebra a regra principal da 1NF.
Como deixar a tabela em 1NF?
Pra resolver, a gente separa os dados em linhas diferentes, onde cada valor da tabela é atômico:
| student_id | name | course |
|---|---|---|
| 1 | Maria | Matemática |
| 1 | Maria | Física |
| 2 | Rob | Biologia |
| 2 | Rob | Química |
Agora tá tudo certo. Transformamos a tabela pra que cada valor em cada célula seja indivisível. Isso segue os princípios da 1NF.
Exemplo detalhado de violação e correção da 1NF
Vamos supor que temos uma tabela de pedidos de uma loja online:
| order_id | customer_name | items |
|---|---|---|
| 1001 | Otto Lin | "Notebook, Mouse, Teclado" |
| 1002 | Anna Song | "Smartphone, Capa" |
Obviamente, aqui o items tem vários valores separados por vírgula, o que quebra a 1NF.
Pra deixar os dados em 1NF, a gente guarda uma linha pra cada item do pedido:
| order_id | customer_name | item |
|---|---|---|
| 1001 | Otto Lin | Notebook |
| 1001 | Otto Lin | Mouse |
| 1001 | Otto Lin | Teclado |
| 1002 | Anna Song | Smartphone |
| 1002 | Anna Song | Capa |
Agora a estrutura da tabela segue os princípios da 1NF. Cada pedido e item estão em linhas separadas, e os valores são atômicos.
Adicionando uma chave primária
Depois de transformar a tabela, é importante adicionar um identificador único (chave primária) pra cada linha, pra garantir que são únicas. No exemplo acima, dá pra usar a combinação de order_id e item como chave primária composta. Mas na vida real, normalmente criam um campo separado id.
| id | order_id | customer_name | item |
|---|---|---|---|
| 1 | 1001 | Otto Lin | Notebook |
| 2 | 1001 | Otto Lin | Mouse |
| 3 | 1001 | Otto Lin | Teclado |
| 4 | 1002 | Anna Song | Smartphone |
| 5 | 1002 | Anna Song | Capa |
Exercício prático
Você tem uma tabela de estudantes com as matérias que eles estudam, tudo junto numa célula só:
| student_id | name | subjects |
|---|---|---|
| 1 | Polly | "Matemática, Química" |
| 2 | Peter | "Física, Informática" |
Transforme a tabela pra ficar de acordo com a 1NF.
Depois da transformação, a tabela deve ficar assim:
| student_id | name | subject |
|---|---|---|
| 1 | Polly | Matemática |
| 1 | Polly | Química |
| 2 | Peter | Física |
| 2 | Peter | Informática |
Erros mais comuns ao trabalhar com 1NF
Quando você mexe com banco de dados, as violações da 1NF podem aparecer nessas situações:
- Guardar listas ou arrays direto na tabela. Esse é o erro mais comum.
- Falta de identificador único pras linhas (chave primária). Isso deixa sua tabela vulnerável a dados duplicados.
- Usar várias colunas pra guardar a mesma informação. Tipo, "course_1", "course_2", "course_3" — em vez de uma estrutura certa.
Fica ligado nesses pontos e seu banco de dados vai seguir a primeira forma normal.
Aplicação prática da 1NF
Em projetos reais, a 1NF é fundamental. Por exemplo:
- Em apps de gestão de clientes (CRM), os dados dos clientes e suas ações precisam ser atômicos. Isso facilita análise e busca.
- Em lojas online, a 1NF é usada pra guardar info de pedidos, produtos e clientes de forma eficiente.
- Em sistemas bancários, os dados dos clientes, contas e transações têm que ser atômicos, pra não misturar operações diferentes.
Seguir os princípios da 1NF ajuda a criar bancos de dados que aguentam altas cargas e continuam fáceis de usar. Tudo ótimo, mas agora apareceu duplicação de dados. Por isso, a gente vai pra Segunda Forma Normal (2NF), onde fica mais claro como resolver dependências parciais nas tabelas.
Por que é importante seguir a Primeira Forma Normal (1NF)? Imagina que você guarda dados numa tabela onde uma célula pode ter vários valores — tipo, uma lista de produtos comprados por um cliente. Assim, fica difícil acessar os dados: tentar achar todo mundo que comprou "Teclado" vira um sofrimento. E se precisar mudar ou apagar parte da info, é fácil cometer erro. Quando os dados são atômicos — ou seja, cada campo tem só um valor — trabalhar com eles fica mais seguro e simples. Além disso, essas tabelas são mais fáceis de escalar, atualizar e reorganizar quando precisar.
GO TO FULL VERSION