Banco de dados: Normalização


Hello people !! Tudo jóia?!

Bem, revisar sempre é bom para manter o ritmo de estudos e não perder o pique 🙂

Que tal refrescarmos nossa mente com um assunto muito cobrado na disciplina de Banco de Dados e que por muitas vezes causa aquele “frio na barriga” na hora de responder questões durante a prova: “Humm..será que é a 1FN? ou…será que é a 3FN?…enfim…eu vou chutar! 😦 “.

Pois é, hoje vamos falar sobre Normalização ou Formas Normais. Vamos começar, let´s go!

O conceito sobre Normalização é abordado e descrito por renomados autores de várias formas, porém trazem em si um ponto de convergência coincidente: Evitar redundâncias e garantir a integridade referencial dos dados.

Eu costumo dizer que a normalização de dados se dá através de um processo formal, onde passo a passo examinamos os atributos de uma entidade (tabela), com o objetivo de evitar anomalias ocasionadas durante a inclusão, exclusão e alteração de registros. Durante este exame, devemos focar em não misturar assuntos em uma mesma tabela, podemos considerar isto uma “regra de ouro” ao trabalhar em projetos de banco de dados relacional.

É comum inicialmente em um projeto de banco de dados relacional, incorrer na mistura equivocada de assuntos em uma mesma tabela, até porque a maturidade sobre o projeto está se formando e é neste momento em que aplica-se as regras de normalização e o efeito desta aplicação é a divisão natural em duas ou mais tabelas, o que ao final gera um número maior de tabelas do que o originalmente previsto.

Vejamos o que Navathe (autor de livros adotados pelas bancas de concursos) fala sobre este assunto:

A normalização de dados pode ser considerada um processo de analisar os esquemas de relação de dados com base em suas dependências funcionais e chaves primárias para conseguir as propriedades desejadas de minimização da redundância e minimização das anomalias de inserção, exclusão e atualização(modificação)”.

Elmasri, R. & Navathe. Sistema de Banco de Dados. 6ª. Ed. Pearson.

Sabendo disto, vamos então partir para às Formas Normais. Neste artigo vamos focar nas formas normais mais cobradas nas questões de concursos.

1FN ou Primeira Forma Normal

Uma relação estará na primeira forma normal 1FN, se não houver grupo de dados repetidos, isto é, se todos os valores forem únicos. Em outras palavras podemos definir que a primeira forma normal não admite repetições ou campos que tenham mais que um valor.

Vejamos o que diz Navathe:

“ Historicamente, a 1FN foi definida para reprovar atributos multivalorados, atributos compostos e suas combinações. Ela afirma que o domínio de um atributo deve incluir apenas valores atômicos(simples, indivisíveis) e que o valor de qualquer atributo em uma tupla deve ser um único valor do domínio desse atributo….. Em outras palavras, a 1FN reprova relações dentro de relações.”

Elmasri, R. & Navathe. Sistema de Banco de Dados. 6ª. Ed. Pearson.

Segundo Helser:

“..uma tabela está na primeira forma normal, quando ela não contém tabelas aninhadas.”

Helser, Carlos Alberto. Projeto de Banco de Dados. 4ª.Ed. Sagra Luzzatto

Vejamos um exemplo:

Esta tabela mostra dados dos funcionários e projetos onde estes funcionários estão envolvidos. As colunas “Projnumero” e “Horas” guardam uma relação de dependência funcional entre elas, causando sua repetição desnecessária. Para solucionar isso, deve-se colocar esta tabela na 1FN, criando-se uma tabela apenas com dados do projeto, porém se relacionando com os dados dos funcionários em tabela separada. Veja a solução dada a seguir:

Veja que a tabela “FUNC_PROJ1” possui colunas com dados dos funcionários, sendo a coluna “Cpf” a chave primária. Já a tabela “FUNC_PROJ2” traz os dados relativos aos projetos do funcionário, formando uma chave primária composta (“Cpf” e “Projnumero”), onde através desta chave será possível manter uma relação com a tabela “FUNC_PROJ1’” acabando com toda a redundância existente em “FUNC_PROJ1”.

2FN ou Segunda Forma Normal

É quando a tabela além de está na 1FN, não mantém dependências funcionais parciais entre atributos não chaves e parte da chave primária, ou seja, todos os outros atributos não chaves devem  depender da chave primária completa. No caso de tabelas com chave primária composta, se um atributo depende apenas de uma parte da chave primária, então esse atributo deve ser colocado em outra tabela.

Vejamos o exemplo abaixo:

Perceba que FUNC_PROJ está na 1FN, porém existem colunas (Projnome e Projlocal) que guardam relação com parte da chave primária composta(Cpf, Projnumero) e não com a chave toda. Este é o cenário propício para se construir a 2FN, e foi construído , criando  as tabelas FP1, FP2 e  FP3, atribuindo a cada uma das chaves primárias específicas a fim de garantir o relacionamento entre elas, eliminando as dependências parciais.

3FN ou Terceira Forma Normal

É quando uma tabela além de está na 2FN, não guarda dependência transitiva. Este tipo de dependência ocorre quando atributos não chaves dependem de outros atributos não chaves e também da chave primária da tabela. A solução é criar outra tabela contendo tais atributos não chaves, elegendo um deles para ser chave primária e esta chave primária vai ser usada como chave estrangeira na tabela existente anteriormente.

Vejamos o exemplo abaixo:

Veja que a tabela FUNC_DEP possui colunas(Dnumero, Dnome,Cpf_gerente) que não depende da chave primária (Cpf), ou seja, estão num estado de dependência transitiva. Para eliminar tal dependência, transformou-se esta tabela em duas, sendo uma com os dados do funcionário(DF1), porém guardando a coluna Dnumero como chave estrangeira para tabela DF2, sendo a referida coluna chave primária nesta tabela, garantindo assim a relação entre ambas.

Para finalizar, antes de irmos para prática, vamos relembrar do que vimos ate´aqui através do Bizu do Luis!

Forma NormalDicas de ProcedimentoBizu
1FNa) Identificar a chave primária da entidade;
b) Identificar o grupo repetitivo e removê-lo da entidade;
c) Criar uma nova entidade com a chave primária da entidade anterior e o grupo repetitivo.

A chave primária da nova entidade será obtida pela concatenação da chave primária da entidade inicial e a do grupo repetitivo.
Pegue os Atributos Compostos faça a divisão dos mesmos em colunas, da mesma Tabela, e os Atributos Multivalorados em uma nova tabela.
2FNa) Identificar os atributos que não são funcionalmente dependentes de toda a chave primária;
b) Remover da entidade todos esses atributos identificados e criar uma nova entidade com eles.

A chave primária da nova entidade será o atributo do qual os atributos do qual os atributos removidos são funcionalmente dependentes.
Na 2FN, verifique se a Tabela esta na 1FN e considere todos os Atributos Identificadores como se fossem uma Chave Composta.
Teste cada Atributo com os Atributos da Chave Composta verificando se o Atributo precisa do Atributo Identificador analisado para existir.
3FNa) Identificar todos os atributos que são funcionalmente dependentes de outros
atributos não chave;
b) Removê-los.

A chave primária da nova entidade será o atributo do qual os atributos removidos são funcionalmente dependentes.
Na 3FN, verifique se a Tabela esta na 2FN e analise os Atributos Derivados, normalmente estes dependem de outro atributo que não é a
Chave Primária e não precisaram estar armazenado na Tabela.

Bom, agora vamos deixar de “lero…lero” e vamos praticar !

[Quadrix 2012 CFP – Analista de Tecnologia da Informação – Desenvolvimento]

Sobre normalização de banco de dados, é incorreto afirmar que:

a) Uma tabela que está na 1ª FN e que possui apenas uma coluna como chave primária não contêm dependências parciais.

b) Uma tabela encontra-se na 2ª FN, quando, além de estar na 1ª FN, contêm dependências parciais.

c) Uma tabela encontra-se na terceira forma normal, quando, além de estar na 2ª FN, contêm dependências transitivas.

d) Uma dependência funcional transitiva ou indireta acontece quando uma coluna não chave primária depende funcionalmente de outra coluna ou combinação de colunas não chave primária.

e) Toda tabela que está na 1ª FN e que possui apenas uma coluna como chave primária já está na 2ª FN.

Vamos lá !
A alternativa a) está certa, porém deixou muitas dúvidas para os candidatos “apressadinhos”. Isso devido ao fato da questão afirmar que na 1 FN não contêm dependências parciais e isso não é bem verdade, porém no contexto desta questão isso está correto, pois ela possui apenas uma chave primária, ou seja, não tem como outros atributos dependerem de parte da chave, pois ela possui apenas um campo como chave.
A alternativa b) está errada e é o gabarito da questão, pois na 2 FN não se admite dependências parciais.
A alternativa c) está certa e vimos em nosso resumo e em outras questões que quando a questão falar em dependência transitiva, devemos ligar nosso radar, pois ela vai falar da 3 FN.
A alternativa d) esta certa
A alternativa e) está certa e sua justificativa tem relação com o que foi explicado na alternativa a).
Gabarito: b)

[FCC 2014 TRF 3ª Região – Analista Judiciário – Informática – Banco de Dados]

Uma tabela encontra-se na segunda forma normal (2FN), quando, além de estar na primeira forma normal (1FN), não contém dependências parciais de colunas não chave em relação à chave primária.

a) não contém dependências parciais de colunas não chave em relação à chave primária.

b) não contém chave primária composta de mais de uma coluna.

c) não contém dependência completa de colunas não chave em relação à chave primária.

d) contém chave estrangeira composta de mais de uma coluna.

e) contém tabelas aninhadas.

A alternativa a) está correta, pois trás exatamente o conceito sobre 2 FN.
A alternativa b) está errada porque não é possível garantir que na 2FN exista chave primária simples ou composta.
A alternativa c) está errada , pois esse seria o passo para 3 FN.
A alternativa d) está errada, pois para 2FN não há tal exigência.
A alternativa e) está errada por infligir a 1FN.
Gabarito: a)

Não tem mistério, fico por aqui e até a próxima!

Forte abraço e ótimos estudos !!

Luis Octavio Lima

 

 

 

 

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

%d blogueiros gostam disto: