quinta-feira, 18 de fevereiro de 2016

Introdução Formas Normais



  1. INTRODUÇÃO
    Com as diversas organizações de banco de dados passou a ser necessária a normalização das tabelas para que diminua as redundâncias fazendo com que utilize menos espaço na memória.
A normalização é o processo de organizar os dados em um banco de dados. Isso inclui a criação de tabelas e estabelecer relacionamentos entre essas tabelas de acordo com as regras criadas para proteger os dados e para tornar o banco de dados mais flexíveis, eliminando a redundância e dependência inconsistente.
    A normalização tem por objetivo reagrupar informações de forma a eliminar redundâncias de dados que possam existir nos arquivos e basicamente reagrupar informações de uma forma que permita a obtenção de um modelo ER.
    Neste trabalho serão apresentadas a primeira, segunda e terceira forma normal. Que são as mais utilizadas.

3º Forma Normal

    1. Terceira forma normal

    A Terceira forma normal vem para eliminar redundância codependente ou relativa. Quando 
    se tem duas informações em uma tabela que são diretamente dependentes uma da outra, 
    considera-se uma agregação de informação redundante. Isso é considerado, em palavras 
    mais funcionais, desperdício de processamento e espaço, pois quando se fala de 
    aplicações que vão exigir do seu servidor de banco de dados um grande trafego, logo 
    começa a se perceber o impacto do desperdício que foi causado pelo uso desnecessário 
    do método correto de arquivamento. Nesses casos, a terceira forma normal, orienta uma 
    forma mais eficiente e funcional de armazenamento dos dados por meio da criação de uma 
    nova tabela e referenciá-la na primeira tabela por meio de uma chave estrangeira, que é a 
    chave primaria de uma tabela que contem informações que poderão ser usadas por mais 
    de uma entidade que está em outra tabela, o que diminui a quantidade de informações 
    geradas e padroniza de maneira funcional os dados a serem usados no banco de dados.

    Exemplo prático


    Tabela “colaboradores”
    id_colaborador
    nome_colaborador
    cargo_colaborador
    area_colaborador
    sexo_colaborador
    1
    João Miguel
    Faxineiro
    Serviços Gerais
    M
    2
    Joaquim Mineiro
    Copeiro
    Serviços Gerais
    M
    3
    José da Silva
    Aux. Administrativo
    Administrativo
    M
    4
    Maria dos Santos
    Copeiro
    Serviços Gerais
    F
    5
    Miguel Paulista
    Aux. Administrativo
    Administrativo
    M
    6
    Solange Pereira
    Faxineiro
    Serviços Gerais
    F
    7
    Marta João
    Copeiro
    Serviços Gerais
    F


    Podemos ver claramente que, nessa tabela, o “cargo_colaborador”, é diretamente 
    dependente da “area_colaborador”. Quando isso acontece, temos informações repetidas na 
    tabela que poderiam ser evitadas, e também podem ocorrer erros de grafia no momento de 
    inserir as informações. O que pode gerar uma falha na consulta, por exemplo.
    id_colaborador
    nome_colaborador
    cargo_colaborador
    area_colaborador
    sexo_colaborador
    1
    João Miguel
    Faxineiro
    Serviços Gerais
    M
    2
    Joaquim Mineiro
    Copeiro
    Serviços Gerais
    M
    3
    José da Silva
    Aux. Escritório
    Administrabivo
    M
    4
    Maria dos Santos
    Copeiro
    Serviços Gerais
    F
    5
    Miguel Paulista
    Aux. Escritório
    Administrativo
    M
    6
    Solange Pereira
    Faxineieo
    Serviços Gerais
    F
    7
    Marta João
    Copeiro
    Serviços Gerais
    F
    Suponhamos fazer uma pesquisa nessa tabela para listar todos os funcionários que são da 
    categoria “Faxineiro” cadastrados nessa tabela, ele só vai me retornar o “João Miguel”, pois 
    a “Solange Pereira” está cadastrada como “Faixineio” erroneamente.

    Imagine uma situação em que se colocaremos essas informações em uma tabela 
    separada. Criamos uma tabela chamada “cargos” e nela colocamos as informações que 
    estão sendo redundantes para nós.

    Tabela “Cargos”


    id_cargo
    nome_cargo
    area_cargo
    1
    Faxineiro
    Serviços Gerais
    2
    Copeiro
    Serviços Gerais
    3
    Aux. Escritório
    Administrativo


    Observe que ainda temos informações redundantes no campo “area_cargo”, podemos fazer 
    uma terceira tabela chamada “Areas” para melhorarmos a padronização do nosso banco.
    Tabela “Areas”
    id_area
    nome_area
    1
    Serviços Gerais
    2
    Administrativo
    Agora o banco vai ficar assim:


    Tabela “Areas”
    id_area
    nome_area
    1
    Serviços Gerais
    2
    Administrativo
    Tabela “Cargos”
    id_cargo
    nome_cargo
    fk_id_area
    1
    Faxineiro
    1
    2
    Copeiro
    1
    3
    Aux. Escritório
    2


    Tabela “colaboradores”
    id_colaborador
    nome_colaborador
    fk_id_cargo
    sexo_colaborador
    1
    João Miguel
    1
    M
    2
    Joaquim Mineiro
    2
    M
    3
    José da Silva
    3
    M
    4
    Maria dos Santos
    2
    F
    5
    Miguel Paulista
    3
    M
    6
    Solange Pereira
    1
    F
    7
    Marta João
    2
    F

    2º Forma Normal

    Segunda forma normal
    A segunda normalização visa eliminar redundâncias. É quando uma tabela não contém 
    dependências parciais que é quando uma coluna depende apenas de parte de uma chave 
    primária composta.


    CódProj
    CodEmp
    Nome
    Cat
    Sal
    DataIni
    TempAl
    LSC001
    2146
    João
    A1
    4
    1/11/91
    24
    LSC001
    3145
    Sílvio
    A2
    4
    2/10/91
    24
    LSC001
    6126
    José
    B1
    9
    3/10/92
    18
    LSC001
    1214
    Carlos
    A2
    4
    4/10/92
    18
    LSC001
    8191
    Mário
    A1
    4
    1/11/92
    12
    PAG02
    8191
    Mário
    A1
    4
    1/05/93
    12
    PAG02
    4112
    João
    A2
    4
    4/01/91
    24
    PAG02
    6126
    José
    B1
    9
    1/11/92
    12
    Tabela somente na 1FN
    Proj:
    CódProj
    Tipo
    Descr
    LSC001
    Novo Desenv.
    Sistema de Estoque
    PAG02
    Manutenção
    Sistema de RH
    ProjEmp:
    CódProj
    CodEmp
    DataIni
    TempAl
    LSC001
    2146
    1/11/91
    24
    LSC001
    3145
    2/10/91
    24
    LSC001
    6126
    3/10/92
    18
    LSC001
    1214
    4/10/92
    18
    LSC001
    8191
    1/11/92
    12
    PAG02
    8191
    1/05/93
    12
    PAG02
    4112
    4/01/91
    24
    PAG02
    6126
    1/11/92
    12
    Emp
    CodEmp
    Nome
    Cat
    Sal
    2146
    João
    A1
    4
    3145
    Sílvio
    A2
    4
    6126
    José
    B1
    9
    1214
    Carlos
    A2
    4
    8191
    Mário
    A1
    4
    8191
    Mário
    A1
    4
    4112
    João
    A2
    4
    6126
    José
    B1
    9
    De forma mais precisa, o processo de passagem da 1FN a 2FN é o seguinte.
    1. Copiar para a 2FN cada tabela que tenha chave primária simples ou que não tenha 
    colunas além chave. No caso do exemplo, é o que acontece com a tabela Proj. 
     
    2. Para cada tabela com chave primária composta e com, pelo menos, uma coluna não 
    chave (no exemplo, a tabela ProjEmp).

    3. Criar na 2FN uma tabela com as chaves primárias da tabela na 1FN (no exemplo, 
    trata-se da tabela ProjEmp na 2FN).

    4. Para cada coluna não chave fazer a seguinte pergunta: “a coluna depende de toda a 
    chave ou de apenas parte dela?” Caso a coluna dependa de toda a chave (as colunas 
    DataIni e TempAl da tabela ProjEmp)

    5. Criar a coluna correspondente na tabela com a chave completa na 2FN (a coluna DataIni 
    e TempAl da tabela ProjEmp na 2FN). Caso a coluna dependa apenas de parte da chave 
    (as colunas Nome, Sal e Cat da tabela ProjEmp na 2FN).

    6. Criar a coluna dependente dentro da tabela na 2FN (as colunas Nome, Sal e Cat da 
    tabela Emp.