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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/51.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/55.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/56.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/57.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/59.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/60.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/61.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/62.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/63.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/64.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/65.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/66.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/67.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/68.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/69.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/70.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/71.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/72.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/73.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/74.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/75.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/76.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/77.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/78.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/79.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/80.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/81.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/82.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/83.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/84.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/85.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/86.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/87.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/88.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/89.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/90.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/91.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/92.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/93.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/94.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/95.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/96.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/97.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/98.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/99.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/100.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/101.jpg)
Considere a classe
![Page 102: Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/102.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/103.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/104.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/105.jpg)
◦ 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](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc105497959413d8c06cd/html5/thumbnails/106.jpg)
Não oferece abstrações como visões SQL Linguagem de consulta stricto sensu