Bases de Dados Dependências funcionais Formas Normais – revisão § 1FN: os atributos de uma relação têm que ser atómicos § FNBC: para qualquer dependência funcional α → β numa relação, ou α → β é trivial ou α é super-chave § 3FN: mais tolerante que FNBC, admite que cada atributo em (β – α) faça parte de uma chave candidata § 4FN: para qualquer dependência multi-valor α →→ β numa relação, ou α →→ β é trivial ou α é super-chave IST DEI ▪ Bases de Dados 2006-07 ▪ 2 Formas Normais – revisão § A relação r com esquema R está de acordo com a FNBC se para todas as dependências funcionais em F+ na forma α→β onde α ⊆ R e β ⊆ R, se verifica que: • α → β é trivial (isto é, β ⊆ α), ou • α é uma super-chave de R Como determinar F+ dado F ?... IST DEI ▪ Bases de Dados 2006-07 ▪ 3 Formas Normais – revisão § Nota 3: é possível “deduzir” outras dependências funcionais a partir de um dado conjunto F • p.ex.: se A → B e B → C então é certo que A → C ▫ ▫ ao conjunto de todas as dependências F dadas e todas as que são possíveis deduzir a partir de F chama-se F+ F+ é também designado por fecho de F IST DEI ▪ Bases de Dados 2006-07 ▪ 4 Axiomas de Armstrong § Reflexividade • se β ⊆ α, então α → β § Aumento • se α → β, então γα → γβ § Transitividade • se α → β e β → γ, então α → γ IST DEI ▪ Bases de Dados 2006-07 ▪ 5 Axiomas de Armstrong – exemplo R = (A, B, C, G, H, I) F = { A → B , A → C , CG → H , CG → I , B → H } § alguns dos elementos de F+ • A→H ▫ transitividade de A → B e B → H • AG → I ▫ ▫ aumenta-se A → C com G e obtém-se AG → CG transitividade de AG → CG com a existente CG → I • CG → HI ▫ ▫ ▫ aumenta-se CG → I com CG e obtém-se CG → CGI aumenta-se CG → H com I e obtém-se CGI → HI transitividade de CG → CGI e CGI → HI IST DEI ▪ Bases de Dados 2006-07 ▪ 6 Como calcular F+ § Algoritmo F+ = F repetir para cada dependência funcional f em F+ aplicar reflexividade e aumento a f incluir as dependências resultantes em F+ para cada par de dependências f1e f2 em F+ se houver transitividade em f1 e f2 então incluir a dependência resultante em F+ até F+ não sofrer alterações 7 IST DEI ▪ Bases de Dados 2006-07 ▪ Axiomas de Armstrong se β ⊆ α, então α → β se α → β, então γα → γβ se α → β e β → γ, então α → γ (reflexividade) (aumento) (transitividade) § Os axiomas de Armstrong • não geram dependências erradas (soundness) • são capazes de gerar todas as dependências (completeness) § Mas há outras regras que também dão jeito... • união, decomposição, pseudo-transitividade IST DEI ▪ Bases de Dados 2006-07 ▪ 8 União § União • se α → β e α → γ, então α → β γ • demonstração ▫ ▫ ▫ aumenta-se α → β com γ e obtém-se αγ → β γ aumenta-se α → γ com α e obtém-se α → αγ transitividade de α → αγ e αγ → β γ IST DEI ▪ Bases de Dados 2006-07 ▪ 9 Decomposição § Decomposição • se α → β γ, então α → β e α → γ • demonstração ▫ ▫ ▫ ▫ reflexividade diz-nos que β γ → β reflexividade diz-nos que β γ → γ transitividade de α → β γ com β γ → β dá α → β transitividade de α → β γ com β γ → γ dá α → γ IST DEI ▪ Bases de Dados 2006-07 ▪ 10 Pseudo-transitividade § Pseudo-transitividade • se α → β e β γ → δ, então α γ → δ • demonstração ▫ ▫ aumenta-se α → β com γ e obtém-se αγ → β γ transitividade de αγ → β γ com β γ → δ dá αγ → δ IST DEI ▪ Bases de Dados 2006-07 ▪ 11 Fecho de atributo § Estas regras permitem deduzir outras dependências § Mas se um atributo α determina o valor de β... α→β • ...e β determina outros atributos via β → γ • ...será possível deduzir todos os atributos determinados por α ? § Chama-se a α+ o fecho do atributo α IST DEI ▪ Bases de Dados 2006-07 ▪ 12 Como calcular α+ § Abordagem 1 • calcular F+ e considerar só as dependências α → … • unir todos os atributos dependentes de α § Abordagem 2 • sem calcular F+ result = α while (changes to result) do for each γ → β in F do if γ ⊆ result then result := result U β IST DEI ▪ Bases de Dados 2006-07 ▪ 13 Como calcular α+ – exemplo R = (A, B, C, G, H, I) F = { A → B , A → C , CG → H , CG → I , B → H } § Calcular (AG)+ result = AG • A → B tem A ⊆ result logo result = AGB • A → C tem A ⊆ result logo result = AGBC • CG → H tem CG ⊆ result logo result = AGBCH • CG → I tem CG ⊆ result logo result = AGBCHI IST DEI ▪ Bases de Dados 2006-07 ▪ 14 Utilização de α+ § O fecho α+ de um atributo α pode ser usado para • saber se α é uma super-chave ▫ nesse caso α+ contém todos os atributos de R • saber se uma dada α → β existe em F+, sem calcular F+ ▫ só existe se β ⊆ α+ • permite calcular F+ por outra via ▫ ▫ ▫ para cada γ ⊆ R calcula-se γ+ para cada S ⊆ γ+ diz-se que γ → S o conjunto de todos os γ → S é F+ IST DEI ▪ Bases de Dados 2006-07 ▪ 15 Utilização de α+ – exemplo R = (A, B, C, G, H, I) F = { A → B , A → C , CG → H , CG → I , B → H } § Já vimos que (AG)+ = AGBCHI • contém todos os atributos de R, logo é super-chave § Será que A ou G são super-chaves? • teríamos que calcular A+ e G+… IST DEI ▪ Bases de Dados 2006-07 ▪ 16 Bases de Dados Verificação das dependências Verificação de dependências § Em SQL podemos assegurar as dependências com chaves primárias, check, asserções e triggers • estão operações saem “caras” • e mais caras ainda se houver dependências que envolvem múltiplas relações § Como diminuir o esforço de verificação das dependências? • a partir do conjunto F dado, encontrar o conjunto “mínimo” Fc que tem o mesmo fecho F+ que F IST DEI ▪ Bases de Dados 2006-07 ▪ 18 Verificação de dependências § Como encontrar esse conjunto “mínimo” Fc ? • retirar as dependências redundantes ▫ A → C é redundante se já soubermos que A → B e B → C • retirar os atributos irrelevantes de α → β ▫ ▫ em β : {A→B, B→C, A→CD} fica {A→B, B→C, A→D} em α : {A→B, B→C, AC→D} fica {A→B, B→C, A→D} IST DEI ▪ Bases de Dados 2006-07 ▪ 19 Atributos irrelevantes § Para uma dada dependência em F na forma α→β • um atributo A de β é irrelevante se ▫ (F – {α → β}) U {α → (β – A)} implica F • um atributo A de α é irrelevante se ▫ F implica (F – {α → β}) U {(α – A) → β} IST DEI ▪ Bases de Dados 2006-07 ▪ 20 Atributos irrelevantes § Para uma dada dependência α → β • como verificar se um atributo A de β é irrelevante? ▫ ▫ determinar α+ em F' = (F – {α → β}) U {α → (β – A)} se α+ inclui A então A é irrelevante em β • como verificar se um atributo A de α é irrelevante? ▫ ▫ calcular (α – A)+ se (α – A)+ inclui todos os atributos de β, então A é irrelevante em α IST DEI ▪ Bases de Dados 2006-07 ▪ 21 Cobertura canónica § Um conjunto Fc de dependências é uma cobertura canónica de F se • nenhuma dependência em Fc contém atributos irrelevantes • em todas as dependências α é sempre diferente ▫ isto é, não existem 2 dependências α1 → β1 e α2 → β2 em que α1 = α2 IST DEI ▪ Bases de Dados 2006-07 ▪ 22 Como calcular Fc Fc = F repetir a) regras em Fc com α igual são combinadas via união (união: se α → β e α → γ, então α → β γ) b) procurar uma dependência com um atributo irrelevante (e retirar esse atributo da dependência) até Fc não sofrer alterações IST DEI ▪ Bases de Dados 2006-07 ▪ 23 Cobertura canónica – exemplo R = (A, B, C) F = { A → BC , B → C , A → B , AB → C } F c= F 1ª iteração a) união de A → BC e A → B dá: A → BC ▫ Fc= { A → BC , B → C , AB → C } b) A é irrelevante em AB → C (porque sabemos que B→C) ▫ Fc= { A → BC , B → C } 2ª iteração a) não há uniões a fazer b) C é irrelevante em A → BC (sabe-se isso com A→B e B→C) ▫ Fc= { A → B , B → C } IST DEI ▪ Bases de Dados 2006-07 ▪ 24 Cobertura canónica – exemplo § O conjunto F inicial era • F = { A → BC , B → C , A → B , AB → C } § O conjunto Fc resultante é • Fc= { A → B , B → C } § É mais fácil verificar Fc do que F • e no entanto ambas têm as mesmas implicações IST DEI ▪ Bases de Dados 2006-07 ▪ 25 Bases de Dados Decomposições Decomposição – revisão § Se uma dependência α → β num esquema R infringe a FNBC então decompõe-se R em 2 esquemas • (α U β ) • (R – (β – α)) § Se uma dependência α →→ β num esquema R infringe a 4FN então decompõe-se R em 2 esquemas • (α U β ) • (R – (β – α)) 27 IST DEI ▪ Bases de Dados 2006-07 ▪ Decomposição – revisão customer_id loan_number amount 23-652 L-100 6000 15-202 L-200 4000 22-439 L-200 4000 § Dado que loan_number → amount • decompomos em (α U β ) = (loan_number, amount) (R – (β – α)) = (customer_id, loan_number) IST DEI ▪ Bases de Dados 2006-07 ▪ 28 Decomposição – exemplo R1 = (customer_id, loan_number) R2 = (loan_number, amount) customer_id loan_number loan_number amount 23-652 L-100 L-100 6000 15-202 L-200 L-200 4000 22-439 L-200 § A junção natural das 2 tabelas devolve a original customer_id loan_number amount 23-652 L-100 6000 15-202 L-200 4000 22-439 L-200 4000 IST DEI ▪ Bases de Dados 2006-07 ▪ 29 Decomposição sem perdas § Uma decomposição de R em R1 e R2 não tem perdas (lossless) se r = ∏R1 (r ) ∏R2 (r ) § Uma decomposição de R em R1 e R2 não tem perdas se uma destas hipóteses se verificar • R1 R2 → R1 • R1 R2 → R2 ∩ ∩ IST DEI ▪ Bases de Dados 2006-07 ▪ 30 Decomposição sem perdas R1 = (customer_id, loan_number) R2 = (loan_number, amount) customer_id loan_number loan_number amount 23-652 L-100 L-100 6000 15-202 L-200 L-200 4000 22-439 L-200 § No exemplo • R1 R2 = loan_number • mas, loan_number → amount • logo, loan_number → loan_number, amount • ou seja, R1 R2 → R2 ∩ ∩ IST DEI ▪ Bases de Dados 2006-07 ▪ 31 Bases de Dados Preservação de dependências Preservação de dependências – revisão § Em SQL podemos assegurar as dependências com chaves primárias, check, asserções e triggers • estão operações saem “caras” • e mais caras ainda se houver dependências que envolvem múltiplas relações § Se for suficiente testar só as dependências de cada relação para garantir que todas as dependências se mantém, então esse esquema preserva as dependências IST DEI ▪ Bases de Dados 2006-07 ▪ 33 Restrições de F+ § Seja R um esquema decomposto para R1, R2, …, Rn § Seja Fi a restrição de F+ a Ri • Fi contém todas as dependências que evolvem atributos do esquema Ri apenas § A intenção é verificar apenas as dependências Fi de cada relação Ri • sem ter que verificar as dependências que envolvem atributos de várias relações ▫ espera-se que estas fiquem verificadas "automaticamente" se as Fi forem verificadas IST DEI ▪ Bases de Dados 2006-07 ▪ 34 Preservação de dependências § Será que verificar as Fi é suficiente para verificar F? • F é o conjunto dado • F' é o conjunto das Fi, isto é, F' = F1 U F2 U … U Fn § Em geral, F' ≠ F • mas se F'+ = F+ então é indiferente usar F ou F' • e neste caso as dependências são preservadas! IST DEI ▪ Bases de Dados 2006-07 ▪ 35 Verificação da preservação de dependências § Abordagem 1 • calcular F+ e F'+ e verificar se são iguais • cálculo de F+ é pesado, com F'+ ainda mais… IST DEI ▪ Bases de Dados 2006-07 ▪ 36 Verificação da preservação de dependências § Abordagem 2 • sem calcular F+ • para cada α → β em F result = α while (changes to result) do for each Ri t = (result Ri)+ Ri result = result U t • se o resultado tiver todos os atributos de β, então as dependências estão preservadas ∩ ∩ IST DEI ▪ Bases de Dados 2006-07 ▪ 37 Outros temas § No capítulo 7 do livro podem ainda encontrar • 7.5: algoritmos de decomposição para FNBC e 3FN ▫ basicamente aplicam a fórmula de decomposição (α U β ) e (R – (β – α)) recursivamente • 7.8: considerações sobre modelo E-A e normalização ▫ se o E-A estiver bem feito, o esquema sai normalizado • 7.9: aplicação a BDs temporais ▫ não abordado nesta disciplina IST DEI ▪ Bases de Dados 2006-07 ▪ 38