Projeto de Banco de Dados Relacional 
Dependências Funcionais 
Normalização
Projeto de Banco de Dados Relacional 
Uma vez que sabemos com quais dados nossa aplicação precisa lidar, como saber quais relações, atributos e relacionamentos devemos criar para obter um banco de dados com o menor número possível de redundâncias, e cujo uso também seja o mais eficiente possível. 
Em geral, o objetivo do projeto de banco de dados relacional é gerar um conjunto de esquemas relacionais que nos permitam armazenar informações sem redundância desnecessária e ainda obtendo informações facilmente.
Normalização 
São validações matemáticas dos atributos de uma tabela com base nos seus relacionamentos 
Conceito de Dependência Funcional entre os atributos 
Tem por objetivo principal resolver problemas de atualização de bases de dados, minimizando redundâncias. 
Toda redundância leva a uma inconsistência 
As principais características de uma base de dados normalizada são: 
Geração de aplicações mais estáveis (e por isso também mais alteráveis); 
Aumento do número de tabelas utilizadas; 
Diminuição dos tamanhos médios das tabelas.
Normalização 
O processo de normalização ocorre em etapas sucessivas (1FN, 2FN, 3FN, ...). 
Cada etapa corresponde a uma forma normal que representa um progressivo refinamento na estrutura das tabelas 
Atualmente, os teóricos da modelagem de dados consideram a existência de inúmeras formas normais, mas geralmente basta que uma tabela atenda às três primeiras etapas que possa ser considerada como normalizada. 
Cada Forma Normal sempre introduz restrições adicionais a serem aplicadas a relações que já estão em uma determinada Forma Normal 
Primeira Forma Normal 
Segunda Forma Normal 
Terceira Forma Normal
Dependência Funcional 
Conceito de Dependência Funcional 
Seja x e y dois atributos de uma relação R. y é dependente funcionalmente de x (x  y, lê-se “x determina y”) se, e somente se, cada valor x em R for associado a um valor y em R. 
Isto é, dadas duas tuplas quaisquer da tabela t1 e t2, onde t1[x] = t2[x], então t1[y] = t2[y] 
Se existe algum atributo na tabela que nunca repete seu valor, então este atributo determina todos os outros 
Exemplos 
cpf  nome, data_nascimento 
DDD  UF 
UF, cidade  DDD 
Fornece a base das 3 primeiras formas normais
Fecho de Dependências Funcionais 
Representa o conjunto de todas as dependências funcionais válidas para uma determinada tabela 
Exemplo, dada a tabela T 
Fecho de T = {A  C, D  B, AD  BC, AB  CD} 
Regras para facilitar a determinação do fecho 
Reflexividade: Se  é um conjunto de atributos e   , então vale   . Também chamada de Dependência Funcional Trivial 
Aumentação: Se vale    e  é um conjunto de atributos, então      também vale. 
Transitividade: Se valem   , e   , então    também vale. 
União: Se valem    e   , então    também vale. 
Decomposição: Se vale   , então valem    e   . 
Pseudotransitividade: Se valem   , e   , então vale     
A 
B 
C 
D 
a1 
b1 
c1 
d1 
a1 
b2 
c1 
d2 
a2 
b2 
c2 
d2 
a2 
b3 
c2 
d3 
a3 
b3 
c2 
d4
Dependência Funcional Total 
Se o atributo y depende funcionalmente do conjunto x de atributos, mas não depende funcionalmente de qualquer subconjunto x’ de x (isto é, x’  x), então y é totalmente dependente de x. 
O conjunto x é chamado também de determinante funcional de y. 
Exemplo 
estado, cidade  DDD 
DDD é totalmente dependente de estado e cidade, pois estado sozinho não determina DDD, assim como cidade
Primeira Forma Normal 
Uma relação está na Primeira Forma Normal se, e apenas se, todos os domínios contiverem apenas valores atômicos. 
Exemplo 
Tabela inicial não normalizada: 
Solicitações (numsolicitacao, data, codfunc, nomefunc, matsol = (codprod, descr, qtd)) 
Material solicitado (matsol) é um atributo multivalorado 
Outros exemplos de atributos multivalorados 
Endereços, telefones, etc. 
Armazém X 
Solicitação de Material Número: 2199 
Código do Funcionário: 357 
Data: 27/10/2000 
Nome do Funcionário: João da Silva 
Cód. Produto 
Descrição 
Quantidade 
1023 
Joelho Tigre 
2 
1056 
Luva Tigre 
4 
1011 
Torneira Tigre 
1
Colocando a tabela na primeira forma normal 
Para tornar uma relação não-normalizada em uma relação normalizada deve-se decompor a tabela não normalizada. 
Ou seja para cada tabela aninhada criar uma nova tabela. 
Esta nova tabela irá conter os atributos da tabela aninhada e o(s) atributo(s) que compõe a chave primária da(s) tabela(s) na(s) qual(is) a tabela está aninhada 
Nosso exemplo, 1FN: 
Solicitações (numsolicitacao, data, codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, descr, qtd)
Segunda Forma Normal 
Uma relação está na Segunda Forma Normal se, e apenas se, estiver na 1FN, e cada atributo não-chave for totalmente dependente da chave primária 
Para chegar a 2FN deve-se: 
1) Verificar se existem colunas não-chave parcialmente dependentes de algum dos atributos da chave. Esta verificação é feita apenas em tabelas que tem a sua chave primária composta por mais de um atributo. 
2) Se existir um atributo b que dependa apenas parcialmente da chave primária x, isto é x’  b, onde x’  x: 
2.1) Criar tabela (se não existe ainda) cuja chave primária será x’; 
2.2) Mover da tabela original para a tabela criada o atributo b.
Colocando as tabelas na segunda forma normal 
Para o nosso exemplo de solicitação de materiais, tínhamos: 
codprod  descrição (isto é, a descrição de um produto só depende de seu código), mas 
{numsolicitacao, codprod }  qtd (a quantidade depende da solicitação E do produto) 
1FN: 
Solicitações (numsolicitacao, data, codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, descricao, qtd) 
2FN: 
Solicitações (numsolicitacao, data, codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, qtd) 
Produtos (codprod, descricao)
Terceira Forma Normal 
Exige a eliminação de dependências transitivas, nome dado à situação em que um atributo y, que depende totalmente da chave primaria, é por sua vez determinante de outro atributo z da relação. Isto é, x  y  z. 
Uma relação está na Terceira Forma Normal se, e apenas se, estiver na 2FN, e não tiver dependências transitivas. 
Para chegar na 3FN deve-se: 
1) Verificar se existem colunas não-chave dependentes de algum(ns) outro(s) atributo(s) não-chave. Esta verificação é feita apenas em tabelas que possuírem pelo menos 2 atributos não-chave. 
2) Se existir um atributo Z que dependa de outro(s) atributo(s) não-chave Y: 
2.1) Criar tabela (se não existe ainda) cuja chave primária será Y; 
2.2) Mover da tabela original para a tabela criada o atributo Z
Colocando as tabelas na terceira forma normal 
Para o nosso exemplo de solicitações de materiais, tínhamos na relação Solicitações uma dependência transitiva: 
numsolicitacao  codfunc  nomefunc 
1FN: 
Solicitações (numsolicitacao, data, codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, descricao, qtd) 
2FN: 
Solicitações (numsolicitacao, data, codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, qtd) 
Produtos (codprod, descricao) 
3FN: 
Solicitações (numsolicitacao, data, codfunc) 
Funcionários (codfunc, nomefunc) 
SolicitaçõesItens (numsolicitacao, codprod, qtd) 
Produtos (codprod, descricao)

Aula 06 normalização

  • 1.
    Projeto de Bancode Dados Relacional Dependências Funcionais Normalização
  • 2.
    Projeto de Bancode Dados Relacional Uma vez que sabemos com quais dados nossa aplicação precisa lidar, como saber quais relações, atributos e relacionamentos devemos criar para obter um banco de dados com o menor número possível de redundâncias, e cujo uso também seja o mais eficiente possível. Em geral, o objetivo do projeto de banco de dados relacional é gerar um conjunto de esquemas relacionais que nos permitam armazenar informações sem redundância desnecessária e ainda obtendo informações facilmente.
  • 3.
    Normalização São validaçõesmatemáticas dos atributos de uma tabela com base nos seus relacionamentos Conceito de Dependência Funcional entre os atributos Tem por objetivo principal resolver problemas de atualização de bases de dados, minimizando redundâncias. Toda redundância leva a uma inconsistência As principais características de uma base de dados normalizada são: Geração de aplicações mais estáveis (e por isso também mais alteráveis); Aumento do número de tabelas utilizadas; Diminuição dos tamanhos médios das tabelas.
  • 4.
    Normalização O processode normalização ocorre em etapas sucessivas (1FN, 2FN, 3FN, ...). Cada etapa corresponde a uma forma normal que representa um progressivo refinamento na estrutura das tabelas Atualmente, os teóricos da modelagem de dados consideram a existência de inúmeras formas normais, mas geralmente basta que uma tabela atenda às três primeiras etapas que possa ser considerada como normalizada. Cada Forma Normal sempre introduz restrições adicionais a serem aplicadas a relações que já estão em uma determinada Forma Normal Primeira Forma Normal Segunda Forma Normal Terceira Forma Normal
  • 5.
    Dependência Funcional Conceitode Dependência Funcional Seja x e y dois atributos de uma relação R. y é dependente funcionalmente de x (x  y, lê-se “x determina y”) se, e somente se, cada valor x em R for associado a um valor y em R. Isto é, dadas duas tuplas quaisquer da tabela t1 e t2, onde t1[x] = t2[x], então t1[y] = t2[y] Se existe algum atributo na tabela que nunca repete seu valor, então este atributo determina todos os outros Exemplos cpf  nome, data_nascimento DDD  UF UF, cidade  DDD Fornece a base das 3 primeiras formas normais
  • 6.
    Fecho de DependênciasFuncionais Representa o conjunto de todas as dependências funcionais válidas para uma determinada tabela Exemplo, dada a tabela T Fecho de T = {A  C, D  B, AD  BC, AB  CD} Regras para facilitar a determinação do fecho Reflexividade: Se  é um conjunto de atributos e   , então vale   . Também chamada de Dependência Funcional Trivial Aumentação: Se vale    e  é um conjunto de atributos, então      também vale. Transitividade: Se valem   , e   , então    também vale. União: Se valem    e   , então    também vale. Decomposição: Se vale   , então valem    e   . Pseudotransitividade: Se valem   , e   , então vale     A B C D a1 b1 c1 d1 a1 b2 c1 d2 a2 b2 c2 d2 a2 b3 c2 d3 a3 b3 c2 d4
  • 7.
    Dependência Funcional Total Se o atributo y depende funcionalmente do conjunto x de atributos, mas não depende funcionalmente de qualquer subconjunto x’ de x (isto é, x’  x), então y é totalmente dependente de x. O conjunto x é chamado também de determinante funcional de y. Exemplo estado, cidade  DDD DDD é totalmente dependente de estado e cidade, pois estado sozinho não determina DDD, assim como cidade
  • 8.
    Primeira Forma Normal Uma relação está na Primeira Forma Normal se, e apenas se, todos os domínios contiverem apenas valores atômicos. Exemplo Tabela inicial não normalizada: Solicitações (numsolicitacao, data, codfunc, nomefunc, matsol = (codprod, descr, qtd)) Material solicitado (matsol) é um atributo multivalorado Outros exemplos de atributos multivalorados Endereços, telefones, etc. Armazém X Solicitação de Material Número: 2199 Código do Funcionário: 357 Data: 27/10/2000 Nome do Funcionário: João da Silva Cód. Produto Descrição Quantidade 1023 Joelho Tigre 2 1056 Luva Tigre 4 1011 Torneira Tigre 1
  • 9.
    Colocando a tabelana primeira forma normal Para tornar uma relação não-normalizada em uma relação normalizada deve-se decompor a tabela não normalizada. Ou seja para cada tabela aninhada criar uma nova tabela. Esta nova tabela irá conter os atributos da tabela aninhada e o(s) atributo(s) que compõe a chave primária da(s) tabela(s) na(s) qual(is) a tabela está aninhada Nosso exemplo, 1FN: Solicitações (numsolicitacao, data, codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, descr, qtd)
  • 10.
    Segunda Forma Normal Uma relação está na Segunda Forma Normal se, e apenas se, estiver na 1FN, e cada atributo não-chave for totalmente dependente da chave primária Para chegar a 2FN deve-se: 1) Verificar se existem colunas não-chave parcialmente dependentes de algum dos atributos da chave. Esta verificação é feita apenas em tabelas que tem a sua chave primária composta por mais de um atributo. 2) Se existir um atributo b que dependa apenas parcialmente da chave primária x, isto é x’  b, onde x’  x: 2.1) Criar tabela (se não existe ainda) cuja chave primária será x’; 2.2) Mover da tabela original para a tabela criada o atributo b.
  • 11.
    Colocando as tabelasna segunda forma normal Para o nosso exemplo de solicitação de materiais, tínhamos: codprod  descrição (isto é, a descrição de um produto só depende de seu código), mas {numsolicitacao, codprod }  qtd (a quantidade depende da solicitação E do produto) 1FN: Solicitações (numsolicitacao, data, codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, descricao, qtd) 2FN: Solicitações (numsolicitacao, data, codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, qtd) Produtos (codprod, descricao)
  • 12.
    Terceira Forma Normal Exige a eliminação de dependências transitivas, nome dado à situação em que um atributo y, que depende totalmente da chave primaria, é por sua vez determinante de outro atributo z da relação. Isto é, x  y  z. Uma relação está na Terceira Forma Normal se, e apenas se, estiver na 2FN, e não tiver dependências transitivas. Para chegar na 3FN deve-se: 1) Verificar se existem colunas não-chave dependentes de algum(ns) outro(s) atributo(s) não-chave. Esta verificação é feita apenas em tabelas que possuírem pelo menos 2 atributos não-chave. 2) Se existir um atributo Z que dependa de outro(s) atributo(s) não-chave Y: 2.1) Criar tabela (se não existe ainda) cuja chave primária será Y; 2.2) Mover da tabela original para a tabela criada o atributo Z
  • 13.
    Colocando as tabelasna terceira forma normal Para o nosso exemplo de solicitações de materiais, tínhamos na relação Solicitações uma dependência transitiva: numsolicitacao  codfunc  nomefunc 1FN: Solicitações (numsolicitacao, data, codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, descricao, qtd) 2FN: Solicitações (numsolicitacao, data, codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, qtd) Produtos (codprod, descricao) 3FN: Solicitações (numsolicitacao, data, codfunc) Funcionários (codfunc, nomefunc) SolicitaçõesItens (numsolicitacao, codprod, qtd) Produtos (codprod, descricao)