©silberschatz, korth and sudarshan (modificado)3.4.1database system concepts capítulo 3: modelo...

31
©Silberschatz, Korth and Sudarshan (Modificad 3.4.1 Database System Concepts 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

Upload: silvia-marina-brandt-mangueira

Post on 07-Apr-2016

236 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts

Capítulo 3: Modelo RelacionalCapí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

Page 2: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.2Database System Concepts

Operações Estendidas da Álg. RelacionalOperações Estendidas da Álg. Relacional

Aumentam a expressividade da Álgebra Relacional: Projecção Generalizada Funções de Agregação Junção Externa

Page 3: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.3Database System Concepts

Projecção GeneralizadaProjecção Generalizada Permite a utilização de funções aritméticas na lista de projecção.

F1, F2, …, Fn(E) E é uma expressão arbitrária de álgebra relacional. Cada uma das expressões F1, F2, …, Fn é uma expressão

aritmética envolvendo constantes e atributos no esquema de E. Dada a relação credit-info(customer-name, limit, credit-balance),

encontrar quanto cada cliente pode ainda gastar:

customer-name, limit – credit-balance (credit-info)

Há quantos dias foi cada uma das consultas

nConsulta, today – data (consultas)

Page 4: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.4Database System Concepts

Funções de Agregação e OperaçõesFunções de Agregação e Operações Funções de Agregação aplicam-se a uma colecção de valores

e devolvem um único valor como resultado.avg: média dos valoresmin: mínimo dos valoresmax: máximo dos valoressum: soma dos valorescount: número dos valores

Operação de Agregação na álgebra relacional

G1, G2, …, Gn g F1( A1), F2( A2),…, Fn( An) (E) E é uma expressão de álgebra relacional G1, G2 …, Gn é uma lista de atributos de agrupamento (pode ser

vazia) Cada Fi é uma função de agregação Cada Ai é um nome de um atributo

Page 5: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.5Database System Concepts

Operação de Agregação - ExemploOperação de Agregação - Exemplo Relação r:

A B

C

77310

g sum(c) (r)sum-C

27

Page 6: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.6Database System Concepts

Operação de Agregação - ExemploOperação de Agregação - Exemplo

Relação account agrupada por branch-name:

branch-name g sum(balance) (account)

branch-name account-number balance

PerryridgePerryridgeBrightonBrightonRedwood

A-102A-201A-217A-215A-222

400900750750700

branch-name balancePerryridgeBrightonRedwood

13001500700

Page 7: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.7Database System Concepts

Funções de Agregação (Cont.)Funções de Agregação (Cont.) O resultado da agregação não tem um nome

Pode-se recorrer à operação de renomeação para lhe dar um nome Por conveniência, permite-se a renomeação de atributos na

operação de agregação

Qual a média de idades dos pacientes de cada um dos médicos?

branch-name g sum(balance) as sum-balance (account)

nEmpr g avg(idade) as média (consultas pacientes)

Page 8: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.8Database System Concepts

Mais exemplosMais exemplos Quantos fármacos diferentes foram receitados em cada uma das

consultas?

nconsulta g count(codF) as quantos (receitas) Para cada médico, qual a quantidade média de fármacos receitados

por consulta?quantCons nconsulta g sum(quant) as soma (receitas)

nEmpr g avg(soma) (quantCons consultas)

Nota: Nas duas perguntas anteriores não se entra em conta com as consultas com 0 fármacos receitados!! (veremos já como resolver este problema)

Qual a idade do paciente mais velho?

g max(idade) as idade (pacientes)

Page 9: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.9Database System Concepts

Junção Externa (ou exterior)Junção Externa (ou exterior) Uma extensão da operação de junção que evita a perda de

informação. Calcula a junção e depois adiciona ao resultado os tuplos de

uma relação que não estão relacionados com a outra relação na junção.

Utiliza valores nulos : null significa que o valor é desconhecido ou que não existe Simplificadamente, todas as comparações com null são falsas por

definição. Estudaremos já de seguida o significado preciso das

comparações com nulos,

Page 10: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.10Database System Concepts

Junção Externa - ExemploJunção Externa - Exemplo

Relação loan

loan-number amountL-170L-230L-260

300040001700

Relação borrower

customer-name loan-numberJonesSmithHayes

L-170L-230L-155

branch-nameDowntownRedwoodPerryridge

Page 11: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.11Database System Concepts

Junção Externa – ExemploJunção Externa – Exemplo

Junção interna

loan Borrower

loan borrower

Junção externa esquerda

loan-number amount

L-170L-230

30004000

customer-name

JonesSmith

branch-name

DowntownRedwood

loan-number amountL-170L-230L-260

300040001700

customer-nameJonesSmithnull

branch-nameDowntownRedwoodPerryridge

Page 12: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.12Database System Concepts

Junção Externa - ExemploJunção Externa - Exemplo Junção externa direita loan borrower

loan-number amountL-170L-230L-155

30004000null

customer-nameJonesSmithHayes

loan-number amount

L-170L-230L-260L-155

300040001700null

customer-name

JonesSmithnullHayes

loan borrower Junção externa

branch-nameDowntownRedwoodnull

branch-name

DowntownRedwoodPerryridgenull

Page 13: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.13Database System Concepts

Consultas de exemploConsultas de exemplo Quais os fármacos que nunca foram receitados?

nomeF( nConsulta=null(fármacos receitas))

Quais as consultas em que não foi receitado qualquer fármaco?

nConsulta( nCodF=null(consultas receitas)) Quantos fármacos diferentes foram receitados em cada uma das

consultas?

nconsulta g count(codF) as quantos (consultas receitas) Para cada médico, qual a quantidade média de fármacos receitados

por consulta?quantCons nconsulta g sum(quant) as soma (consultas receitas)

nEmpr g avg(soma) (quantCons consultas)

Page 14: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.14Database System Concepts

Valores NulosValores Nulos É possível que um tuplo tenha um valor nulo, denotado por null,

para algum dos seus atributos null significa um valor desconhecido ou que não existe. O resultado de qualquer expressão aritmética envolvendo um

null é null. As funções de agregação ignoram os valores nulos

Decisão arbitrária. Alternativamente, poderia-se retornar null. Segue-se a semântica da SQL no tratamento de valores nulos.

Na eliminação de duplicados e agrupamento, um null é tratado como um outro valor qualquer, assumindo-se que dois nulls são o mesmo Alternativa: assumir que cada null é diferente de todos os outros Ambas são decisões arbitrárias, portanto segue-se a SQL

Page 15: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.15Database System Concepts

Valores NulosValores Nulos Comparações com valores nulos devolvem o valor de verdade

unknown Se false fosse usado em vez unknown, então not (A < 5)

não seria equivalente a A >= 5 Lógica a três valores com o valor de verdade unknown:

OR: (unknown or true) = true, (unknown or false) = unknown (unknown or unknown) = unknown

AND: (true and unknown) = unknown, (false and unknown) = false, (unknown and unknown) = unknown

NOT: (not unknown) = unknown Em SQL “P is unknown” é verdade se o predicado P tem valor de

verdade unknown Resultado do predicado de selecção é tratado como false se

tiver valor de verdade unknown

Page 16: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.16Database System Concepts

Modificação da Base de DadosModificação da Base de Dados O conteúdo da base de dados pode ser modificado através das

seguintes operações: Remoção Inserção Actualização

Todas estas operação são expressas por intermédio do operador de atribuição.

Page 17: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.17Database System Concepts

RemoçãoRemoção Uma operação de remoção é expressa de uma maneira

semelhante a uma consulta, excepto que os tuplos seleccionados são removidos da base de dados.

Só se podem remover tuplos integralmente; não se podem apagar valores de determinados atributos

Uma remoção é expressa em álgebra relacional por:

r r – Eem que r é uma relação e E é uma operação de álgebra relacional.

Page 18: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.18Database System Concepts

Exemplos de RemoçãoExemplos de Remoção

Apagar todas as contas na agência de Perryridge.

account account – branch-name = ‘Perryridge’ (account) Apagar todos os registos de empréstimos de montante entre 0 e 50

loan loan – amount 0and amount 50 (loan)

Apagar todas as contas de balcões localizados em Needham.

r1 branch-city = ‘Needham’ (account branch)

r2 branch-name, account-number, balance (r1)

r3 customer-name, account-number (r2 depositor)

account account – r2

depositor depositor – r3

Page 19: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.19Database System Concepts

Exemplos de Remoção (cont)Exemplos de Remoção (cont)

Apagar toda a informação relativa a consultas anteriores a 2000:

r1 data < 01-01-2000 (consultas)

r2 codF,nConsulta,quant (receitas r1)

consultas consultas – r1

receitas receitas – r2

Page 20: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.20Database System Concepts

InserçãoInserção Para inserir informação numa relação podemos:

especificar um tuplo a ser inserido escrever uma consulta cujo resultado é um conjunto de tuplos a

inserir Na álgebra relacional, uma inserção é expressa por:

r r Eem que r é uma relação e E é uma expr. de álgebra relacional.

A inserção de um único tuplo é efectuada quando a expressão E é a relação constante contendo esse tuplo.

Page 21: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.21Database System Concepts

Exemplos de InserçãoExemplos de Inserção Inserir informação na base de dados especificando que o cliente

Smith tem $1200 na conta A-973 na agência de Perryridge.

account account {(‘Perryridge’, A-973, 1200)}

depositor depositor {(‘Smith’, A-973)}

Dar um bónus a todos os mutuários na agência de Perryridge: uma conta de poupança de $200. O número do empréstimo é utilizado para número da conta de poupança.

r1 (branch-name = “Perryridge” (borrower loan))

account account branch-name, account-number,200 (r1)

depositor depositor customer-name, loan-number,(r1)

Page 22: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.22Database System Concepts

Exemplos de InserçãoExemplos de Inserção Inserir informação na base de dados especificando que um novo

paciente, com BI nº 10000000 e nome Paulo, teve uma consulta (nº1000) no dia 30-09-2003 com o médico João (assumindo que só há um médico com esse nome)

pacientes pacientes {(10000000,‘Paulo’,null,null,null)}

consultas consultas 1000,30-09-2003,1000,nEmpr (nomeM = “João” (médicos))

Page 23: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.23Database System Concepts

ActualizaçãoActualização Um mecanismo para alterar um valor de um tuplo sem alterar

todos os valores do tuplo. Recorre-se ao operador de projecção generalizada para

efectuar este tipo de tarefa

r F1, F2, …, FI, (r)

Cada Fi, ou é o i-ésimo atributo de r, se o i-ésimo atributo não for alterado, ou

uma expressão Fi, envolvendo apenas constantes e atributos de r, que permite calcular o novo valor do atributo.

Page 24: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.24Database System Concepts

Exemplos de ActualizaçõesExemplos de Actualizações Pague juros de 5% em todas as contas

account AN, BN, BAL * 1.05 (account)

em que AN, BN e BAL são abreviaturas para account-number, branch-name e balance, respectivamente.

Pague 6% de juros em todas as contas com saldo superior a $10,000 e 5% às restantes contas.

account AN, BN, BAL * 1.06 ( BAL 10000 (account)) AN, BN, BAL * 1.05 (BAL 10000 (account))

Page 25: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.25Database System Concepts

VistasVistas Em certas circunstâncias, não é desejável que todos os

utilizadores possam aceder a todo o modelo lógico (i.e. a todas as relações armazenadas na base de dados)

Considere o caso de um empregado que necessita de saber o número de empréstimo de um cliente, mas que não precisa de saber o montante desse empréstimo. Este empregado deverá ver apenas a relação descrita em álgebra relacional por

customer-name, loan-number (borrower loan) Ou alguém que pode aceder a dados de nomes de médicos e

pacientes das consultas, mas não ao que foi prescrito nem a outra informação dos médicos e pacientes:

nConsulta,nomeP,nomeM,data (pacientes consultas médicos) Qualquer relação que não pertença ao modelo conceptual mas

que se torne visível ao utilizador como uma “relação virtual” é designada por vista.

Page 26: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.26Database System Concepts

Definição de vistasDefinição de vistas Uma vista é definida por intermédio da instrução create view

create view v as <query expression>

em que <query expression> é uma expressão de álgebra relacional qualquer. O nome da vista é v.

Após a definição de uma vista, o seu nome pode ser utilizado para se referir à relação virtual gerada pela vista.

Uma definição de uma vista não é o mesmo que criar uma nova relação a partir da avaliação da sua expressão. Em vez disso, a definição da vista permite guardar a expressão que depois é substituída nas consultas que utilizam a vista.

Page 27: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.27Database System Concepts

Exemplos de VistasExemplos de Vistas Considere-se a vista (com o nome all-customer) contento os

nomes das agências e seus clientes.

create view all-customer asbranch-name, customer-name (depositor account)

branch-name, customer-name (borrower loan)

Pode-se assim encontrar todos os clientes da agência de Perryridge através de:

branch-name

(branch-name = ‘Perryridge’ (all-customer))

Page 28: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.28Database System Concepts

Actualizações através de VistasActualizações através de Vistas Modificações nas bases de dados através de vistas devem ser

traduzidas para modificações das verdadeiras relações presentes na base de dados.

Considere-se a pessoa que deve ter acesso à informação dos empréstimos com a excepção do seu montante. A vista que essa pessoa pode utilizar, branch-loan, define-se como:

create view branch-loan asbranch-name, loan-number (loan)

Como se permite que o nome de uma vista ocorra em qualquer sítio onde se pode usar uma relação, essa pessoa poderá sentir-se tentada a escrever:

branch-loan branch-loan {(“Perryridge”, L-37)}

Page 29: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.29Database System Concepts

Actualizações através de Vistas (Cont.)Actualizações através de Vistas (Cont.)

A inserção anterior deve ser traduzida para uma inserção na relação loan a partir da qual se construiu branch-loan.

Uma inserção em loan requer um valor para amount. Podemos: Rejeitar a inserção e enviar uma mensagem de erro para o

utilizador. Inserir o tuplo (“L-37”, “Perryridge”, null) na relação loan

Algumas actualizações através de vistas são impossíveis de traduzir para actualizações das relações da base de dados: create view v as branch-name = “Perryridge” (account)) v v (L-99, Downtown, 23)

Outras não têm uma tradução única all-customer all-customer (Perryridge, John)

Deve-se escolher loan ou account, ecriar um novo número de empréstimo ou de conta!

Page 30: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.30Database System Concepts

Vistas definidas a partir de outras vistasVistas definidas a partir de outras vistas Uma vista pode ser utilizada na expressão de definição de outra

vista Uma vista v1 depende directamente de uma vista v2 se v2 é

utilizada na expressão que define v1

Uma vista v1 depende de uma vista v2 se v1 depende directamente de v2 ou se existe um caminho de dependências entre v1 e v2

Uma vista v diz-se recursiva se depender dela própria.

Page 31: ©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução

©Silberschatz, Korth and Sudarshan (Modificado)3.4.31Database System Concepts

Expansão de vistasExpansão de vistas Forma de atribuir significado a vistas definidas em termos de

outras vistas. Seja a vista v1 definida em termos de uma expressão e1 que

pode ela própria conter vistas. Para expandir as vistas numa expressão repete-se

sucessivamente o seguinte passo:

repeatEncontrar uma vista vi em e1

Substituir a vista vi pela expressão que a define until não ocorram mais vistas em e1

Desde que as definições das vistas não sejam recursivas, este ciclo terminará sempre.