Você sabe o que são formas normais? Saiba por que conhecer essas formas vai fazer você construir um excelente banco de dados!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
As Formas Normais são uma série de procedimentos aplicados em um banco de dados para garantir que as suas tabelas estejam bem estruturadas e não contenham nenhum tipo de anomalia, seja de inclusão, atualização ou exclusão.
O que são anomalias? Anomalias são inconsistências em um banco de dados.
Damos a essa série de procedimentos o nome de Normalização.
Mas antes de dar início à apresentação das formas normais, vamos abordar 5 conceitos necessários para uma melhor compreensão. Os conceitos que falaremos agora serão:
Conceito 1: Dependência Funcional:
Uma dependência funcional é um relacionamento entre dois ou mais atributos, de forma que o valor de um atributo identifica o valor do outro atributo, ou seja, um atributo está relacionado a outro, se nós sabemos qual o CPF de uma pessoa também vamos descobrir o nome, por exemplo.
Conceito 2: Dependência Funcional Parcial:
Uma dependência funcional parcial ocorre quando os atributos não chave (não identificadores) não dependam de toda a chave primária quando ela for composta.
Chave primária: Consideramos como chave primária toda coluna da tabela que identifica de forma única cada linha da tabela.
No caso deste boletim temos três colunas que a sua composição de valores identifica o aluno de forma única. Essas colunas são Matrícula_Aluno, Cod_Disciplina e Período.
Perceba também que o nome da disciplina depende somente do código da disciplina, ou seja, depende de parte da chave primária (dependência funcional parcial) enquanto, a nota, depende da matrícula do aluno, código da disciplina e do período em que o aluno está matriculado.
Conceito 3: Dependência Funcional Transitiva:
Quando um ou mais campos de uma entidade não são dependentes diretamente da chave primária, ou de parte dela, mas sim dependente de outro campo da tabela (campo este que não a Chave Primária), temos uma dependência funcional transitiva.
Nesta tabela todos os funcionários são identificados de forma única pelo seu ID_Funcionario.
A coluna com Nome_Funcionários depende da coluna primária ID_Funcionario assim como a coluna com o ID_Cargo, porém, a coluna Nome_Cargo não depende da coluna ID_Funcionario.
A coluna Nome_Cargo depende somente da coluna ID_Cargo que não é nossa coluna primária, isso é o que chamamos de dependência transitiva.
Esse tipo de dependência pode ser corrigida na estrutura do banco de dados, assim, teremos uma coluna a menos nesta tabela e com isso menos informações repetidas.
Conceito 4: Atributos Multivalorados:
Atributos multivalorados são atributos que podem conter mais de um valor para um mesmo registro. Nesta tabela, por exemplo, temos mais de um número de telefone para um mesmo funcionário.
Embora sejam números diferentes, ter mais de uma informação em uma mesma célula vai gerar problemas em um banco de dados.
Conceito 5: Atributos Compostos:
Atributos compostos são atributos que poderiam ser subdivididos em vários atributos:
Neste caso o endereço tem as informações de bairro, estado e cidade todos na mesma célula.
O ideal seria dividir esta única coluna em várias colunas, para eliminarmos o atributo composto:
O que é a Normalização?
Podemos definir a Normalização como uma sequência de passos e verificações aplicadas a um banco de dados visando eliminar, ou pelo menos minimizar, as redundâncias e inconsistências no banco.
Tal procedimento é feito a partir da identificação de anomalias de inserção, exclusão e atualização em uma relação, decompondo-a em relações mais bem estruturadas e minimizando a redundância.
Eliminar a redundância nos dados possui algumas vantagens:
O processo de normalização é aplicado em etapas, conhecidas como Formas Normais, que vão garantir que o banco de dados fique bem estruturado.
Existem uma série de formas normais na literatura, são elas:
As Formas Normais são como se fossem fases de um jogo. Você só pode passar para a próxima se estiver adequado à Forma anterior:
Para muitos autores, a aplicação das três primeiras já é suficiente para garantir que o banco de dados não terá redundâncias e inconsistências.
Então, neste curso vamos focar nas três primeiras formas normais.
Primeira Forma Normal (1FN):
A primeira forma normal visa eliminar atributos multivalorados e atributos compostos.
Passo a passo da 1FN:
Em resumo, para adequar uma tabela que não está na 1FN é necessário realizar os seguintes passos:
As colunas dessa nova tabela devem ser compostas por: (1) atributo multivalorado da tabela original e (2) chave primária da tabela original.
A chave primária da tabela original se transforma na chave estrangeira da nova tabela.
Exemplo Prático: Tabela PESSOA
Vejamos um exemplo. Na tabela abaixo, temos que uma série de atributos sobre a entidade PESSOA.
Essa tabela não está na Primeira Forma Normal. Vamos fazer a adequação.
Na tabela em questão, temos que o atributo Localização é um atributo composto, o que significa que ele poderia ser desmembrado em mais de uma informação: Cidade e Estado.
Por outro lado, o atributo Telefone é um atributo multivalorado (não atômico). Ou seja, um atributo que contém, na mesma célula, várias ocorrências daquele mesmo atributo.
As colunas dessa nova tabela devem ser compostas por: (1) atributo multivalorado da tabela original e (2) chave primária da tabela original.
A chave primária da tabela original se transforma na chave estrangeira da nova tabela.
Na tabela original, identificamos como chave primária o atributo CPF, e como atributo multivalorado a coluna Telefone.
A partir dessas duas colunas, criamos uma tabela nova.
Agora que criamos uma tabela para armazenar as informações de telefones das pessoas, não precisamos mais da coluna Telefone na tabela PESSOA.
A coluna Localização é um atributo composto. Sabemos que podemos separá-la em mais de uma, com as informações de Cidade e Estado.
Exemplo Prático: Tabela PESSOA:
E assim, corrigimos a tabela criando duas outras tabelas, fazendo com que no final a Primeira Forma Normal seja atingida.
Segunda Forma Normal (2FN):
Uma tabela encontra-se na segunda forma normal se ela atende todos os requisitos da primeira forma normal e se os registros na tabela, que não são chaves, dependam da chave primária em sua totalidade e não apenas parte dela.
Aqui, vamos eliminar a dependência funcional parcial.
Passo a passo da 2FN:
Em resumo, para adequar uma tabela que não está na 2FN é necessário realizar os seguintes passos:
Exemplo Prático: Tabela FUNCIONARIO_PROJETO:
Exemplo: a tabela abaixo contém duas colunas que formam uma chave primária: id_func e id_proj.
Repare agora, por exemplo, na coluna nome_func.
Essa coluna depende apenas de parte da chave primária, ou seja, ela depende apenas do id_func.
Da mesma forma que as colunas nome_proj e local_proj dependem apenas da coluna id_proj.
A chave primária da tabela funcionário_projeto é composta por duas colunas: id_func e id_proj.
2. Identificar cada atributo não chave que dependa de apenas parte da chave primária composta.
O atributo não chave nome_func depende apenas da coluna id_func (parte da chave primária).
Já os atributos não chave nome_proj e local_proj dependem apenas da coluna id_proj (parte da chave primária).
E o atributo não chave “horas_trabalhadas”?
Nesta tabela, este atributo depende da chave primária como um todo.
As horas trabalhadas estão associadas a um determinado funcionário alocado em um determinado projeto.
As chaves primárias nas novas tabelas devem ter como base as chaves primárias da tabela original.
Temos, portanto, dois conjuntos de atributos não chave dependentes de parte da chave primária, são eles:
• nome_func → depende apenas de id_func
• nome_proj e local_proj → dependem apenas de id_proj
Portanto, criaremos mais duas tabelas, uma para cada conjunto de atributos não chaves não dependentes de toda a chave primária:
1. FUNCIONARIO
2. PROJETO
4) Remover os atributos não chave da tabela original que dependam de parte da chave primária.
Os mesmos atributos não-chave serão removidos da tabela original, e existirão apenas nas novas tabelas.
• nome_func → será removida por depender apenas de id_func
• nome_proj e local_proj → serão removidas por dependerem apenas de id_proj
Assim, podemos dividir nossa tabela inicial em três tabelas separadas, desta forma quando acrescentarmos informações de projetos ou funcionários não vamos precisar repetir valores.
Terceira Forma Normal (3FN):
Se uma tabela está na primeira e segunda forma normal, mas ao analisarmos um registro encontramos um atributo não chave dependente de outro atributo não chave, precisaremos corrigir a tabela para a terceira forma normal.
Aqui basicamente corrigiremos a dependência funcional transitiva.
Passo a passo da 3FN:
Em resumo, para adequar uma tabela que não está na 3FN é necessário realizar os seguintes passos:
Definir como chave primária da tabela criada o atributo que é capaz de obter os dados não chave da tabela original e mover os atributos não chave que não são obtidos exclusivamente pela chave primária da tabela original para a nova tabela.
Exemplo Prático: Tabela FUNCIONÁRIO:
Vejamos um exemplo.
Na tabela abaixo, temos uma lista de funcionários e suas respectivas informações.
A chave primária dessa tabela é a coluna id_func.
Porém, existem atributos dessa tabela que não dependem da chave primária da tabela.
As colunas nome_dep e gerente_dep não são definidas pela chave primária id_func, mas sim pelo atributo id_dep.
Ou seja, temos atributos não chave nome_dep e gerente_dep dependendo exclusivamente de outro atributo não chave id_dep.
Existem atributos dessa tabela que não dependem da chave primária da tabela?
Definir como chave primária da tabela criada o atributo que consegue obter os dados não chave da tabela original e mover os atributos não chave que não são obtidos exclusivamente pela chave primária da tabela original para a nova tabela.
Criamos uma tabela chamada DEPARTAMENTO, contendo os atributos não-chave que não dependem da chave primária da tabela original + atributo não-chave da tabela original que serve para identificar os outros atributos não-chave.
Desmembramos a nossa tabela original em duas.
Na tabela original mantemos apenas a chave primária e os atributos não chave associados a ela e transformamos id_dep em chave estrangeira, para se conectar com a tabela nova criada, de DEPARTAMENTO.
A chave estrangeira é responsável por conectar as informações com a nova tabela.
Resumo:
Dica: Aprenda 8 etapas para modelagem de dados!
Nesta aula ensinamos o processo de normalização, falamos sobre anomalias no banco de dados, dependência funcional, atributos compostos, 3 formas normais etc.
Nosso objetivo é fazer com que, antes de você projetar um banco de dados, já tenha essas etapas em mente.
Construir o banco de dados pautado nessas regras de normalização é muito melhor do que ter que voltar e corrigir o banco de dados sempre a cada atualização por não ter feito o melhor processo.
Esse é o nosso grande objetivo com essa aula! Que você entenda o que é a normalização e a sua importância, assim poderá se antecipar aos problemas criando seu banco de dados da melhor forma!
Eu fico por aqui! Espero ter ajudado! Abraço,
Para acessar outras publicações de SQL, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.