1 / 26

Capítulo 7: Design de Bases de Dados

Capítulo 7: Design de Bases de Dados. 1ª Forma Normal Objectivos com Design de Bases de Dados Dependências funcionais Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal Dependências multivalor 4ª Forma Normal Visão geral sobre o processo de design. 1ª Forma Normal.

kassia
Download Presentation

Capítulo 7: Design de Bases de Dados

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Capítulo 7: Design de Bases de Dados • 1ª Forma Normal • Objectivos com Design de Bases de Dados • Dependências funcionais • Decomposição • Forma Normal de Boyce-Codd • 3ª Forma Normal • Dependências multivalor • 4ª Forma Normal • Visão geral sobre o processo de design

  2. 1ª Forma Normal • Um esquema R diz-se na 1ª forma normal se os domínios de todos os seus atributos são atómicos. • Uma domínio é atomico se os seus elementos forem unidades indivisíveis. • Exemplo de domínios não atómicos: • Conjuntos (e.g. de nomes), atributos compostos (e.g. com nome de rua, nº de porta, código postal e localidade) • Identificações com partes distintas (e.g. nº de carta de condução E-111222-5, nº de BI com último dígito) • Os valores não atómicos complicam o armazenamento e encorajam repetições desnecessárias de dados. • Daqui para a frente, assumiremos que todas os esquemas de relações estão já na 1ª Forma Normal.

  3. Objectivos com o Design de BDs Relacionais • Pretendem-se encontrar “bons” conjuntos de esquemas de relações para armazenar os dados. • Um “mau” design pode levar a: • Repetição de dados. • Impossibilidade de representar certos tipos de informação. • Dificuldade na verificação da integridade • Objectivos do Design: • Evitar dados redundantes • Garantir que as relações relevantes sobre dados podem ser representadas • Facilitar a verificação de restrições de integridade.

  4. Exemplo CPostal localidade telef. nome 2815 1000 1100 2815 Caparica Lisboa Lisboa Caparica 1111 2222 1112 3333 Maria João Pedro Ana • Considere o esquema simples:Amigos = (nome, telefone, código_postal, localidade) • Redundância: • Os valores de (código_postal, localidade) são repetidos para cada amigo com um mesmo código postal • Desperdiça-se espaço de armazenamento • Dá azo a inconsistências • Complica bastante a verificação da integridade dos dados • Dificuldade de representar certa informação • Não se pode armazenar informação do código postal de uma localidade sem que hajam amigos dessa localidade. • Podem usar-se valores nulos, mas estes são difíceis de gerir.

  5. Decomposição • Decompor o esquema Amigos em: Amigos1 = (nome,telefone, código_postal) CPs = (código_postal, localidade) • Todos os atributos do esquema original (R) devem aparecer na decomposição em (R1, R2): R = R1  R2 • Decomposição sem perdas: • Para todas as (instâncias de) relações r que “façam sentido” sobre o esquema R: r = R1 (r) R2 (r) • Note-se que o “façam sentido” depende do problema concreto.

  6. Exemplo de decomposição sem perdas Amigos1(r) CPostal CPostal localidade r telef. telef. nome nome 2815 1000 1100 2815 2815 1000 1100 2815 Caparica Lisboa Lisboa Caparica 1111 2222 1112 3333 1111 2222 1112 3333 Maria João Pedro Ana Maria João Pedro Ana Amigos1 (r) CPS (r) = r CPs(r) CPostal localidade 2815 1000 1100 Caparica Lisboa Lisboa • Decomposição de Amigos em Amigos1 e CPs:

  7. Exemplo de decomposição com perdas Amigos1 (r) CPS (r) CPostal localidade r 2815 2815 1000 1000 1100 1100 Caparica Lisboa Caparica Lisboa Caparica Lisboa Locs(r) CP1(r) CPostal localidade localidade CPostal 2815 1000 1100 Caparica Lisboa Lisboa Caparica Lisboa 2815 1000 1100 • Decomposição de CPs em: • CP1 = (código_postal) e Locs = (localidade) ≠ • Perdeu-se a informação de qual os CPs das localidades!!! • Decompor parecia bom para evitar redundâncias. • Mas decompor demais pode levar à perda de informação.

  8. Outro exemplo com perdas CPostal localidade localidade telef. telef. nome nome r 2815 1000 1100 2815 Caparica Lisboa Lisboa Caparica Caparica Lisboa Lisboa Caparica 1111 2222 1112 3333 1111 2222 1112 3333 Maria João Pedro Ana Maria João Pedro Ana nome telef. CPostal localidade Maria João João Pedro Pedro Ana 1111 2222 2222 1112 1112 3333 2815 1000 1100 1000 1100 2815 Caparica Lisboa Lisboa Lisboa Lisboa Caparica Amigos2(r) Loc(r) localidade CPostal Caparica Lisboa Lisboa 2815 1000 1100 Amigos2(r) Loc(r) • Decomposição de Amigos em: • Amigos2 = (nome,telefone,localidade) e Loc = (localidade,código_postal). ≠ • Perdeu-se a informação de qual é o CP do João (e do Pedro)!!! • O que torna esta decomposição diferente da primeira? • Depende do problema.

  9. Objectivo: chegar a um conjunto da seguinte forma • Decidir se o esquema R já está num “bom” formato. • Se não estiver, decompor R num conjunto de esquemas {R1, R2, ..., Rn} tal que: • cada um deles está num “bom” formato • A decomposição é sem perdas • A teoria é baseada em • Dependências funcionais • Dependências multivalor

  10. Dependências funcionais • Restrições sobre o conjunto de relações possíveis. • Exige que os valores num conjunto de atributos determinem univocamente os valores noutro conjunto de atributos. • São uma generalização da noção de chave.

  11. Dependências Funcionais (Cont.) • Seja R o esquema duma relação e   R e   R. A dependência funcional:  é verdadeira em R sse, para toda a relação possível (i.e. “que faça sentido”) r(R), sempre que dois tuplos t1 et2 de r têm os mesmos valores em , também têm os mesmos valores em :  t1,t2  r, t1[] = t2 []  t1[ ] = t2 [ ] • De forma equivalente:  a dom(),Pb(sa=a(r)) tem no máximo 1 tuplo • Exemplo: Seja r(A,B): • Nesta instância, ABnão é verdadeira, mas BA é. A B • 4 • 1 5 • 3 7

  12. Dependências Funcionais (Cont.) • Casos extremos • { }  • Só se verifica se na relação r todos os tuplos têm o mesmo valor em  (nunca deve ser permitido) •  { } • Verifica-se para toda a relação r e conjunto de atributos  • Diz-se que uma dependência é trivial se é satisfeita por todas as relações (quer façam sentido ou não) sobre um esquema • E.g. • customer-name, loan-number customer-name • customer-name customer-name • Em geral,   é trivial se   

  13. Dependências Funcionais (Cont.) • K é uma superchave no esquema R sse K R • K é uma chave candidata em R sse • K R, e • para nenhum   K,  R • As dependências funcionais permitem expressar restrições que não o podem ser usando apenas os conceitos de chave. E.g: (customer-name, loan-number, branch-name, amount). Espera-se que as seguintes dependências sejam verdadeiras: loan-numberamount loan-number  branch-name mas não se espera que a dependência abaixo seja verdadeira: loan-number customer-name

  14. Uso de Dependências Funcionais • Usam-se dependências funcionais para: • testar (instâncias de) relações, para verificar se “fazem sentido” de acordo com as dependências funcionais. • Se uma relação r torna verdadeiras todas as dependências dum conjunto F, então diz-se que rsatisfaz F. • Especificar restrições sobre as relações • Diz-se que Fé verdadeira emR se todas as relações (possíveis) sobre R satisfazem as dependências em F. • Nota: Uma instância particular duma relação pode satisfazer uma dependência funcional mesmo que a dependência não seja verdadeira no esquema. Por exemplo, uma instância particular (em que, por acaso, nenhum empréstimo tenha mais que um cliente) satisfaz: loan-number customer-name.

  15. Fecho de um Conjunto de Dependências Funcionais • Dado um conjunto F de dependências, há outras dependências que são logicamente implicadas por F. • E.g. Se A  B e B  C, então, obrigatoriamente, A  C • Ao conjunto de todas as dependências funcionais implicadas por F chama-se fecho de F (denotado por F+). • Podem encontrar-se todas as dependências emF+por aplicação do Axiomas de Armstrong: • Se   , então   (reflexividade) • Se  , então    (aumento) • Se  , e   , então   (transitividade) • Estes regras são • coerentes (só geram dependências que pertencem a F+) e • completas (geram todas as dependências pertencentes a F+).

  16. Exemplo • R = (A, B, C, G, H, I)F = { A BA CCG HCG IB H} • alguns elementos de F+ • A H • transitividade a partir de A B e B H • AG I • aumento de A C com G, obtendo-se AG CG e depois transitividade com CG I • CG HI • de CG H e CG I : “regra de união” que pode inferir-se de • definição de dependências funcionais, ou • Aumento de CG I inferindo CG  CGI, aumento deCG H inferindo CGI HI, e depois transitividade

  17. Para calcular o fecho de um conjunto de dependências F: F+ = Frepeatfor each dependência funcional fF+ aplicar reflexividade e aumento em fadicionar os resultados a F+for each par de dependências f1e f2F+iff1 e f2 podem combinar-se para usar transitividadethen adicionar a dependência resultado a F+until F+ não mudar mais NOTA: Veremos, mais tarde, outro procedimento para esta problema Construção de F+

  18. Fecho de Dependências (Cont.) • Podemos facilitar a construção (manual) de F+ usando mais regras coerentes: • Se   e , então   (união) • Se   , então   e (decomposição) • Se   e  , então  (pseudotransitividade) Todas estas regras se podem derivar dos Axiomas de Armstrong.

  19. Fecho de um Conjunto de Atributos • Dado um conjunto de atributos a, define-se o fechode asobreF (denotado por a+) como sendo o conjunto de atributos que dependem funcionalmente de a dado F. I.e: aF+   a+ • Algoritmo para calcular a+ result := a;while (mudança em result) do for each in F do begin if  result then result := result end

  20. Exemplo de fecho de atributos • R = (A, B, C, G, H, I) • F = {A BA CCG HCG IB H} • (AG)+ 1. result = AG 2. result = ABCG (A C e A  B) 3. result = ABCGH (CG H e CG  AGBC) 4. result = ABCGHI (CG I e CG  AGBCH) • Será que AG é chave candidata? • Será AG superchave? • AG R? • E algum subconjunto próprio de AG é superchave? • A+R? • G+R?

  21. O algoritmo pode ser usa para vários fins: Testar superchaves: Para testar se  é superchave, calcular +, e verificar se + contém todos os atributos de R. Testar dependências funcionais Para ver se a dependência    é verdadeira (i.e. pertence a F+), basta ver se   +. Ou seja, basta calcular +, e verificar se contém . É um teste simples e muito útil Cálculo do fecho de F Para cada   R, calcular +. Para cada S  +, devolver como resultado a dependência   S. Uso de fecho de atributos

  22. Cobertura Canónica • Um conjunto de dependências, podem conter algumas delas que são redundantes (por se inferirem das outras) • Eg: A  C é redundante em: {A  B, B  C, A  C} • Partes de dependências também podem ser redundantes • E.g. : {A  B, B  C, A  CD} pode ser simplificado para {A  B, B  C, A  D} • E.g. : {A  B, B  C, AC  D} pode ser simplificado para {A  B, B  C, A  D} • Intuitivamente, uma cobertura canónica de F é um conjunto “minimal” de dependências, equivalente a F, e em que nenhuma dependência tem partes redundantes

  23. Atributos dispensáveis • Considere o conjunto de dependências F e a dependência   F. • O atributo A é dispensável (à esquerda) em  se A   e F implica (F – {})  {( – A) }. • O atributo A é dispensável (à direita) em  se A  e o conjunto (F – {})  {(– A)} implica F. • Nota: a implicação na direcção oposta é trivial em ambos os casos (uma dependência mais forte, implica sempre uma mais fraca) • Exemplo: Dado F = {AC, ABC } • B é dispensável em AB C porque AC implicaABC. • Exemplo: Dado F = {AC, ABCD} • C é dispensável em ABCD pois com AC, ABCD pode ser inferido de ABD

  24. Teste para atributos dispensáveis • Considere o conjunto F de dependências, e a dependência   F. • Para testar se A   é dispensável em • calcular ({} – A)+ usando as dependências em F • verificar se ({} – A)+ contém A; se contém, então A é dispensável • Para testar se A é dispensável em • calcular + usando as dependências em F’ = (F – {})  {(– A)}, • verificar se + contém A; se contém, então A é dispensável

  25. Cobertura Canónica • Uma cobertura canónicade F é um conjunto de dependências Fc tal que • F implica todas as dependências em Fc, e • Fcimplica todas as dependências em F, e • Nenhuma dependência em Fccontém atributos dispensáveis, e • O lado esquerdo de cada dependência em Fcé único. • Para calcular uma cobertura canónica de F:repeatUsar a regra da união para substituir as dependências em F11 e 11 por 112 Encontrar dependência  com atributo dispensável (em  ou ) Quando se encontra atributo dispensável, apaga-se de until F não muda • Nota: A regra da união pode tornar-se aplicável depois de retirados alguns atributos dispensáveis. Por isso há que reaplicá-la

  26. Exemplo de cálculo de cobertura canónica • R = (A, B, C)F = {A BC B C A BABC} • Combinar A BC e A B para A BC • Agora o conjunto é {A BC, B C, ABC} • A é dispensável em ABC porque BC implica AB C. • Agora o conjunto é {A BC, B C} • C é dispensável em ABC pois A BC é implicado por A B e B  C. • A cobertura canónica é: A B B C

More Related