Capítulo 7: Design de Bases de Dados

Slides:



Advertisements
Apresentações semelhantes
01/08/2011 Professor Leomir J. Borba- –
Advertisements

T I  C Módulo 2 Base de dados
AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
Normalização em BD Relacional
Python: Recursão Claudio Esperança.
SISTEMAS DE INFORMAÇÃO
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
DESENHO de BASE de DADOS RELACIONAL
Normalização.
Engenharia de Software
Exercícios PAA- Grafos
MODELO RELACIONAL Transparências baseadas no capítulo 3 do livro de KORTH e SILBERCHATZ e capítulo 7 do livro de ELMASRI e NAVATHE Juliana Amaral e Rodrigo.
Pesquisa em profundidade
Tópicos de Lógica Proposicional
©Silberschatz, Korth and Sudarshan (modificado)1Database System Concepts result := {R}; done := false; calcular F+; while (not done) do if (há um esquema.
1 Domínios Finitos A eficiência das programas em domínios finitos (incluindo booleanos) podem ainda ser melhoradas pelo uso de Algoritmos de Propagação.
1 Optimização Na programação por restrições, há que considerar não apenas a satisfação de restrições mas também a optimização de uma função objectivo.
17 Novembro 2006Algoritmos de Ordenação e Pesquisa Aplicação a Listas de Registos 1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º
Problemas de Forma Não-padrão
Introdução à Programação
Universidade Federal de Santa Catarina
Capítulo 7: Deadlocks.
Algoritmos Distribuídos Professora: Lúcia Drummond
Instituto de Computação - UFF Detecção de Terminação Algoritmos Distribuídos Professora: Lúcia Drummond.
(Dependência Funcional e Normalização)
EQUAÇÕES POLINOMIAIS Prof. Marlon.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem de Banco de Dados - SQL
Indução Métodos de prova já vistos Excepções
Linguagem de 1ª ordem da teoria de conjuntos
Banco de Dados Aplicado ao Desenvolvimento de Software
Conceitos Básicos.
Ricardo de Oliveira Cavalcanti roc3[at]cin.ufpe.br
Microsoft Access Carlos Sebastião.
Normalização de Dados. 2 SGBD + Banco de Dados Independência de dados Consistência de dados.
Fundamentos de Engenharia de SW
Comunicação Inclusiva Acessibilidade e Programação Web
Exercícios PAA- Grafos
Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações
©Silberschatz, Korth and Sudarshan (modificado)5.1.1Database System Concepts Capítulo 5: Outras linguagens Query-by-Example (QBE) Datalog.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
2.2.1Database System Concepts©Silberschatz, Korth and Sudarshan (Modificado) Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações Aspectos.
O Portal do Estudante de Computação
Normalização Normalização é o conjunto de regras que visa minimizar as anomalias de modificação dos dados e dar maior flexibilidade em sua utilização.
Pontifícia Universidade Católica de Goiás Departamento de Engenharia Curso de Graduação em Engenharia de Produção ENG 1004 – Linguagem de Programação para.
Análise de Sistemas de Informação
Prof. Christiano Lima Santos
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
©Silberschatz, Korth and Sudarshan (Modificado)3.3.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
Construção e Análise de Algoritmos
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Normalização Álvaro Vinícius de Souza Coêlho
©Silberschatz, Korth and Sudarshan (modificado)7.3.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
©Silberschatz, Korth and Sudarshan (modificado)10.1.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.
©Silberschatz, Korth and Sudarshan (Modificado)1.1Database System Concepts Capítulo 1: Introdução Função dos Sistemas de Bases de Dados Visão dos dados.
©Silberschatz, Korth and Sudarshan (modificado)9.1.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (Modificado)3.1.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
©Silberschatz, Korth and Sudarshan (modificado)7.3.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
Desenvolvimento de uma base de dados
Formas Normais Pedro Sousa 1 Dependências Funcionais e Formas Normais.
©Silberschatz, Korth and Sudarshan (modificado)7.4.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
Bases de dados: cruzamento de tabelas
2.1.1Database System Concepts©Silberschatz, Korth and Sudarshan (Modificado) Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações Aspectos.
©Silberschatz, Korth and Sudarshan (modificado)7.1.1Database System Concepts Capítulo 7: Design de Bases de Dados Objectivos com Design de Bases de Dados.
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
Fundamentos de Banco de Dados Prof. André Cypriano M. Costa
Transcrição da apresentação:

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

Objectivos com o Design de BDs Relacionais Pretendem-se encontrar “bons” conjuntos de esquemas 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.

Exemplo 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. nome Maria João Pedro Ana telef. 1111 2222 1112 3333 CPostal 2815 1000 1100 localidade Caparica Lisboa

Objectivos da Normalização 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

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) têm que aparecer na decomposição (R1, R2): R = R1  R2 Decomposição sem perdas: Para todas as relações possíveis r sobre o esquema R r = R1 (r) R2 (r) A decomposição de R em R1 e R2 é sem perdas sse pelo menos uma das dependências abaixo pertence a F+: R1  R2  R1 R1  R2  R2

Exemplo de decomposição sem perdas Decomposição de Amigos em Amigos1 = (nome,telefone, código_postal) e CPs = (código_postal, localidade) : r nome Maria João Pedro Ana telef. 1111 2222 1112 3333 CPostal 2815 1000 1100 localidade Caparica Lisboa Amigos1 (r) CPS (r) = r Notar que é valida: código_postal  localidade Amigos1(r) nome Maria João Pedro Ana telef. 1111 2222 1112 3333 CPostal 2815 1000 1100 CPs(r) CPostal 2815 1000 1100 localidade Caparica Lisboa

Exemplo de decomposição com perdas Decomposição de Amigos em: Amigos2 = (nome,telefone,localidade) e Loc = (localidade,código_postal). nome Maria João Pedro Ana telef. 1111 2222 1112 3333 CPostal 2815 1000 1100 localidade Caparica Lisboa r nome Maria João Pedro Ana telef. 1111 2222 1112 3333 CPostal 2815 1000 1100 localidade Caparica Lisboa Amigos2(r) Loc(r) ≠ nome Maria João Pedro Ana telef. 1111 2222 1112 3333 localidade Caparica Lisboa Amigos2(r) CPostal 2815 1000 1100 localidade Caparica Lisboa Loc(r) Note que nenhuma das duas dependências abaixo é válida localidade  código_postal localidade  nome, telefone

Normalização por uso de Dependências Quando decompomos um esquema R com dependências F, em R1, R2,.., Rn queremos Decomposição sem perdas: por forma a não se perder informação. Não haja redundância: Veremos à frente como … Preservação de dependências: Seja Fi o conjunto de dependências de F+ que só contêm atributos de Ri. A decomposição preserva as dependências se (F1  F2  …  Fn)+ = F+ Sem preservação de dependências, a garantia de integridade pode obrigar à computação de junções, sempre que se adicionam, apagam ou actualizam relações da base de dados. Tal pode tornar-se bastante ineficiente.

Exemplo R = (A, B, C) F = {A  B, B  C) R1 = (A, B), R2 = (B, C) Decomposição sem perdas: R1  R2 = {B} e B  BC Preserva as dependências R1 = (A, B), R2 = (A, C) R1  R2 = {A} and A  AB Não preserva as dependências (não se pode verificar B  C sem calcular R1 R2)

Teste de Preservação de Dependências Para verificar se  é preservada na decomposição R em R1, R2, …, Rn aplica-se o seguinte teste: result :=  while (alterações a result) do for each Ri na decomposição t := (result  Ri)+  Ri result := result  t Se result contem todos os atributos em , então    é preservada. Aplica-se este teste a todas as dependências de F, para verificar se a decomposição preserva as dependências Ao contrário do cálculo de F+ e (F1  F2  …  Fn)+ (que tem complexidade exponencial), este procedimento tem complexidade polinomial.

Forma Normal de Boyce-Codd Um esquema R diz-se na Forma Normal de Boyce-Codd, BCNF, relativamente a um conjunto de dependências F, sse para toda a dependência em F+ da forma  , onde   R e   R, pelo menos uma das condições é verdadeira:    é trivial (i.e.,   )  é superchave de R (i.e.,   R) Evita redundâncias Verificação de dependências funcionais definidas sobre atributos de R, limita-se a verificação de chaves.

Exemplo R = (A, B, C) F = {A  B B  C} Chave = {A} R não está em BCNF Decomposição em R1 = (A, B), R2 = (B, C) R1 e R2 estão na BCNF Decomposição sem perdas Preserva as dependências

Teste para BCNF Para determinar se uma dependência não trivial  é causa de violação de BCNF 1. calcular + (fecho de atributos em ), e 2. Verificar se inclui todos os atributos de R, i.e. é superchave de R. Se incluir, está na BCNF; caso contrário não está. Teste simplificado: Em vez de verificar para todas as dependências de F+, verificar apenas para as dependências numa cobertura canónica. Se nenhuma das dependências da cobertura canónica for contra a BCNF, então nenhuma das dependências de F+ vai contra a BCNF. Mas cuidado quando não se preservam as dependências!! E.g. Seja R (A, B, C, D), com F = { A  B, B  C} Decomposição de R em R1(A,B) e R2(A,C,D) Nenhuma das dependências em F contém só atributos de (A,C,D) Por isso, podemos (erradamente) pensar que R2 satisfaz BCNF. Mas a dependência A  C  F+ mostra que R2 não está na BCNF.

Algoritmo para Decomposição BCNF result := {R}; done := false; calcular F+; while (not done) do if (há um esquema Ri em result que não está na BCNF) then begin Seja    uma dependência (não trivial) sobre Ri tal que   Ri  F+, e    = ; result := (result – Ri)  (Ri – )  (,  ); end else done := true; Nota: cada Ri está na BCNF, e a decomposição é sem perdas.

Exemplo de Decomposição BCNF Amigos = (nome, telefone, código_postal, localidade) F = { nome  telefone, código_postal código_postal  localidade } Decomposição: result = {Amigos} código_postal  localidade  F+ e código_postal não é chave result = {(nome, telefone, código_postal), (código_postal, localidade)} Já está na BCNF.

Outro exemplo R = (balcão, localidade, activos, cliente, num_emprestimo, valor) F = {balcão  activos, localidade num_emprestimo  valor, balcão } Chave = {num_emprestimo, cliente} Decomposição result = {R} balcão  activos, localidade  F+ e balcão não é chave em R R1 = (balcão, activos, localidade ) R2 = (balcão, cliente, num_emprestimo, valor) result = {R1,R2} num_emprestimo  valor, balcão  F+ e num_emprestimo não é chave em R2 R3 = (num_emprestimo , valor, balcão) R4 = (cliente, num_emprestimo) result = {R1, R3, R4} Já está na BCNF

Teste de Decomposição BCNF Para verificar se Ri numa decomposição de R está na BCNF, Ou se testa Ri relativamente à restrição de F a Ri (i.e. todas as dependências em F+ que só contêm atributos de Ri) Ou se usa o conjunto original de dependências sobre R mas com o teste: Para todo   Ri, verificar se + não contém nenhum atributo de Ri- , ou contém todos os atributos de Ri. Se a condição for violada por alguma   em F, a dependência  (+ - )  Ri é verdadeira em Ri, e Ri viola BCNF. Usa-se essa dependência para decompor Ri

BCNF e preservação de dependências Nem sempre é possível obter uma decomposição BCNF que preserve as dependências. R = (J, K, L) F = {JK  L L  K} Duas chaves candidatas = JK e JL R não está na BCNF Nenhuma decomposição de R preserva JK  L

Exemplo Considere o esquema Gestores = (balcão, cliente, gestor-conta), com as dependências: gestor-conta  balcão cliente, balcão  gestor-conta Não está na BCNF (a dependência 1 não é trivial e gestor-conta não é superchave – não implica cliente) Decompor em Gestores-Bal = (balcão, gestor-conta) e Clientes = (cliente, gestor-conta) Agora já está na BCNF Mas não se preservam as dependências!!! A dependência 2 não se pode verificar numa só relação.