Download - Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Transcript
Page 1: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Banco de Dados II 2009.2Prof. Cláudio Baptista, Ph.D.

Page 2: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Histórico Crítica ao Modelo Relacional Exemplo de Motivação Introdução ao Modelo de Objetos ODMG ODL ODMG OQL

Page 3: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

1986 SQL-86 (SQL1) - padrão originalmente desenvolvido pela ANSI, posteriormente adotado pela ISO

1989 SQL-89 - extensão do SQL-86 publicado em 89 OMG - criação do Object Management Group 1991 ODMG - criação do Object Database Management Group 1992 SQL-92 (SQL2) - padrão aprovado pela ISO 1993 ODMG 1.2 1996 SQL-92/PSM - extensão do SQL-92 - provê linguagem computacionalmente completa 1997 ODMG 2.0 1999 SQL:1999 (SQL3) - padrão aprovado em 1999 pela ISO (após 7

anos de trabalho)◦ - "SQL orientada a objeto"◦ - SGBDs comerciais oferecem parte do SQL:1999

2000 ODMG 3.0 2004 SQL-2003

◦ Aprimoramento de SQL:1999◦ Introdução de XML

Page 4: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Abandono gradual do padrão (SQL-92)◦ MOOSE - major object-oriented SQL extensions:

inúmeras propostas acadêmicas e industriais para estender SQL-92 com conceitos OO

Aplicações presas a:◦ extensões OO ad-hoc oferecidas pelos SGBDs

comerciais, ou◦ um modelo de dados arcaico (o modelo

relacional / 1NF) Solução:

◦ SQL:1999

Page 5: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SGBDs Relacionais (SGBDRs) - Virtudes:◦ Estrutura:

1NF é simples Integridade referencial é útil e semanticamente poderosa

◦ Comportamento: SQL é declarativa (não navegacional) SQL manipula tabelas (conjuntos de tuplas)

◦ Aplicações convencionais: "casamento" adequado com SQL através de cursores

◦ sistemas já consolidados no mercado◦ boa performance

muitos anos de pesquisa e aprimoramento eficiência: otimização de consultas, gerenciamento de

transações◦ Robustez◦ Padronização

Page 6: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SGBDs Relacionais (SGBDRs) - Problemas:◦ Problemas conceituais:

Estrutura: falta de suporte para valores complexos (ou aderência a

1NF): força a criação de tabelas artificiais

falta de suporte para OIDs: força a definição de chaves artificiais

Comportamento: SQL não oferece nenhum recurso para encapsulamento

◦ Outros: SQL-92 não possui recursão Aplicações OO: "descasamento" completo

entre SQL e OO-PLs

Page 7: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Motivação para BDOO◦ atender os requisitos de aplicações não

convencionais: engenharia e manufatura (CAD/CAM, CIM) aplicações científicas (Meteorologia, Genética, etc.) aplicações envolvendo dados geográficos (GIS) aplicações multimídia / hipermídia ...

◦ acompanhar a evolução de LPs

Page 8: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SGBDs Orientado a Objetos (SGBDOO)◦ modelo de dados mais rico

adequado ao mercado de aplicações não convencionais

◦ pior desempenho, se comparado com SGBDR◦ heterogeneidade a nível de modelo e de

capacidades de consulta e atualização

Page 9: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SGBDs Objeto-Relacional (SGBDOR)◦ combina as melhores características do modelo

de objetos no modelo relacional modelo rico + eficiência no gerenciamento de dados

◦ tecnologia relativamente nova◦ exemplos: Oracle 11g, Informix, DB2, Postgresql

Page 10: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Crítica do Modelo Relacional◦Novas aplicações necessitam de novos

conceitos, principalmente tipos complexos de dados e encapsulamento

◦Vários desses novos conceitos existem há muitos anos em linguagens de programação orientadas a objeto

Um Exemplo de Motivação◦Nosso problema é de BD espacial. Trata-se

de achar os retângulos superpondo o quadrado de lado de tamanho um

Page 11: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Condições para a superposição: x1 <= 1 e y1 <= 1; X2 >= 0 e y2 >= 0, não importando o quadrante

As condições para a superposição são válidas se x2 > x1 (ou ponto P2 à direita de ponto P1)

Page 12: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Solução relacional◦ Retângulos (X1, X2, Y1, Y2)◦ Regra de integridade: Check (X2 > X1)

SELECT * FROM RETANGULOS WHERE (x1 <= 1 AND y1 <= 1) AND (x2 >= 0 AND y2 >=0)

Page 13: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Três problemas com esta solução◦ P1. Esquema obscuro◦ P2. Consulta obscura◦ P3. Execução com provável baixo

desempenho. Como indexar a tabela Retângulos?

Queremos:a. Representar um ponto como pontob. Escrever uma consulta legívelc. Desempenho

Solução: BDOO

Page 14: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Solução BDOO: Esquema

Retângulo Ponto2N

{Ponto2.X > Ponto1.X}

XY

sobrepoe_quadrado_de_lado_um();...

Definido_por

Repositório:Retângulos

Page 15: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Linguagem de Consulta OO, Estilo SQL

• Quais os retângulos que sobrepõem um quadrado de lado um? −Select r.ponto1, r.ponto2

From Retangulos r Where

r.sobrepoe_quadrado_de_lado_um()

Basta ler, para entender!

sobrepoe_quadrado_de_lado_um() é indexável, como qualquer coluna de tabela

Page 16: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Encapsulamento

• Encapsulamento das condições de

sobreposiçãoBoolean sobrepoe_quadrado_lado_um() {

If ((self.ponto1.x1 <= 1 and self.ponto1.y1 <= 1)

and (self.ponto2.x2 >= 0 and self.ponto2. y2 >=0)) then return true else return false; }

Page 17: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Encapsulamento

• Regra de integridade: implementada no método construtor Retangulo()

Retangulos agora torna-se um repositório de objetos da classe Retangulo

• O encapsulamento deve ser parcial, para ainda permitir interfaces estilo-SQL (Select colunax ...)

Page 18: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

O Mercado de SGBDs OO

• SGBD OO puro:• Versant• O2 Technology• Objectivity• Servio Logic• Object Design: ObjectStore

• SGBDOR:− Oracle 11g− IBM DB2− Informix

• Incorporado pela IBM− Postgresql

Page 19: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

ODMG - Object Database Management Group

ODL - Object Definition Language, como o CREATE TABLE do SQL

OQL - Object Query Language, tenta imitar SQL no framework OO

Page 20: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

ODMG imaginou que vendedores de SGBD OO implementariam uma linguagem OO como C++ com extensões (OQL), que permitisse o programador transferir dados entre o banco de dados e a linguagem hospedeira de forma fácil.

Page 21: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Fundação: setembro de 1991 Objetivo: definir um padrão para garantir a

portabilidade das aplicações escritas seguindo o modelo OO

Presidente: R. G. G. Cattell Web site: www.odmg.org Versões: ODMG 1.2 (1993), ODMG 2.0 (março

1997), ODMG 3.0 (janeiro 2000) Padrões definidos pelo ODMG:

◦ modelo de objetos◦ linguagem de definição de dados - ODL◦ linguagem de consulta - OQL◦ acoplamento com C++ , Smalltalk e Java

Page 22: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Literal = valor + comportamento Classificação dos literais:

◦ Atomic: corresponde aos tipos de dados simples◦ Strutured: criado usando o construtor Struct◦ collection criado com os construtores

Set<t>, Bag<t>, List<t>, Array<t>, Dictionary<k,t>onde t é o tipo de objetos ou literais na coleção

e k é o tipo da chave, no caso de dicionários(note que t pode ser um tipo de objeto ou

literal)

Page 23: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Objeto = OID + nome + estado + comportamento◦ OID = identificador interno gerado pelo sistema, não

sendo visível ao usuário◦ nome:

é opcional deverá ser único no BD a que o objeto pertence os objetos nomeados servirão de pontos de entrada para o

BD◦ estado = valores das propriedades do objeto, incluindo:

atributos do objeto relacionamentos (binários) entre o objeto e outros objetos

◦ comportamento = operações permitidas sobre o objeto

Page 24: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Fábrica = objeto utilizado para gerar ou criar outros objetos◦ possui necessariamente uma operação que gera

novos objetos (como novos OIDs)

Page 25: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Interface = definição de estrutura + assinaturas de operações◦ as interfaces não podem ser instanciadas, ou

seja,não podem gerar conjuntos de objetos◦ utilizadas essencialmente para organizar as

operações

Page 26: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Classes = definição de estrutura + assinaturas de operações

as classes podem ser instanciadas, ou seja, podem gerar extensões - conjuntos de objetos – e definir chaves para estas extensões

a definição da estrutura inclui a especificação de:◦ atributos:

simples e complexos de referência, utilizados para representar relacionamentos 1-

n entre os objetos da classe e objetos de outra classe◦ relacionamentos:

utilizados para representar relacionamentos binários 1-n ou n-m entre os objetos da classe e objetos de outra classe:

permitem especificar o relacionamento inverso não devem ser utilizados quando o relacionamento n-m

possui atributos

Page 27: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Herança Comportamental (via ":")◦ uma interface pode ser uma especialização de

outras interfaces,das quais herda as operações◦ uma classe pode ser uma especialização de

outras interfaces, das quais herda as operações Herança Comportamental e Estrutural (via

Extends)◦ uma classe pode ser uma especialização de

apenas outra classe, da qual herda a estrutura e as operações

Page 28: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

ODL é usado para definir classes persistentes, cujos objectos podem ser armazenados permanentemente no BD.◦ Classes ODL assemelham-se a Entity sets com

relacionamentos binários, mais métodos.

Page 29: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Uma Declaração de classe inclui:1. Um nome para a classe.2. Declaração de chaves (key) opcional.3. Declaração de Extent = nome para o conjunto

de objetos correntes na classe (instâncias).4. Declaração de Elementos. Um element pode

ser um atributo, um relacionamento, ou um método.

Page 30: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

class <nome> {<lista de declarações de elementos, separados por ; >

}

Exemplo:Class Estudante (extent Estudantes) {

attribute string name;attribute int idade;

}

Page 31: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Atributos são elementos com um tipo que não envolve classes.

attribute <tipo> <nome>; Relacionamentos conectam um objeto ao

um ou mais outros objetos de uma classe.relationship <tipo> <nome>

inverse <relationship>;

Page 32: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Suponha uma classe C que tenha um relacionamento R a uma classe D.

Então a classe D deve ter algum relacionamento S à classe C.

R e S devem ser inversos.◦ Se um objeto d está relacionado a um objeto c

via R, então c deve estar relacionado a d via S.

Page 33: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

33

Ex.: Atributos e Ex.: Atributos e RelacionamentosRelacionamentos

class Bar {attribute string name;attribute string addr;relationship Set<Beer> serves inverse Beer::servedAt;

}class Beer {

attribute string name;attribute string manf;relationship Set<Bar> servedAt inverse Bar::serves;

}

O tipo de relacionamento servesÉ um set de Beer objects.

O operador :: conecta um nomeà direita ao contexto donome à esquerda

Page 34: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

34

Tipos de Tipos de RelacionamentosRelacionamentos O tipo de um relacionamento é:

1. Uma classe, como Bar. Neste caso, um objeto com este relacionamento pode estar conectado a apenas um objeto Bar.

2. Set<Bar>: o objeto está conectado a um conjunto de objetos Bar.

3. Bag<Bar>, List<Bar>, Array<Bar>: o objeto está conectado a um bag, list, ou array de objetos Bar.

Page 35: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

35

Multiplicidade dos Multiplicidade dos RelacionamentosRelacionamentos Todos os relacionamento ODL são

binários. Relacionamentos Muitos-para-Muitos

têm Set<…> para o tipo do relacionamento e seu inverso.

Relacionamentos Muitos-para-Um têm Set<…> no relacionamento do lado Um e a apenas a classe para o relacionamento do lado Muitos

Relacionamentos Um-para-Um têm classes com o tipo em ambas direções.

Page 36: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

36

Exemplo: MultiplicidadeExemplo: Multiplicidade

class Drinker { …relationship Set<Beer> likes inverse Beer::fans;relationship Beer favBeer inverse Beer::superfans;

}class Beer { …

relationship Set<Drinker> fans inverse Drinker::likes;relationship Set<Drinker> superfans inverse Drinker::favBeer;

}

Many-many uses Set<…>in both directions.

Many-one uses Set<…>only with the “one.”

Page 37: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

37

Exemplo2: MultiplicidadeExemplo2: Multiplicidade

class Drinker {attribute … ;relationship Drinker husband inverse wife;relationship Drinker wife inverse husband;relationship Set<Drinker> buddies

inverse buddies;}

husband and wife areone-one and inversesof each other.

buddies is many-many and itsown inverse. Note no :: neededif the inverse is in the same class.

Page 38: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

38

Lidando com Relacionamentos Lidando com Relacionamentos MúltiplosMúltiplos

ODL não dar suporte a relacionamentos ternários.

Podemos simular relacionamentos ternários através de uma classe de “conexão”, cujos objetos representam tuplas de objetos que nós gostariamos de conectar via o relacionamento ternário.

Page 39: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

39

Classes de ConexãoClasses de Conexão

Suponha que queremos conectar as classes X, Y, e Z através do relacionamento R.

Projete uma classe C, cujos objetos representam uma tripla de objetos (x, y, z) das classes X, Y, and Z, respectivamente.

Precisamos de três muitos-para-um relacionamentos de (x, y, z) para cada um de x, y, e z.

Page 40: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

40

Exemplo: Classe de Exemplo: Classe de ConexãoConexão Suponha que tenhamos as classes Bar e

Beer, e queremos representat o preço de cada Beer em vendida em cada Bar.◦ Um relacionamento muitos-para-muitos entre

Bar e Beer não pode ter o atributo preço como ocorre no modelo E/R.

One solution: cria-se a classe Price e uma classe de conexão BBP para representar uma tripla bar, beer, e price.

Page 41: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

41

Exemplo --- ContinuaçãoExemplo --- Continuação

Uma vez que objetos Price são apenas números, uma melhor solução seria:

1. Dar aos objetos BBP um atributo price.2. Usar dois relacionamentos muitos-para-um

entre um objeto BBP e os objetos Bar e Beer.

Page 42: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

42

Exemplo, em ODLExemplo, em ODL

Definição de BBP:class BBP {

attribute price:real;relationship Bar theBar inverse Bar::toBBP;relationship Beer theBeer inverse Beer::toBBP;

} Bar e Beer devem ser modificados para

incluir relacionamentos, ambos chamados toBBP, e ambos do tipo Set<BBP>.

Page 43: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

43

Structs e EnumsStructs e Enums

Atributos podem ter uma estrutura (com em C) ou ser uma enumeration.

Declare comattribute [Struct ou Enum] <nome do

struct ou enum> { <detalhes> }<nome do atributo>;

Detalhes são os nomes dos campos e tipos de um Struct, uma lista de constantes de um Enum.

Page 44: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

44

Exemplo: Struct e EnumExemplo: Struct e Enum

class Bar {attribute string name;attribute Struct Addr

{string street, string city, int zip} address;attribute Enum Lic

{ FULL, BEER, NONE } license;relationship …

}

Nomes para aestrutura eenumeração

nomes dos atributos

Page 45: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

45

Declarações de MétodosDeclarações de Métodos

Uma definição de classe pode incluir declarações de métodos para a classe.

Informação consiste de:1. Tipo de retorno, se algum.2. Nome do método.3. Argument modes e tipos (sem nomes).

Modes são in, out, e inout.4. Quaisquer exceções que o método possa

lançar.

Page 46: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

46

Exemplo: MétodosExemplo: Métodos

real cre(in string)raises(semNotas);1. O método cre retorna um número real,

que contém o CRE de um aluno.2. cre recebe um argumento, uma string

(matrícula do aluno) e não modifica este argumento.

3. cre pode lançar a exceção semNotas.

Page 47: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

47

Tipos em ODL Tipos em ODL

Tipos básicos: int, real/float, string, enumerated types, e classes.

Type constructors:◦ Struct para estruturas.◦ Collection types : Set, Bag, List, Array, e

Dictionary ( = mapeamento de um tipo domínio type para um tipo imagem).

Tipos Relationship podem apenas ser uma classe ou um tipo collection aplicado a uma classe.

Page 48: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

48

ODL SubclassesODL Subclasses

Usual object-oriented subclasses. Indica superclasse com extends e seu

nome. Subclasse lista apenas as propriedades

únicas à mesma.◦ Herda as propriedades da superclasse.

Page 49: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

49

Exemplo: SubclassesExemplo: Subclasses

Maltada é uma subclasse de beers:class Maltada extends Beer {attribute string color;

}

Page 50: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

ODL permite herança múltipla Conflitos são resolvidos a nível de

implementaçãoclass Anime extends Filme:Cartoon {attribute …

}

Page 51: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

51

ODL KeysODL Keys

Podem declarar chaves para uma classe. Depois do nome da classe, adicionamos:

(key <list of keys>) Uma key com mais de um atributo

precisa de parênteses adicionais ao redor dos atributos.

Page 52: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

52

Exemplo: KeysExemplo: Keys

class Beer (key name) { … nome é a key para beers.class Course (key (dept,number),(room, hours)){

dept and number formam uma key; como também room e hours.

Page 53: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

53

ExtentsExtents

Para cada classe existe um extent, o conjunto de objetos existentes na classe (instâncias)◦ Podemos pensar o extent como uma relação

cuja classe é seu esquema. Indique extent depois do nome da classe,

junto com as keys, como:(extent <extent name> … )

Page 54: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

54

Exemplo: ExtentsExemplo: Extents

class Beer(extent Beers key name) { …

} Convenção, usa-se singular para nomes

de classes, e plural para o extent correspondente.

Page 55: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Consultas a repositórios de classes - ODL OQL combina os aspectos declarativos da

linguagem SQL com o paradigma de programação OO

Apresentação by example

Page 56: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

56

Path ExpressionsPath Expressions

Seja x um objeto da classe C.1. Se a é um atributo de C, então x.a é o

valor daquele atributo.2. Se r é um relacionamento de C, então x.r é

o valor para o qual x está conectado por r. Poderia ser um objeto ou um conjunto de

objetos, dependendo do tipo de r.3. Se m é um método de C, então x.m (…) é o

resultado de aplicar m a x.

Page 57: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

57

Running ExampleRunning Example

class Sell (extent Sells) {attribute real price;relationship Bar bar inverse Bar::beersSold;relationship Beer beer inverse Beers::soldBy;

}class Bar (extent Bars) {

attribute string name;attribute string addr;relationship Set<Sell> beersSold inverse Sell::bar;

}

Page 58: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

58

Running Example --- Cont.Running Example --- Cont.

class Beer (extent Beers) {attribute string name;attribute string manf;relationship Set<Sell> soldBy inverse Sell::beer;

}

Page 59: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

59

Exemplo: Path Exemplo: Path ExpressionsExpressions Seja s be uma variável do tipo Sell,

i.e., um objeto bar-beer-price.1. s.price = o preço no objeto s.2. s.bar.addr = o endereço do bar que pode

ser alcançado seguindo relacionamento bar em s. Note que a cascata de pontos está OK aqui,

pois s.bar é um objeto, e não uma coleção de objetos.

Page 60: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

60

Exemplo: Uso Ilegal do .Exemplo: Uso Ilegal do .

Não podemos aplicar o . A uma coleção na esquerda, apenas a um único objeto.

Exemplo (ilegal), com b sendo um objeto Bar:

b.beersSold.price

Esta expressão é um conjunto de objetos Sell.Não tem um price.

Page 61: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

61

OQL Select-From-WhereOQL Select-From-Where

Similar a SQL:

SELECT <lista de valores>FROM <lista de coleções e nomes>WHERE <condição>

Page 62: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

62

Cláusula FROM Cláusula FROM

Cada termo da cláusula FROM é:<collection> <member name> Uma coleção pode ser:

1. O extent de alguma classe.2. Uma expressão que leva a uma coleção,

e.g., certas path expressions como b.beersSold .

Page 63: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

63

ExemploExemplo

Obtenha o menu do Joe’s Bar.SELECT s.beer.name, s.priceFROM Sells sWHERE s.bar.name = “Joe’s Bar”

Sells é o extentrepresentando todosobjetos Sell; srepresenta cadaobjeto Sell

Expressões legaiss.beer é um objeto beer e s.baré um objeto Bar

Note OQLusa aspas.

Page 64: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

64

Exemplo 2Exemplo 2

Esta query também obtém Joe’s menu:SELECT s.beer.name, s.priceFROM Bars b, b.beersSold sWHERE b.name = “Joe’s Bar”

b.beersSold é o conjunto de objetos Sell,e s é um objeto Sell que envolve oJoe’s Bar.

Page 65: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

65

Dica para Uso de Path Dica para Uso de Path ExpressionsExpressions

Se uma path expression denota um objeto, você estendê-lo com outro . e uma propriedade daquele objeto.◦ Exemplo: s, s.bar, s.bar.name .

Se uma path expression denota uma coleção de objetos, você NÃO estendê-lo, mas pode usá-lo na cláusula FROM.◦ Exemplo: b.beersSold .

Page 66: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

66

O Result TypeO Result Type

Por default, o tipo do resultado de um select-from-where é um Bag of Structs.◦ Struct tem um campo para cada termos da

cláusula SELECT. Seus nomes e tipos são obtidos do ;ultimo nome na path expression.

Se SELECT tem apenas um termo, tecnicamente o result é um one-field struct.

Page 67: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

67

Exemplo: Result TypeExemplo: Result Type

SELECT s.beer.name, s.priceFROM Bars b, b.beersSold sWHERE b.name = “Joe’s Bar”

Tem tipo:Bag(Struct(name: string, price: real))

Page 68: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

68

Renomeando os CamposRenomeando os Campos

Para modificar os nomes dos campos, preceda-os pelo nome e : .

Exemplo:SELECT beer: s.beer.name, s.priceFROM Bars b, b.beersSold sWHERE b.name = “Joe’s Bar”

Result type é: Bag(Struct(beer: string, price:

real)).

Page 69: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

69

Produzindo um Set of Produzindo um Set of StructsStructs Adicione DISTINCT no SELECT para

eliminar duplicatas. Exemplo:SELECT DISTINCT s.beer.name, s.priceFROM Bars b, b.beersSold sWHERE b.name = “Joe’s Bar” Result type é:

Set(Struct(name: string, price: string))

Page 70: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

70

SubqueriesSubqueries

Uma expressão select-from-where pode conter parêntesis e usado como uma subquery de várias maneiras, como:

1. Numa cláusula FROM, como uma coleção.2. Em expressões EXISTS e FOR ALL.

Page 71: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

71

Exemplo: Subquery em Exemplo: Subquery em FROMFROM Encontre os fabricantes de cervejas

vendidas por Joe’s:SELECT DISTINCT b.manfFROM (

SELECT s.beer FROM Sells sWHERE s.bar.name = “Joe’s Bar”

) b

Bag de objetos Beer Para as beers vendidas por Joe

Page 72: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

72

QuantificadoresQuantificadores

Duas expressões booleanas para uso em cláusulas WHERE:

FOR ALL x IN <collection> : <condition>EXISTS x IN <collection> : <condition> True sss todos membros (resp. pelo

menos um membro) da coleção satisfaz a condição.

Page 73: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

73

Exemplo: EXISTSExemplo: EXISTS

Encontre todos os nomes de bares que vendem ao menos uma cerveja por mais de $5.

SELECT b.name FROM Bars bWHERE EXISTS s IN b.beersSold :

s.price > 5.00

Ao menos um objeto Sell para barb tem preço acima de $5.

Page 74: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

74

Exemplo 2Exemplo 2

Encontre os nome de todos os bares nos quais as únicas cervejas que eles vendem por mais de $5 são fabricadas por Pete’s.

SELECT b.name FROM Bars bWHERE FOR ALL be IN (

SELECT s.beer FROM b.beersSold sWHERE s.price > 5.00

) : be.manf = “Pete’s”

Bag de objetos Beer Para todas as beers vendidas pelo bar bpor mais de $5.

Page 75: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

75

AgregaçõesAgregações

AVG, SUM, MIN, MAX, e COUNT se aplicam a qualquer coleção onde faça sentido.

Exemplo: Encontre e atribua a x o preço médio de cervejas em Joe’s:

x = AVG(SELECT s.price FROM Sells sWHERE s.bar.name = “Joe’s Bar”

);Bag of structs com os preçospara as beers vendidas por Joe’s.

Page 76: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Class Filme (extent Filmes key (tiitulo, ano))

{attribute string titulo;attribute integer ano;attribute integer duracao;attribute enum TipoFilme (cores, pretoebranco) tipo;relationship Set <Estrela> estrelas

inverse Estrela::estreladoEm;relationship Estudio produzidoPor

inverse Studio::produziu;float duaracaoEmHoras() raises (duracaoNãoEncontrada);void nomesEstrelas(out Set<String>);void outrosFilmes (in Estrela, out Set<Filme>) raises (notFound);

};

Page 77: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Class Estrela(extent Estrelas key nome)

{attribute string nome;attribute Struct End {string rua, string cidade} endereco;relationship Set <Filme> estreladoEm

inverse Filme::estrelas; };

Page 78: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Class Estudio(extent Estudios key nome)

{attribute string nome;attribute string endereco;relationship Set <Filme> produziu

inverse Filme::produzidoPor; };

Page 79: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Consultas Intra-ClasseConsultas Intra-Classe

Qual o ano do filme "E o vento levou“?

◦  f é uma variável do tipo Filme que "varre" o repositório Filmes (isto é, pode receber cada valor da repositório corrente Filmes)

SELECT f.anoFROM Filmes fWHERE f.título = "E o vento levou?"

Page 80: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Consultas Inter-ClassesConsultas Inter-Classes

Quais os nomes das estrelas do filme "Casablanca"?

◦ Note o tratamento unificado para atributos e relacionamentos

SELECT e.nomeFROM Filmes f, f.estrelado_por eWHERE f.título = "Casablanca"

For each f in Filmes do If f.título = "Casablanca" then For each e in f.estrelado_por then Add e.nome to output bag

Page 81: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Consultas Com Consultas Com MétodoMétodo

Quais os títulos e anos dos filmes com mais de 2 horas de duração?

◦ Note o tratamento unificado para atributos, relacionamentos e métodos

SELECT f.título, f.anoFROM Filmes fWHERE f.duração_em_horas( ) > 2.0;

/* pode ser também duração_em_horas(f) */

Page 82: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Se o denota um objeto pertencendo a uma classe C, e p é uma propriedade da classe, então o.p é o resultado de aplicar p a o ◦ Se p é um atributo, então o.p é o valor do

atributo no objeto o ◦ Se p é um relacionamento, então o.p é o objeto

ou coleção de objetos relacionados com o através do relacionamento p

◦ Se p é um método (talvez, com parâmetros), então o.p é o resultado de aplicar o método a o

Pode ser usado o símbolo -> em lugar do ponto

Page 83: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

O valor de meu_filme.duração é a duração do filme, isto é, o valor do atributo duração para o objeto Filme denotado por meu_filme

O valor de meu_filme.duração_em_horas() é um número real, a duração do filme em horas, calculada pela aplicação do método duração_em_horas() ao objeto meu_filme

Page 84: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

O valor de meu_filme.estrelado_por é o conjunto de objetos Estrela que estrelaram o filme meu_filme

A expressão meu_filme.estrelas (nomes) não retorna valor (em C++, o tipo de função void). Entretanto retorna o conjunto dos nomes das estrelas de meu_filme (parâmetro de saída nomes, do tipo coleção)

O que significa meu_filme.realizado_por.nome?

Page 85: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Estilo SQL◦ Select-From-Where

A palavra-chave SELECT seguida por uma lista de expressões

A palavra-chave FROM seguida por uma ou mais declarações de variáveis simples. Uma variável é declarada por dar◦ uma expressão cujo valor tem um tipo coleção,

isto é, um conjunto, ou bag, ou lista, ou array ◦ A palavra-chave opcional AS ◦ O nome da variável simples, que “varre” a coleção

Page 86: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Tipicamente, a expressão de (a) é o repositório de alguma classe, como o repositório Filmes da classe Filme. Entretanto, qualquer expressão que produza uma coleção de objetos pode ser utilizada, incluindo outra expressão Select-From-Where

A palavra-chave WHERE é uma expressão booleana. Este expressão, como a expressão seguindo o SELECT, pode usar somente constantes e variáveis declaradas na cláusula FROM

Uma consulta produz um bag de objetos

Page 87: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SELECT DISTINCT e.nomeFROM Filmes f, f.estrelado_por eWHERE f.realizado_por.nome = "Disney"

Page 88: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Set<Struct N {string c1, string c2}> N1 N1 = SELECT DISTINCT Struct(estrela1: e1.nome, estrela2: e2.nome) FROM Estrelas e1, Estrelas e2 WHERE e1.endereço = e2.endereço AND e1.nome < e2.nome

Page 89: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SELECT DISTINCT e.nomeFROM (SELECT f FROM Filmes f WHERE f.realizado_por.nome = "Disney") d, d.estrelado_por e

Page 90: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

SELECT fFROM Filmes fWHERE f.realizado_por.nome = "Disney"ORDER BY f.duração, f.título

Page 91: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

FOR ALL x IN C : C(x), onde C é um conjunto, x é uma variável, e C(x) é uma condição

SELECT e FROM Estrelas e WHERE ALL f IN e.estrelou_em : f.realizado_por.nome = "Disney"

Page 92: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

EXISTS x IN C : C(x)

SELECT e FROM Estrelas e WHERE EXISTS f IN e.estrelou_em : f.realizado_por.nome = "Disney"

Page 93: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

OQL usa os mesmos cinco operadores de agregação usados em SQL: AVG, COUNT, SUM, MIN, e MAX. ◦ Aplicáveis a qualquer coleção cujos membros são

de tipos apropriados

SELECT ... AVG(SELECT f.duração FROM Filmes f)...

Page 94: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

A forma de uma cláusula GROUP BY em OQL é ◦ As palavras chave GROUP BY◦ Uma lista de atributos-partição ("partition

attributes"). Cada atributo-partição consiste de Um nome de uma variável (um critério de agregação) Dois pontos Uma expressão mencionando uma variável na cláusula

FROM

Page 95: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Na lista do SELECT, só podem aparecer os critérios de agregação, e os valores agregados

O valor retornado pela cláusula GROUP BY é um conjunto de estruturas

Cada estrutura tem a forma

Struct(critério_agregação1:v1, ..., critério_agregaçãon:vn, lista_de_valores_agregados)

Page 96: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Os valores agregados referem-se a uma partição (um conjunto de valores de atributos-partição)

SELECT nome_estúdio, ano_filme, média_durações: AVG(SELECT p.f.duração FROM partition p) FROM Filmes f GROUP BY nome_estúdio: f.realizado_por.nome,

ano_filme: f.ano HAVING MAX(SELECT p.f.duração FROM partition p) > 120

Page 97: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Pode-se aplicar os operadores de união (UNION), interseção (INTERSECT) e diferença (EXCEPT) a duas coleções compatíveis de objetos

(SELECT DISTINCT f FROM Filmes f, f.estrelado_por e WHERE e.nome = "Harrison Ford") EXCEPT (SELECT DISTINCT f FROM Filmes f WHERE f.realizado_por = "Disney")

Page 98: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Set<Filme> Velhos_filmes

Velhos_filmes = SELECT DISTINCT f FROM Filmes f WHERE f.ano < 1920;

Page 99: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

List<Filme> Minha_lista

Minha_lista = SELECT f FROM Filmes f ORDER BY f.título, f.ano

Page 100: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Filme Meu_filme

Meu_filme = ELEMENT(SELECT f FROM Filmes f WHERE f.título = "E o Vento Levou")

Page 101: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Considere a classe

Page 102: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Class Empregado (extent Empregados key matricula){ attribute string matricula; attribute string nome; attribute float salario; relationship Set<Empregado> gerencia inverse

Empregado::eh_gerenciado_por; relationship Empregado eh_gerenciado_por inverse Empregado::gerencia; ...;}

Page 103: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Escreva em OQL Quais o nome e o salário do gerente de Natasha?

Page 104: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Seja o esquema de filmes, estrelas e estúdios visto em aula. Escrever em OQL as seguintes perguntas ◦ Quais os estúdios que realizaram algum filme

com duração maior que a duração de cada filme realizado pela Eurofilmes?

◦ Quais os estúdios que realizaram mais filmes? ◦ Quais os estúdios que não realizaram filmes

antes de 1960?

Page 105: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

◦ Quais as estrelas dos filmes com duração maior que pelo menos a de um filme realizado pela Disney?

◦ Quais as estrelas que estrelaram em todos os filmes do estúdio Cinecittá?

◦ Quais os estúdios que menos realizaram filmes?

Page 106: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Não oferece abstrações como visões SQL Linguagem de consulta stricto sensu