Formas normais em banco de dados

event 6 de março de 2023 às 3:49 pm

As formas Normais são uma serie de procedimentos aplicados em um banco de dados para garantir que as suas tabelas estejam bem estruturadas e não contenham qualquer tipo de anomalia, seja de inclusão, atualização ou exclusão.

Damos a esse série de procedimentos o nome de Normalização.

5 conceitos necessários para uma melhor compreensão:

  • Dependência Funcional
  • Dependência Funcional Parcial
  • Dependência Funcional Transitiva
  • Atributos Multivalorados
  • Atributos Compostos

Dependência Funcional

Uma dependência funcional é um relacionamento entre dois ou mais atributos, de forma que o valor de um atributos identifique o valor para cada um dos atributos, ou seja, um atributo está relacionado a outro.

Exemplo:

CPF NOME
111Ana
222Bruno
333Carla
444Diego
555Ana
tabela cliente

Temos uma tabela cliente que possui dois atributos “CPF” e “NOME”, o atributo nome é dependente do atributo “CPF”. Por outro lado o atributo “CPF” não depende de nome.

Dependência Funcional Parcial

Uma dependência parcial ocorre quando os atributos não chave (não identificadores) não dependam de toda a chave primária quando ela for composta.

Exemplo:

Matricula_AlunoCod_DisciplinaPeríodo Nome_DisciplinaNota
11111Calculo 18
22221Física9.5
33331Contabilidade10
44441Química7.5
55551Intro. Eng.8.5
tabela boletim

A chave primaria necessita mais de um atributo para identificar atributo nota na linha da tabela, ou seja, a chave primária e composta por matricula_aluno, cod_disciplina, nome_disciplina. Mas o atributo nome_disciplina precisa de parte da chave_primaria no caso o cod_disciplina, ele depende parcialmente da chave primária.

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.

Exemplo:

ID_FuncionárioNome_FuncionárioID_Cargo Nome_CargoSalario
1João1Analista3500
2Katia1Analista3500
3Luis2Técnico4100
4Maria2Técnico4100
5Neto3Assistente2200
tabela funcionário

Uma coluna da tabela não depende da chave primária, neste caso a coluna Nome_Cargo não precisa da coluna ID_Funcionário, que é a chave primária da tabela;

Atributos Multivalorados

Atributos multivalorados são atributos que podem conter mais de um valor para um mesmo registro.

Exemplo:

ID_Funcionário Nome_FuncionárioTelefone
1João(21) 99999-0001
(21) 99999-0002
(21) 99999-0003
2Katia(21) 99999-0004
3Luiz(21) 99999-0005
(21) 99999-0006
4Marla(21) 99999-0007
5Neto(21) 99999-0008
tabela cliente

Quando na célula de uma tabela possui mais de uma informação, no caso a coluna “Telefone” para joão e Luiz possuem mais de uma informação na célula.

Atributos Compostos

Atributos compostos são atributos que poderiam ser subdivididos em vários atributos.

ID_Funcionário Nome_FuncionárioEndereço
1JoãoAv. Mem de Sá, 100, apto 101 – Centro – Rio de Janeiro – RJ
2KatiaAv. Portugal, 324, casa 01 – Urca – Rio de Janeiro – RJ
3LuizAv. Vieira Souto, 1300, apto 802 – Leblon – Rio de Janeiro – RJ

O ideal seria dividir esta única coluna em várias colunas, para que assim a gente elimine o atributo composto.

ID_FuncionárioNome_FuncionárioEndereçoBairroCidadeUF
1JoãoAv. Mem de Sá, 100, apto 101CentroRio de Janeiro RJ
2KatiaAv. Portugal, 324, casa 01UrcaRio de Janeiro RJ
3LuizAv. Vieira Souto, 1300, apto 802 LeblonRio de Janeiro RJ

Tenho varias informações dentro de uma célula o ideal e que fossem separadas.

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 com o objetivo de 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ções, exclusão e atualização em uma relação, decompondo-a em relações melhor estruturadas e minimizando a redundância.

Eliminar a redundância nos dados possui algumas vantagens:

  • Reduzir o espaço necessário para armazenar o banco de dados
  • Melhorar a organização dos dados
  • Reduzir o impacto de atualizações, inserções e exclusões nos dados dos bancos de dados

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:

  • Primeira Forma Normal
  • Segunda Forma Normal
  • Terceira Forma Normal
  • Forma Normal de Boyce-Codd
  • Quarta Forma Normal
  • Quinta Forma Normal

As formas Normais é como se fossem fases de um jogo. Você só pode passar para a próxima se estiver adequado à Forma anterior.

  • Primeira Forma Normal
    • Segunda Forma Normal
      • Terceira Forma Normal
        • Forma Normal de Boyce-Codd
          • Quarta Forma Normal
            • Quinta Forma Normal
              • Outras Formas Normais

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.

Primeira Forma Normal (1FN)

A primeira forma normal tem como objetivo ele atributos multivalorados e atributos compostos.

Em resumo, para adequar uma tabela que não está na 1FN é necessário os seguintes passos:

  1. Identificar a existência de atributos multivalorados e atributos compostos.
  2. Criar uma tabela para armazenar os dados do atributos multivalotado. 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.
  3. Remover o atributo multivalorado da tabela original.
  4. Na tabela original, para cada atributo composto, criar uma nova coluna para cada informação a ser desmembrada.

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.

CPFNomeSexoLocalizaçãoTelefone
111AnaFRio de Janeiro, RJ999-444, 999-000
222BrunoMSão Paulo, SP888-888,444-333
333CarlaFBelo Horizonte, MG555-777
444DiegoMVitória, ES999-999
Tabela PESSOA

Identificar atributos compostos e multivalorados, a coluna Localização possui atributos composto e a coluna Telefone possui atributos multivalorados.

  1. 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.
  2. 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
CPFTelefone
111999-444
111999-000
222888-888
222444-333
333555-777
444999-999
Tabela Telefone

A chave primária da tabela original se torna a chave estrangeira da nova tabela, no caso a chave estrangeira da tabela Telefone é o CPF.

Depois remover a coluna de atributos multivalorados da tabela original.

CPFNomeSexoLocalização
111AnaFRio de Janeiro, RJ
222BrunoMSão Paulo, SP
333CarlaFBelo Horizonte, MG
444DiegoMVitória, ES
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.

CPFNomeSexoCidadeEstado
111AnaFRio de JaneiroRJ
222BrunoMSão PauloSP
333CarlaFBelo HorizonteMG
444DiegoMVitóriaES
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.

Em resumo, para adequar uma tabela que não está na 2FN é necessário realizar os seguintes passos:

  1. Identificar se existe na tabela uma chave primária composta.
  2. Identificar cada atributo não chave que dependa de apenas parte da chave primária composta.
  3. Criar uma tabela para cada conjunto de atributos não chave que dependam de parte da chave primária da tabela e adicionar estes atributos não chaves na tabela. As chaves primárias nas novas tabelas devem ter como base as chaves primárias da tabela original.
  4. Remover os atributos não chave da tabela original que dependam de parte da chave primária.

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.

id_funcid_projhoras_trabalhadasnome_funcnome_projlocal_proj
1A10LuisPlan.Est.RJ
2B20MartaPlano Neg.SP
1B15LuisPlano Neg.SP
3Diego30NeideMap. ProcessosMG
Tabela Projetos

A tabela possui chave primária composta id_func e id_proj,

  • horas_trabalhadas depende de id_func e id_proj;
  • nome_func depende de id_func (dependência funcional parcial)
  • nome_proj depende de id_proj (dependência funcional parcial)
  • local_proj depende de id_proj (dependência funcional parcial)

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 -> depende apenas de id_proj

Portanto, criaremos mas duas tabelas, uma para cada conjunto de atributos não chaves não dependentes de toda a chave primária:

  1. FUNCIONÁRIO
  2. PROJETO
id_funcnome_func
1Luis
2Marta
3Neide
Tabela Funcionário
id_funcid_projhoras_trabalhadas
1A10
2B20
1B15
3C30
Tabela Funcionário_Projetos
id_projnome_projlocal_proj
APlan.Est.RJ
BPlano Neg.SP
CMap. ProcessosMG
Tabela Projetos

Se uma tabela está na primeira e na segunda forma normal, mas ao analisarmos um registro encontramos um atributo não chave dependente de outro atributo não chave, precisamos corrigir a tabela para a terceira forma normal.

Aqui basicamente estaremos corrigindo a dependência funcional transitiva.

Em resumo, para adequar uma tabela que não está na 3FN é necessário realizar os seguintes passos:

  1. Identificar cada grupo de atributos não-chave que dependam de outros atributos não-cahve.
  2. Criar uma tabela para armazenar os atributos (ou conjunto de atributos) não-chave que não estão relacionados à chave primária da tabela original. 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.
  3. Definir como chave estrangeira o atributo que é capaz de obter os dados não chaves da tabela original.

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.

id_funcnome_funcsexoid_depnome_depgerente_dep
1PaulaF100FinançasAndré
2RodrigoM101RHBruna
1SandraF102TICaio
3TiagoM101RHBruna
Tabela Projetos

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 um outro atributo não chave (id_dep).

Criamos uma nova tabela 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.

id_depnome_depgerente_dep
100FinançasAndré
101RHBruna
102TICaio
Tabela Departamento
id_funcnome_funcsexoid_dep
1PaulaF100
2RodrigoM101
1SandraF102
3TiagoM101
Tabela Funcionário

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 transformamo id_dep em chave estrangeira, para se conectar com a tabela nova criada, de Departamento.

Resumo

  • Um banco de dados mal projetado pode apresentar anomalias de inserção, exclusão e atualização
  • Anomalias em banco de dados geram redundâncias e inconsistências, o que prejudica o bom desempenho do banco de dados.
  • Normalização é um processo de adequação do banco de dados por meio de Formas Normais, a fim de eliminar anomalias nos bancos de dados.
  • Podemos considerar que um banco de dados está normalizado e livre de redundâncias e inconsistências se estiver adequado à Primeira, Segunda e Terceira Formais Normais.

Referência :

Deixe uma resposta

Formulário Respondeu!