Bem-vindo, aluno(a)! Nesta lição, abordaremos um conceito muito importante para a arquitetura de banco de dados, que é a ideia de normalização de dados. De maneira simples, compreenderemos como manipular e organizar os dados de maneira que as nossas operações, como inserção, exclusão e atualização não causem nenhum tipo de efeito negativo ou anomalias.
Para se ter um bom conhecimento de banco de dados, não basta apenas saber como criar um banco de dados, os tipos de atributos, analisar requisitos ou mesmo comandos de SQL, é necessário entender que armazenar dados de uma aplicação requer muito mais que estes conceitos.
Um banco de dados bem modelado e normalizado é uma das partes muito importante na construção de um novo sistema. O processo de normalização ajuda-nos a evitar diversos problemas visto que, se os dados não receberem a devida atenção, podem comprometer todo o desenvolvimento do sistema. Por outro lado, um banco bem modelado entrega qualidade nas informações, segurança e simplicidade em processos de migração, além de facilitar que novos desenvolvedores compreendam a estrutura da base.
Como um (a) estudante de desenvolvimento de sistemas, você se deparou com alguns tópicos muito importantes de sistemas de gerenciamento de banco de dados, e um deles é o que estudaremos nesta aula de normalização. A normalização é um tópico comum em entrevistas de emprego de grandes empresas do ramo da tecnologia, de modo especial, para vagas de DBA e Ciência de Dados. Deste modo, se você almeja seguir esta carreira, esse tópico será de grande valia.
Antes de iniciar o tópico principal, lembraremos um pouco da evolução dos sistemas de banco de dados. Anteriormente, o gerenciamento do sistema de arquivos era usado onde os dados eram armazenados em termos de arquivos. O gerenciamento do sistema de arquivos não possui protocolos para redundância de dados, inconsistência de dados, simultaneidade de usuários, segurança e pesquisa de dados dos arquivos. Assim, os sistemas de gerenciamento de banco de dados vieram à tona onde os dados estruturados são armazenados em termos de tabelas e fornece uma maneira sistemática de criar e gerenciar bancos de dados. Hoje em dia, é muito fácil para os usuários armazenar, processar e analisar seus dados.
A Normalização do Banco de Dados é uma técnica sistemática de organizar os dados no banco de dados de forma que os protocolos mencionados anteriormente sejam atendidos, eliminando a redundância de dados. Na Normalização, decompomos as tabelas em várias tabelas para remover a redundância de dados e as anomalias indesejadas.
Segundo Cardoso e Cardoso (2012), a normalização de dados consiste em apresentar uma série de etapas, que, ao final, indica um modelo de dados sem redundâncias. Este procedimento é realizado identificando anomalias nas relações dos dados, decompondo-as em relações melhor estruturadas. Conforme definem Elmasri e Navathe (2011), o processo de normalização compreende o uso de um conjunto de regras chamadas formas normais.
Ok, agora você deve estar se perguntando “o que são formas normais”? São passos e regras que devemos seguir para poder dizer que a nossa base de dados não possui anomalias, se satisfazemos as regras da primeira fase, podemos dizer que o nosso banco está na primeira forma normal, caso o banco respeite todas as regras da segunda e terceira forma, então, ele está na terceira forma normal.
A primeira parte da normalização é denominada 1FN (primeira forma normal). Nesta primeira fase, buscamos eliminar a redundância de dados, isto é, eliminar dados repetidos ou aninhados. Em outras palavras, podemos definir que a primeira forma normal não admite repetições ou campos que tenham mais que um valor. Vamos analisar um exemplo, observe o Quadro 1.
Analisando o caso apresentado, podemos identificar que uma pessoa está com dois números de telefone em um mesmo campo. A fim de normalizar para a 1FN, teremos que colocar cada informação em uma linha.
Desta forma, como apresenta o Quadro 2, temos uma tabela na primeira forma normal, evitando compor com múltiplos valores.
Outro caso que poderíamos aplicar a 1FN é apresentado no Quadro 3.
Neste caso, temos que o campo de endereço contém nome da rua, número e bairro. Porém deixar todas estas informações em um único campo pode dificultar a filtragem dos dados quando estivermos realizando alguma consulta. Deste modo, para realizar a normalização, devemos separar as informações criando uma nova coluna para o bairro, como apresenta a Quadro 4.
Para normalizar para a segunda forma, primeiro é necessário que as tabelas atendam todos os requisitos da primeira forma. Seguindo para a segunda forma, devemos verificar se todos os atributos não chave dependem, unicamente, da chave primária. Deve-se verificar cada atributo que não é chave se realmente depende da chave.
Observe o exemplo no Quadro 5.
Observe que a tabela apresenta uma coluna para armazenar o título do livro, por quem ele foi alugado e, também, é associado a um código de locação. Porém ele também está associado a um código do livro que, basicamente, é uma identificação do mesmo, deste modo ele não está totalmente dependente da chave primária.
Para normalizar essa tabela, podemos criar um novo quadro que relaciona apenas o título do livro com o seu código correspondente, sendo que este será a sua chave primária e, em seguida, alterar a tabela principal (Quadro 5), eliminando o campo título do livro e tornando o cod livro a chave estrangeira dessa tabela, tornamos o nosso banco mais organizado e ágil para as futuras consultas e manutenções que possam vir a ser necessárias.
Assim como no passo anterior, antes de satisfazer a Terceira Norma Formal, devemos satisfazer as regras da Segunda Forma. Na 3FN, uma entidade deve possuir todos os seus atributos não chaves não dependendo de nenhum outro atributo não chave, em outras palavras, um atributo não pode depender de outro.
Para aplicar a 3FN, devemos considerar os seguintes cenários:
Remover campos que consistem em cálculos matemáticos. Se o atributo for o resultado de cálculos de atributos de outras tabelas, deverá ser removido, pois não acrescenta nada ao modelo de dados visto que o cálculo pode ser realizado, posteriormente, na consulta.
Para grupos de informações relacionadas, aplica-se a 3FN, criando novas entidades.
Se existir algum atributo “perdido” em alguma entidade errada, deve-se excluí-lo ou mover para a entidade correta.
Como definem Cardoso e Cardoso (2012), quando ocorre a repetição de atributos não chave, gerando redundância nas tabelas da base de dados, é necessário dividir a tabela em subgrupos, removendo ou reduzindo o problema de redundância. Em teoria, seguindo as três primeiras formas, nesta etapa, já devemos ter uma base de dados livre de redundâncias, porém, em alguns casos, podem dependências multivaloradas nos atributos, isto é, campos que se repetem em relação à chave primária.
Observe o Quadro 8, em que temos uma tabela relacionando música, cantor e álbum. Uma música pode ser interpretada por um artista e pode ser gravada em um ou mais álbuns, como também uma música pode ser interpretada por diferentes cantores. Deste modo, para evitar repetição de valores, podemos dividir essa tabela em duas, como apresentam os Quadros 9 e 10.
Uma tabela pode ser considerada na Quinta Forma Normal somente se satisfizer as condições da Quarta Forma Normal e puder ser dividida em várias tabelas sem perda de dados. Nesta fase, provavelmente não existem mais redundâncias, porém caso ainda exista a quinta forma consiste em dividir novamente as entidades em novas tabelas eliminando qualquer tipo de dado repetido restante.
Ao criar um banco de dados e aplicar todas as regras de normalização de dados, você terá evitado anomalias de redundância ou perda de dados. Isso permite uma documentação concisa da modelagem além de facilitar a manipulação dos dados. Empresas que trabalham com quantidades massivas de dados buscam otimizar ao máximo as suas bases de dados, visto que quanto maior a quantidade de espaço utilizado para armazenar maior é o custo e as chances de ocorrerem erros ou falhas. Deste modo, você como desenvolvedor deve conhecer as diferentes técnicas de normalização para tornar suas bases de dados otimizadas.
CARDOSO, V.; CARDOSO, G. Sistemas de Banco de Dados: uma abordagem introdutória e aplicada. 1. ed. São Paulo: Saraiva Uni, 2012.
ELMASRI, R. et al. Sistemas de banco de dados. São Paulo: Pearson, 2011.
ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados. 6. ed. São Paulo: Pearson Addison Wesley, 2011.