Imagine trabalhar com um banco de dados enorme e não estruturado, repleto de informações repetidas e redundantes. Cada atualização ou exclusão se torna um desastre em potencial, com risco de erros e inconsistências. A terceira forma normal (3NF) é um método comprovado de normalização de banco de dados para evitar esse caos. A implementação do 3NF limpa sua estrutura de dados, garantindo que ela seja eficiente, organizada e livre de redundâncias desnecessárias.
Neste artigo, exploraremos como o 3NF funciona, por que ele é valioso e como você pode colocá-lo em prática. Também compararemos o 3NF com outras formas e aprenderemos quando usar cada uma delas. Todos podem se beneficiar ao aprender mais sobre essas estruturas, mas esse conhecimento é particularmente valioso se você for um designer de banco de dados ou cientista de dados, pois pode simplificar significativamente seu trabalho e manter seus bancos de dados confiáveis. Se você estiver interessado no design de banco de dados como um todo, dê uma olhada no nosso curso completo de Design de banco de dados.
A terceira forma normal é um conceito fundamental da normalização de bancos de dados que remove dependências indesejadas. O 3NF se baseia na primeira forma normal (1NF) e na segunda forma normal (2NF), o que significa que ele herda suas regras: O 1NF exige valores atômicos (indivisíveis) em cada célula, e o 2NF remove dependências parciais de uma chave primária composta. O 3NF vai além, removendo as dependências transitivas, uma situação em que os atributos que não são chaves dependem indiretamente da chave primária.
Ao se concentrar nisso, o 3NF garante que cada coluna sem chave em uma tabela esteja diretamente vinculada à chave primária e nada mais. Em termos mais práticos, o 3NF ajuda a minimizar a redundância e a evitar anomalias ao inserir, atualizar ou excluir dados.
Na década de 1970, Edgar F. Codd introduziu o 3NF para formalizar as condições para obter uma estrutura de banco de dados totalmente normalizada. Uma reformulação feita por Carlo Zaniolo alguns anos depois forneceu uma explicação mais clara da diferença entre a 3NF "clássica" e a forma normal Boyce-Codd (BCNF), mais restritiva. Não se preocupe muito com o BCNF por enquanto, pois voltaremos a ele mais adiante.
Então, o que exatamente é necessário para você alcançar o 3NF? Para que uma tabela se qualifique, ela precisa atender a algumas condições:
- Esteja em 2NF: Isso significa que ele já é atômico, sem grupos repetidos e sem dependências parciais de nenhuma chave composta.

O 3NF inclui o 2NF e o 1NF. Imagem do autor
- Não há dependências transitivas: Essa regra é fundamental. Em uma tabela 3NF, qualquer coluna que não seja de chave primária deve depender exclusivamente da chave primária, não indiretamente por meio de outra coluna que não seja de chave.
Vamos dar uma olhada no que isso significa na prática.
Decompondo tabelas para obter 3NF
Vamos examinar o processo de decomposição de tabelas para chegar a 3NF. Usaremos alguns dados de amostra dos cursos do DataCamp para ilustrar cada etapa.
Etapa 1: Identificar dependências transitivas
Para começar, procuraremos quaisquer atributos em uma tabela que dependam indiretamente da chave primária. Como regra geral, se algum atributo depender de algo que não seja a chave primária, isso indica umadependência transitiva . Esse é um sinal de que talvez seja hora de dividir sua mesa.
Dê uma olhada nas três tabelas abaixo. Qual deles tem uma dependência transitiva?
Tabela 1: Curso
Tabela 2: Instrutor
| ID do instrutor | Nome do instrutor | Especialização |
|---|
| 1 | Sarah Johnson | Ciência de dados |
| 2 | Tom Williams | Aprendizado de máquina |
| 3 | Emily Brown | Python |
Tabela 3: Inscrições
A resposta é... Tabela 3!
Nessa tabela, o nome do curso depende do ID do curso, mas não diretamente do ID de inscrição (a chave primária). Essa dependência indireta tornao Course Name uma dependência transitiva.
Etapa 2: Separar os dados em novas tabelas
Para abordar a dependência transitiva, dividiremos a Tabela 1 em duas tabelas. Cada tabela se concentrará em dados diretamente dependentes.
Tabela de matrículas revisada
| ID de registro | Nome do aluno | ID do curso |
|---|
| 1001 | Alice Smith | 201 |
| 1002 | Bob Green | 202 |
| 1003 | Charlie Blue | 201 |
Tabela de cursos
Agora, cada tabela contém apenas informações que dependem diretamente de sua chave primária: ID do curso é agora a chave primária para Nome do curso na seção Cursos e o ID de matrícula é a chave primária na tabela Inscrições tabela.
Com essa decomposição, as tabelas agora atendem aos requisitos de 3NF, eliminando a redundância e garantindo que cada tabela armazene somente informações diretamente relevantes.
Se você quiser colocar a mão na massa e criar seus próprios bancos de dados, dê uma olhada em nosso curso Criando bancos de dados PostgreSQL. Se você for um pouco mais avançado, poderá experimentar o Introduction to Data Modeling in Snowflake, que aborda ideias como entidade-relacionamento e modelagem dimensional.
Então, por que você se esforça tanto para chegar ao 3NF? Aqui estão as principais vantagens:
- Integridade de dados aprimorada: Ao eliminar as dependências transitivas, o 3NF ajuda a garantir que as atualizações e exclusões não resultem em dados conflitantes ou desatualizados nas tabelas.
- Redundância reduzida: Menos redundância significa que a manutenção do seu banco de dados é mais fácil e o uso do armazenamento é reduzido.
- Manutenção de dados mais simples: Manter informações semelhantes em tabelas dedicadas facilita a atualização de registros sem a necessidade de localizar entradas redundantes.
Dito isso, embora as estruturas 3NF ofereçam suporte à precisão dos dados, elas também podem levar a dados mais segmentados, o que, às vezes, torna as consultas complexas mais lentas devido a uniões de tabelas adicionais. Nos casos em que a necessidade de velocidade supera a necessidade de normalização, BCNF ou 4NF podem ser opções mais práticas.
Vamos dar uma olhada nas diferenças de forma.
Aqui está uma tabela de comparação para ajudar você a entender os requisitos de 1NF, 2NF e 3NF.
| Recurso | 1NF | 2NF | 3NF |
|---|
| Dados atômicos | ✅ | ✅ | ✅ |
| Sem dependências parciais | ❌ | ✅ | ✅ |
| Sem dependências transitivas | ❌ | ❌ | ✅ |
BCNF é uma forma "mais rigorosa" de 3NF que elimina ainda mais as anomalias que surgem com a sobreposição de chaves candidatas. Ele pode ser especialmente útil em casos complexos em que o 3NF sozinho não elimina totalmente as dependências. O BCNF se aplica quando um atributo não primo depende de um atributo que faz parte de uma chave candidata composta. Sei que isso parece complexo, então vamos explicar isso com um exemplo.
Estrutura atual (em 3NF)
Após a decomposição para obter 3NF, tínhamos essas duas tabelas:
Tabela de registros
| ID de registro | Nome do aluno | ID do curso |
|---|
| 1001 | Alice Smith | 201 |
| 1002 | Bob Green | 202 |
| 1003 | Charlie Blue | 201 |
Tabela de cursos
Nessa estrutura, cada tabela está em 3NF, sem dependências transitivas, e os dados são normalizados adequadamente.
Introdução de um novo requisito
Agora, vamos adicionar um novo atributo aos Cursos: a Sala de aula na qual cada curso é realizado. Esse novo atributo pode resultar em um cenário que exige BCNF.
Tabela de cursos atualizada (3NF)
Aqui, o ID do curso ainda é a chave primária, e todos os outros atributos dependem diretamente dele. Mas vamos supor que haja uma nova regra segundo a qual cada sala de aula pode conter apenas uma disciplina por vez. Suponhamos também que onome do curso "SQL Fundamentals" possa ser oferecido com diferentes IDs de curso (como 201, 204, etc.), se forem programados em horários diferentes. Nesse caso, cada oferta de "SQL Fundamentals" ainda seria realizada na "Sala 101", independentemente doID do curso específico . Como resultado,o Course Name também determina exclusivamente a sala de aula.
Isso significa que agora temos duas chaves candidatas:
- ID do curso
- Nome do curso
Com as duas chaves candidatas, agora temos um problema que o 3NF não resolve: Sala de aula Depende de Nome do curso em vez de apenas ID do curso.
Aplicação do BCNF
Para eliminar esse problema de dependência, precisaremos decompor ainda mais os Cursos em duas tabelas separadas que se alinham melhor com a BCNF:
- Um novo Cursos que inclui apenas o ID do curso e o Nome do curso.
- A CourseDetails que armazena o Nome do curso e Sala de aula associação.
Veja como isso se parece:
Tabela de cursos revisada (BCNF)
Tabela CourseDetails (BCNF)
Com essa nova estrutura, cada tabela satisfaz as condições BCNF:
- Nos Cursos você pode ver a tabela, ID do curso é a chave primária, e todos os atributos dependem exclusivamente dela.
- Na seção CourseDetails você pode ver a tabela, Nome do curso é a chave primária, e Sala de aula depende apenas de Nome do curso.
Essa configuração elimina qualquer problema de dependência causado pela sobreposição de chaves candidatas, garantindo uma estrutura estritamente normalizada.
Conclusão
A terceira forma normal é uma ferramenta valiosa para os projetistas de bancos de dados que desejam manter os dados limpos, consistentes e livres de dependências problemáticas. Com o 3NF, a integridade dos dados é aprimorada, tornando o gerenciamento mais fácil e reduzindo a redundância. Lembre-se de que, embora o 3NF funcione bem na maioria das situações, os bancos de dados mais complexos podem se beneficiar de formas adicionais, como BCNF ou 4NF.
Se você achou este artigo útil, considere dar o próximo passo obtendo nossa certificação SQL Associate. É uma ótima maneira de validar suas habilidades de gerenciamento de banco de dados e SQL e demonstrar sua experiência para possíveis empregadores!
Imagine trabalhar com um banco de dados enorme e não estruturado, repleto de informações repetidas e redundantes. Cada atualização ou exclusão se torna um desastre em potencial, com risco de erros e inconsistências. A terceira forma normal (3NF) é um método comprovado de normalização de banco de dados para evitar esse caos. A implementação do 3NF limpa sua estrutura de dados, garantindo que ela seja eficiente, organizada e livre de redundâncias desnecessárias.
Neste artigo, exploraremos como o 3NF funciona, por que ele é valioso e como você pode colocá-lo em prática. Também compararemos o 3NF com outras formas e aprenderemos quando usar cada uma delas. Todos podem se beneficiar ao aprender mais sobre essas estruturas, mas esse conhecimento é particularmente valioso se você for um designer de banco de dados ou cientista de dados, pois pode simplificar significativamente seu trabalho e manter seus bancos de dados confiáveis. Se você estiver interessado no design de banco de dados como um todo, dê uma olhada no nosso curso completo de Design de banco de dados.
Definição da terceira forma normal (3NF)
A terceira forma normal é um conceito fundamental da normalização de bancos de dados que remove dependências indesejadas. O 3NF se baseia na primeira forma normal (1NF) e na segunda forma normal (2NF), o que significa que ele herda suas regras: O 1NF exige valores atômicos (indivisíveis) em cada célula, e o 2NF remove dependências parciais de uma chave primária composta. O 3NF vai além, removendo as dependências transitivas, uma situação em que os atributos que não são chaves dependem indiretamente da chave primária.
Ao se concentrar nisso, o 3NF garante que cada coluna sem chave em uma tabela esteja diretamente vinculada à chave primária e nada mais. Em termos mais práticos, o 3NF ajuda a minimizar a redundância e a evitar anomalias ao inserir, atualizar ou excluir dados.
Na década de 1970, Edgar F. Codd introduziu o 3NF para formalizar as condições para obter uma estrutura de banco de dados totalmente normalizada. Uma reformulação feita por Carlo Zaniolo alguns anos depois forneceu uma explicação mais clara da diferença entre a 3NF "clássica" e a forma normal Boyce-Codd (BCNF), mais restritiva. Não se preocupe muito com o BCNF por enquanto, pois voltaremos a ele mais adiante.
Entendendo as condições da terceira forma normal
Então, o que exatamente é necessário para você alcançar o 3NF? Para que uma tabela se qualifique, ela precisa atender a algumas condições:
O 3NF inclui o 2NF e o 1NF. Imagem do autor
Vamos dar uma olhada no que isso significa na prática.
Decompondo tabelas para obter 3NF
Vamos examinar o processo de decomposição de tabelas para chegar a 3NF. Usaremos alguns dados de amostra dos cursos do DataCamp para ilustrar cada etapa.
Etapa 1: Identificar dependências transitivas
Para começar, procuraremos quaisquer atributos em uma tabela que dependam indiretamente da chave primária. Como regra geral, se algum atributo depender de algo que não seja a chave primária, isso indica umadependência transitiva . Esse é um sinal de que talvez seja hora de dividir sua mesa.
Dê uma olhada nas três tabelas abaixo. Qual deles tem uma dependência transitiva?
Tabela 1: Curso
Tabela 2: Instrutor
Tabela 3: Inscrições
A resposta é... Tabela 3!
Nessa tabela, o nome do curso depende do ID do curso, mas não diretamente do ID de inscrição (a chave primária). Essa dependência indireta tornao Course Name uma dependência transitiva.
Etapa 2: Separar os dados em novas tabelas
Para abordar a dependência transitiva, dividiremos a Tabela 1 em duas tabelas. Cada tabela se concentrará em dados diretamente dependentes.
Tabela de matrículas revisada
Tabela de cursos
Agora, cada tabela contém apenas informações que dependem diretamente de sua chave primária: ID do curso é agora a chave primária para Nome do curso na seção Cursos e o ID de matrícula é a chave primária na tabela Inscrições tabela.
Com essa decomposição, as tabelas agora atendem aos requisitos de 3NF, eliminando a redundância e garantindo que cada tabela armazene somente informações diretamente relevantes.
Se você quiser colocar a mão na massa e criar seus próprios bancos de dados, dê uma olhada em nosso curso Criando bancos de dados PostgreSQL. Se você for um pouco mais avançado, poderá experimentar o Introduction to Data Modeling in Snowflake, que aborda ideias como entidade-relacionamento e modelagem dimensional.
Vantagens e limitações do uso da terceira forma normal
Então, por que você se esforça tanto para chegar ao 3NF? Aqui estão as principais vantagens:
Dito isso, embora as estruturas 3NF ofereçam suporte à precisão dos dados, elas também podem levar a dados mais segmentados, o que, às vezes, torna as consultas complexas mais lentas devido a uniões de tabelas adicionais. Nos casos em que a necessidade de velocidade supera a necessidade de normalização, BCNF ou 4NF podem ser opções mais práticas.
Comparação: Primeira, segunda, terceira e BC formas normais
Vamos dar uma olhada nas diferenças de forma.
Tabela de comparação: primeira, segunda e terceira formas normais
Aqui está uma tabela de comparação para ajudar você a entender os requisitos de 1NF, 2NF e 3NF.
BCNF é uma forma "mais rigorosa" de 3NF que elimina ainda mais as anomalias que surgem com a sobreposição de chaves candidatas. Ele pode ser especialmente útil em casos complexos em que o 3NF sozinho não elimina totalmente as dependências. O BCNF se aplica quando um atributo não primo depende de um atributo que faz parte de uma chave candidata composta. Sei que isso parece complexo, então vamos explicar isso com um exemplo.
Estrutura atual (em 3NF)
Após a decomposição para obter 3NF, tínhamos essas duas tabelas:
Tabela de registros
Tabela de cursos
Nessa estrutura, cada tabela está em 3NF, sem dependências transitivas, e os dados são normalizados adequadamente.
Introdução de um novo requisito
Agora, vamos adicionar um novo atributo aos Cursos: a Sala de aula na qual cada curso é realizado. Esse novo atributo pode resultar em um cenário que exige BCNF.
Tabela de cursos atualizada (3NF)
Aqui, o ID do curso ainda é a chave primária, e todos os outros atributos dependem diretamente dele. Mas vamos supor que haja uma nova regra segundo a qual cada sala de aula pode conter apenas uma disciplina por vez. Suponhamos também que onome do curso "SQL Fundamentals" possa ser oferecido com diferentes IDs de curso (como 201, 204, etc.), se forem programados em horários diferentes. Nesse caso, cada oferta de "SQL Fundamentals" ainda seria realizada na "Sala 101", independentemente doID do curso específico . Como resultado,o Course Name também determina exclusivamente a sala de aula.
Isso significa que agora temos duas chaves candidatas:
Com as duas chaves candidatas, agora temos um problema que o 3NF não resolve: Sala de aula Depende de Nome do curso em vez de apenas ID do curso.
Aplicação do BCNF
Para eliminar esse problema de dependência, precisaremos decompor ainda mais os Cursos em duas tabelas separadas que se alinham melhor com a BCNF:
Veja como isso se parece:
Tabela de cursos revisada (BCNF)
Tabela CourseDetails (BCNF)
Essa configuração elimina qualquer problema de dependência causado pela sobreposição de chaves candidatas, garantindo uma estrutura estritamente normalizada.
Conclusão
A terceira forma normal é uma ferramenta valiosa para os projetistas de bancos de dados que desejam manter os dados limpos, consistentes e livres de dependências problemáticas. Com o 3NF, a integridade dos dados é aprimorada, tornando o gerenciamento mais fácil e reduzindo a redundância. Lembre-se de que, embora o 3NF funcione bem na maioria das situações, os bancos de dados mais complexos podem se beneficiar de formas adicionais, como BCNF ou 4NF.
Se você achou este artigo útil, considere dar o próximo passo obtendo nossa certificação SQL Associate. É uma ótima maneira de validar suas habilidades de gerenciamento de banco de dados e SQL e demonstrar sua experiência para possíveis empregadores!