Bases de Dados Dependências funcionais Menos tabelas com mais dados? borrower customer_id loan_number 23-652 L-100 15-202 L-200 22-439 L-200 loan loan_number amount L-100 6000 L-200 4000 customer_id loan_number amount 23-652 L-100 6000 15-202 L-200 4000 22-439 L-200 4000 2 1
Mais tabelas com menos dados? employee_id employee_name telephone_number start_date 123-45-6789 Kim 882-0000 1984-03-29 987-65-4321 Kim 869-9999 1981-01-16 employee_id employee_name 123-45-6789 Kim 987-65-4321 Kim employee_name telephone_number start_date t t Kim 882-0000 1984-03-29 Kim 869-9999 1981-01-16 3 Perda de informação (lossy decomposition) employee_id employee_name 123-45-6789 Kim 987-65-4321 Kim employee_name telephone_number start_date Kim 882-0000 1984-03-29 Kim 869-9999 1981-01-16 employee_id employee_name telephone_number start_date 123-45-6789 Kim 882-0000 1984-03-29 123-45-6789 Kim 869-9999 1981-01-16 987-65-4321 Kim 882-0000 1984-03-29 987-65-4321 Kim 869-9999 1981-01-16 4 2
Redundância e anomalias customer_id customer_name branch_name branch_city 23-652 Smith Downtown Brooklyn 15-202 Johnson Perryridge Washington 22-439 Hayes Perryridge Washington 19-344 Jones Downtown Brooklyn Redundância mesmos factos em vários registos Anomalia de actualização e se agência muda de cidade? Anomalia de inserção necessário saber dados da agência para inserir cliente Anomalia de remoção se apagarmos Smith e Jones perdemos aos dados da agência de Perryridge 5 Decomposição customer_id customer_name branch_name 23-652 Smith Downtown 15-202 Johnson Perryridge 22-439 Hayes Perryridge 19-344 Jones Downtown Um facto = um tuplo Junção recupera informação Maior esforço computacional Melhor utilização do espaço em disco Ausência de anomalias branch_name Downtown Perryridge branch_city Brooklyn Washington 6 3
Chaves Seja R o esquema de uma relação r exemplo: para r(a,b,c,d) o esquema é R = ABCD Seja K um subconjunto de R exemplo: K = AB K é uma super-chave em R se para qualquer par de tuplos t 1 e t 2 t 1 [K] = t 2 [K] t 1 = t 2 7 Dependências funcionais Seja R o esquema de uma relação r (p.ex. R = ABCD) Sejam α R e β R dois subconjuntos de R exemplo: α = AB e β = CD α β é uma dependência funcional em R se para qualquer par de tuplos t 1 e t 2 t 1 [α] = t 2 [α] t 1 [β ] = t 2 [β ] 8 4
Dependências funcionais exemplos customer_id loan_number amount 23-652 L-100 6000 15-202 L-200 4000 22-439 L-200 4000 bor_loan(customer_id, loan_number, amount) customer_id customer_id customer_id, loan_numbernumber amount customer_id, loan_number customer_id, loan_number, amount loan_number amount 9 Dependências funcionais Podemos exprimir dependências triviais customer_id customer_id Podemos exprimir dependências de chaves customer_id, loan_number customer_id, loan_number, amount Podemos exprimir outro tipo de dependências loan_number number amount 10 5
Super-chave e chave candidata K é uma super-chave de uma relação r com esquema R se e só se K R K é uma chave candidata de uma relação r com esquema R se e só se K R, e não existir α K tal que α R 11 Utilização de Dependências Funcionais notas Nota 1: uma relação pode aparentar obedecer a uma dada dependência quando isso só acontece por acaso p.ex.: pode acontecer que não existam 2 empréstimos com quantias iguais sugere a dependência: amount loan_number (errado) loan_number amount L-100 6000 L-200 4000 L-300 5000 12 6
Utilização de Dependências Funcionais notas Nota 2: uma dependência funcional α β é trivial se β α exemplos customer_id customer_id customer_id, loan_number customer_id customer_id, loan_number loan_number customer_id, loan_number customer_id, loan_number 13 Utilização de Dependências Funcionais notas 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 A C chama-se uma dependência transitiva 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 14 7
Axiomas de Armstrong Transitividade se α β e β γ, então α γ Reflexividade se β α, então α β Aumento se α β, então γα γβ 15 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 16 8
Como calcular F + Algoritmo iniciar 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 f 1 e f 2 em F + se houver transitividade em f 1 e f 2 então incluir a dependência resultante em F + até F + não sofrer alterações 17 Axiomas de Armstrong se α β e β γ, então α γ se β α, então α β se α β, então γα γβ (transitividade) (reflexividade) (aumento) 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 18 9
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 αγ β γ 19 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á α γ 20 10
Pseudo-transitividade Pseudo-transitividade se α β e β γ δ, então α γ δ demonstração aumenta-se α β com γ e obtém-se αγ β γ transitividade de αγ β γ com β γ δdá αγ δ 21 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 α 22 11
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 β 23 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 24 12
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 + 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 + 25 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 + 26 13