1 / 25

Capítulo 3: Modelo Relacional

Capítulo 3: Modelo Relacional. Estrutura das Bases de Dados Relacionais Redução a tabelas de uma Esquema ER Álgebra Relacional Operações Estendidas da Álgebra Relacional Modificação da Base de Dados Vistas. Linguagem de Consulta/Interrogação.

shawna
Download Presentation

Capítulo 3: Modelo Relacional

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 3: Modelo Relacional • Estrutura das Bases de Dados Relacionais • Redução a tabelas de uma Esquema ER • Álgebra Relacional • Operações Estendidas da Álgebra Relacional • Modificação da Base de Dados • Vistas

  2. Linguagem de Consulta/Interrogação • Linguagem a que o utilizador recorre para obter informação a partir da base de dados. • Categorias de linguagens • procedimentais • declarativas • Linguagens “Puras”: • Álgebra Relacional • Cálculo Relacional de Tuplos • Cálculo Relacional de Domínios • As linguagens puras formam a base teórica das linguagens de consulta utilizadas na prática.

  3. Álgebra Relacional • Linguagem declarativa • Seis operadores básicos • selecção • projecção • união • diferença de conjuntos • produto cartesiano • renomeação • Os operadores têm como argumentos relações de entrada e devolvem uma relação como resultado.

  4. Operação de Selecção – Exemplo A B C D • Relação r         1 5 12 23 7 7 3 10 • A=B ^ D > 5(r) A B C D     1 23 7 10

  5. Operação de Selecção • Notação: p(r) • p é designado por predicado de selecção • Definida como: p(r) = {t | t  re p(t)} Em que p é uma fórmula do cálculo proposicional constituída por termos ligados por:  (e),  (ou),  (não)Cada termo é da forma: <atributo> op <atributo> ou <constante> em que op pode ser: =, , >, . <.  • Exemplo de selecção:branch-name=‘Perryridge’ (account)

  6. Operação de Projecção – Exemplo • Relação r: A B C     10 20 30 40 1 1 1 2 A C A C • A,C (r)     1 1 1 2    1 1 2 =

  7. Operação de Projecção • Notação:A1, A2, …, Ak (r) em que A1, ..., Ak são nomes de atributos e r é uma relação. • O resultado é a relação com as k colunas obtidas eliminando as colunas que não estão listadas • São removidas as linhas duplicadas no resultado, dado que as relações são conjuntos • E.g. eliminar o atributo branch-name de accountaccount-number, balance (account)

  8. Operação de União – Exemplo • Relações r, s: A B A B    1 2 1   2 3 s r r  s: A B     1 2 1 3

  9. Operação de União • Notação: r s • Definida como: r s = {t | t  r ou t  s} • Para r s ser válida: 1. r,s devem ter a mesma aridade (igual número de atributos) 2. Os domínios dos atributos têm de ser compatíveis (e.g., os valores da 2ª coluna de r são do mesmo tipo dos valores da 2ª coluna de s) • E.g. determinar quais os clientes que têm uma conta ou um empréstimo customer-name (depositor)  customer-name (borrower)

  10. Operação de Diferença de Conjuntos-Ex. • Relações r, s: A B A B    1 2 1   2 3 s r r – s: A B   1 1

  11. Operação de Diferença de Conjuntos • Notação: r – s • Definida como: r – s = {t | t re t  s} • As diferenças de conjuntos só podem ser efectuadas entre relações compatíveis. • r e s devem ter a mesma aridade • os domínios dos atributos de r e s devem ser compatíveis

  12. Operação de Produto Cartesiano-Ex. A B C D E Relations r, s:   1 2     10 10 20 10 a a b b r s r xs: A B C D E         1 1 1 1 2 2 2 2         10 10 20 10 10 10 20 10 a a b b a a b b

  13. Operação de Produto Cartesiano • Notação: r x s • Definida como: r x s = {t q | t  r e q  s} • Assume que os atributos de r(R) e s(S) são disjuntos. (Ou seja, R  S = ). • Se os atributos de r(R) e s(S) não são disjuntos, então têm que se utilizar renomeações.

  14. Composição de Operações • Pode-se construir expressões combinando várias operações • Exemplo: A=C(r x s) • r x s • A=C(r x s) A B C D E         1 1 1 1 2 2 2 2         10 10 20 10 10 10 20 10 a a b b a a b b A B C D E       10 20 20 a a b 1 2 2

  15. Operação de Renomeação • Permite dar um nome, e portanto referir, aos resultados de expressões de álgebra relacional. • Permite que uma relação seja referida por mais de um nome. Exemplo: x (E) Devolve a expressão E com o nome X Se uma expressão de álgebra relacional E tem aridade n, então x(A1, A2, …, An)(E) Devolve a expressão E com o nome X, e com os atributos renomeados para A1, A2, …., An.

  16. Definição Formal • Uma expressão básica na álgebra relacional é: • Uma relação na base de dados • Uma relação constante • Sejam E1 e E2 expressões de álgebra relacional; então todas as expressões abaixo são expressões de álgebra relacional: • E1 E2 • E1 - E2 • E1 x E2 • p (E1), P é um predicado nos atributos de E1 • s(E1), S é uma lista com alguns dos atributos de E1 • x(E1), x é um novo nome para o resultado de E1

  17. Exemplo Bancário branch (branch-name, branch-city, assets) customer (customer-name, customer-street, customer-only) account (account-number, branch-name, balance) loan (loan-number, branch-name, amount) depositor (customer-name, account-number) borrower (customer-name, loan-number)

  18. Consultas de Exemplo • Determinar todos os empréstimos superiores a $1200 amount> 1200 (loan) • Encontrar os números dos empréstimos de montante superior a $1200 loan-number (amount> 1200 (loan))

  19. Consultas de Exemplo • Listar os nomes de todos os clientes que têm um empréstimo, uma conta, ou ambas as coisas customer-name (borrower)  customer-name (depositor) • Encontrar os clientes que têm um empréstimo e uma conta no banco. customer-name (borrower)  customer-name (depositor)

  20. Consultas de Exemplo • Determinar todos os clientes que têm um empréstimo na agência de Perryridge. customer-name (branch-name=‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan))) • Listar os nomes dos clientes que possuem um empréstimo na agência de Perryridge mas que não tem nenhuma conta no banco. customer-name (branch-name = ‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan))) – customer-name(depositor)

  21. Consultas de Exemplo • Determinar todos os clientes que têm um empréstimo na agência de Perryridge. • Query 1customer-name(branch-name = ‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan)))  Query 2 customer-name(loan.loan-number = borrower.loan-number( (branch-name = ‘Perryridge’(loan)) x borrower) )

  22. Consultas de Exemplo Determinar o saldo mais elevado entre todas as contas • Renomear a relação account como d • A consulta é: balance(account) - account.balance (account.balance < d.balance(account x rd (account)))

  23. Exemplo Clínica médicos(nEmpr,nomeM,especialidade) pacientes(nBI,nomeP,telefone,morada,idade) fármacos(codF,nomeF) consultas(nConsulta,data,nBI,nEmpr) receitas(codF,nConsulta,quantidade)

  24. Consultas de Exemplo • Quais os pacientes com mais de 50 anos de idade? idade> 50 (pacientes) • Quais os nomes dos pacientes com mais de 50 anos de idade? nomeP (idade> 50 (loan)) • Quais os fármacos que já foram receitados em consultas da clínica? nomeF((receitas.codF = fármacos.codF(receitas x fármacos))) • Quais os fármacos que nunca foram receitados? nomeF(fármacos) – nomeF(receitas.codF = fármacos.codF(receitas x fármacos)))

  25. Consultas de exemplo • Qual a idade do paciente mais velho? • Renomear a relação pacientes como d • A consulta é: idade(pacientes) – pacientes.idade(  pacientes.idade < d.idade(pacientes x rd (pacientes) ) ) • E quais os (nomes dos) pacientes com essa idade? • Seja r a relação da pergunta anterior: nomeP( pacientes.idade = r.idade (pacientes x r))

More Related