2 banco de dados orientado a objetos l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
2. Banco de Dados Orientado a Objetos PowerPoint Presentation
Download Presentation
2. Banco de Dados Orientado a Objetos

Loading in 2 Seconds...

play fullscreen
1 / 106

2. Banco de Dados Orientado a Objetos - PowerPoint PPT Presentation


  • 445 Views
  • Uploaded on

2. Banco de Dados Orientado a Objetos. Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D. Roteiro. Histórico Crítica ao Modelo Relacional Exemplo de Motivação Introdução ao Modelo de Objetos ODMG ODL ODMG OQL. Histórico.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '2. Banco de Dados Orientado a Objetos' - liam


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
2 banco de dados orientado a objetos

2. Banco de Dados Orientado a Objetos

Banco de Dados II 2009.2

Prof. Cláudio Baptista, Ph.D.

roteiro
Roteiro
  • Histórico
  • Crítica ao Modelo Relacional
  • Exemplo de Motivação
  • Introdução ao Modelo de Objetos
  • ODMG ODL
  • ODMG OQL
hist rico
Histórico
  • 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
problemas
Problemas
  • 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
1 cr tica ao modelo relacional
1. CríticaaoModeloRelacional
  • 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
1 cr tica ao modelo relacional6
1. CríticaaoModeloRelacional
  • 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
1 cr tica ao modelo relacional7
1. CríticaaoModeloRelacional
  • 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
1 cr tica ao modelo relacional8
1. CríticaaoModeloRelacional
  • 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
1 cr tica ao modelo relacional9
1. CríticaaoModeloRelacional
  • 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
limita es do modelo relacional
Limitações do ModeloRelacional
  • 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
exemplo de motiva o
Exemplo de motivação
  • 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)
exemplo de motiva o12
Exemplo de Motivação
  • 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)

exemplo de motiva o13
Exemplo de Motivação
  • 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:
    • Representar um ponto como ponto
    • Escrever uma consulta legível
    • Desempenho

Solução: BDOO

slide14

Solução BDOO: Esquema

Repositório:

Retângulos

Retângulo

Ponto

N

Definido_por

2

X

Y

{Ponto2.X > Ponto1.X}

sobrepoe_quadrado

_de_lado_um();

...

slide15

Linguagem de Consulta OO, Estilo SQL

  • Quais os retângulos que sobrepõem um quadrado de lado um?
    • Selectr.ponto1, r.ponto2FromRetangulos rWherer.sobrepoe_quadrado_de_lado_um()
    • Basta ler, para entender!

sobrepoe_quadrado_de_lado_um() é indexável,

como qualquer coluna de tabela

slide16

Encapsulamento

  • Encapsulamento das condições de sobreposição
    • Booleansobrepoe_quadrado_lado_um()
    • {If ((self.ponto1.x1 <= 1 andself.ponto1.y1 <= 1)
    • and
    • (self.ponto2.x2 >= 0 andself.ponto2. y2
    • >=0))
    • thenreturntrue
    • elsereturnfalse; }
slide17

Encapsulamento

  • Regra de integridade: implementada no método construtor Retangulo()
      • Retangulosagora torna-se um repositório de objetos da classe Retangulo
  • O encapsulamento deve ser parcial, para ainda permitir interfaces estilo-SQL (Selectcolunax ...)
slide18

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
bdoo padr o odmg
BDOO – Padrão ODMG
  • 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
framework
Framework
  • 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.
slide21
ODMG
  • 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
odmg modelo de objetos
ODMG: Modelo de Objetos
  • 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)

odmg modelo de objetos23
ODMG: Modelo de Objetos
  • 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
odmg modelo de objetos24
ODMG: Modelo de Objetos
  • Fábrica = objeto utilizado para gerar ou criar outros objetos
    • possui necessariamente uma operação que gera novos objetos (como novos OIDs)
odmg modelo de objetos25
ODMG: Modelo de Objetos
  • 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
odmg modelo de objetos26
ODMG: Modelo de Objetos
  • 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
odmg modelo de objetos27
ODMG: Modelo de Objetos
  • 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
odmg odl
ODMG ODL
  • 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.
odl vis o geral
ODL – VisãoGeral
  • UmaDeclaração de classeinclui:
    • Um nomepara a classe.
    • Declaração de chaves (key) opcional.
    • Declaração de Extent= nomepara o conjunto de objetoscorrentesnaclasse (instâncias).
    • Declaração de Elementos. Um elementpode ser um atributo, um relacionamento, ou um método.
defini o de classe
Definição de Classe

class <nome> {

<lista de declarações de elementos, separadospor ; >

}

Exemplo:

Class Estudante (extent Estudantes) {

attribute string name;

attribute intidade;

}

declara o de atributos e relacionamentos
Declaração de Atributos e Relacionamentos
  • 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>;

relacionamentos inversos
RelacionamentosInversos
  • 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.
slide33

O tipo de relacionamento serves

É um set de Beer objects.

O operador :: conecta um nome

à direita ao contexto do

nome à esquerda

Ex.: Atributos e Relacionamentos

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;

}

slide34

Tipos de Relacionamentos

  • O tipo de um relacionamento é:
    • Umaclasse, como Bar. Nestecaso, um objeto com esterelacionamentopodeestarconectado a apenas um objeto Bar.
    • Set<Bar>: o objetoestáconectado a um conjunto de objetos Bar.
    • Bag<Bar>, List<Bar>, Array<Bar>: o objetoestáconectado a um bag, list, ou array de objetos Bar.
slide35

Multiplicidade dos Relacionamentos

  • Todososrelacionamento ODL sãobinários.
  • RelacionamentosMuitos-para-Muitostêm Set<…> para o tipo do relacionamento e seuinverso.
  • RelacionamentosMuitos-para-Um têm Set<…> no relacionamento do lado Um e a apenas a classepara o relacionamento do ladoMuitos
  • Relacionamentos Um-para-Um têm classes com o tipoemambasdireções.
slide36

Many-many uses Set<…>

in both directions.

Many-one uses Set<…>

only with the “one.”

Exemplo: 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;

}

slide37

husband and wife are

one-one and inverses

of each other.

buddies is many-many and its

own inverse. Note no :: needed

if the inverse is in the same class.

Exemplo2: Multiplicidade

class Drinker {

attribute … ;

relationship Drinker husband inverse wife;

relationship Drinker wife inverse husband;

relationship Set<Drinker> buddies

inverse buddies;

}

slide38

Lidando com RelacionamentosMúltiplos

  • ODL nãodarsuporte a relacionamentosternários.
  • Podemossimularrelacionamentosternáriosatravés de umaclasse de “conexão”, cujosobjetosrepresentamtuplas de objetosquenósgostariamos de conectar via o relacionamentoternário.
slide39

Classes de Conexão

  • Suponhaquequeremosconectar as classes X, Y, e Zatravés do relacionamentoR.
  • ProjeteumaclasseC, cujosobjetosrepresentamumatripla de objetos (x, y, z) das classes X, Y, and Z, respectivamente.
  • Precisamos de trêsmuitos-para-um relacionamentos de (x, y, z) paracada um de x, y, e z.
slide40

Exemplo: Classe de Conexão

  • Suponhaquetenhamos as classes Bar e Beer, e queremosrepresentat o preço de cada Beer emvendidaemcada Bar.
    • Um relacionamentomuitos-para-muitos entre Bar e Beer nãopodeter o atributopreçocomoocorre no modelo E/R.
  • One solution: cria-se a classe Price e umaclasse de conexão BBP pararepresentarumatripla bar, beer, e price.
slide41

Exemplo --- Continuação

  • Umavezqueobjetos Price sãoapenasnúmeros, umamelhorsoluçãoseria:
    • Dar aosobjetos BBP um atributo price.
    • Usardoisrelacionamentosmuitos-para-um entre um objeto BBP e osobjetos Bar e Beer.
slide42

Exemplo, 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 modificadosparaincluirrelacionamentos, ambos chamadostoBBP, e ambos do tipo Set<BBP>.
slide43

Structs e Enums

  • Atributospodemterumaestrutura (com em C) ou ser uma enumeration.
  • Declare com

attribute [StructouEnum] <nome do

structouenum> { <detalhes> }

<nome do atributo>;

  • Detalhessãoosnomes dos campos e tipos de um Struct, umalista de constantes de um Enum.
slide44

Nomes para a

estrutura e

enumeração

nomes dos

atributos

Exemplo: Struct e Enum

class Bar {

attribute string name;

attribute StructAddr

{string street, string city, int zip} address;

attribute EnumLic

{ FULL, BEER, NONE } license;

relationship …

}

slide45

Declarações de Métodos

  • Umadefinição de classepodeincluirdeclarações de métodospara a classe.
  • Informaçãoconsiste de:
    • Tipo de retorno, se algum.
    • Nome do método.
    • Argument modes e tipos (semnomes).
      • Modes são in, out, e inout.
    • Quaisquerexceçõesque o métodopossalançar.
slide46

Exemplo: Métodos

real cre(in string)raises(semNotas);

O métodocreretorna um número real, quecontém o CRE de um aluno.

crerecebe um argumento, uma string (matrícula do aluno) e nãomodificaesteargumento.

crepodelançar a exceçãosemNotas.

slide47

Tiposem ODL

  • Tiposbásicos: int, real/float, string, enumerated types, e classes.
  • Type constructors:
    • Structparaestruturas.
    • Collection types : Set, Bag, List, Array, e Dictionary ( = mapeamento de um tipodomínio type para um tipoimagem).
  • Tipos Relationship podemapenas ser umaclasseou um tipo collection aplicado a umaclasse.
slide48

ODL Subclasses

  • Usual object-oriented subclasses.
  • Indicasuperclasse com extends e seunome.
  • Subclasselistaapenas as propriedadesúnicas à mesma.
    • Herda as propriedadesdasuperclasse.
slide49

Exemplo: Subclasses

  • Maltada é umasubclasse de beers:

class Maltada extends Beer {

attribute string color;

}

subclasses heran a m ltipla
Subclasses: HerançaMúltipla
  • ODL permite herança múltipla
  • Conflitos são resolvidos a nível de implementação

class Anime extends Filme:Cartoon {

attribute …

}

slide51

ODL Keys

  • Podemdeclararchavesparaumaclasse.
  • Depois do nomedaclasse, adicionamos:

(key <list of keys>)

  • Uma key com mais de um atributoprecisa de parêntesesadicionaisaoredor dos atributos.
slide52

Exemplo: Keys

class Beer (key name) { …

  • nome é a key para beers.

class Course (key (dept,number),(room, hours)){

  • dept and number formamuma key; comotambém room e hours.
slide53

Extents

  • Para cadaclasseexiste um extent, o conjunto de objetosexistentesnaclasse (instâncias)
    • Podemospensar o extent comoumarelaçãocujaclasse é seuesquema.
  • Indique extent depois do nomedaclasse, junto com as keys, como:

(extent <extent name> … )

slide54

Exemplo: Extents

class Beer

(extent Beers key name) { …

}

  • Convenção, usa-se singular paranomes de classes, e plural para o extent correspondente.
odmg oql object query language
ODMG OQL: Object Query Language
  • 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
slide56

Path Expressions

  • Sejax um objetodaclasseC.
    • Se a é um atributo de C, entãox.a é o valor daqueleatributo.
    • Se r é um relacionamento de C, entãox.r é o valor para o qualxestáconectadoporr.
      • Poderia ser um objetoou um conjunto de objetos, dependendo do tipo de r.
    • Se m é um método de C, entãox.m (…) é o resultado de aplicarm a x.
slide57

Running 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;

}

slide58

Running Example --- Cont.

class Beer (extent Beers) {

attribute string name;

attribute string manf;

relationship Set<Sell> soldBy inverse Sell::beer;

}

slide59

Exemplo: Path Expressions

  • Sejas be umavariável do tipo Sell, i.e., um objeto bar-beer-price.
    • s.price = o preço no objetos.
    • s.bar.addr = o endereço do bar quepode ser alcançadoseguindorelacionamentobarems.
      • Note que a cascata de pontosestá OK aqui, pois s.bar é um objeto, e nãoumacoleção de objetos.
slide60

Esta expressão é um conjunto de objetos Sell.

Não tem um price.

Exemplo: UsoIlegal do .

  • Nãopodemosaplicar o . A umacoleçãonaesquerda, apenas a um únicoobjeto.
  • Exemplo (ilegal), com bsendo um objeto Bar:

b.beersSold.price

slide61

OQL Select-From-Where

Similar a SQL:

SELECT <lista de valores>

FROM <lista de coleções e nomes>

WHERE <condição>

slide62

Cláusula FROM

  • Cadatermodacláusula FROM é:

<collection> <member name>

  • Umacoleçãopode ser:
    • O extent de algumaclasse.
    • Umaexpressãoqueleva a umacoleção, e.g., certas path expressions comob.beersSold .
slide63

Sells é o extent

representando todos

objetos Sell; s

representa cada

objeto Sell

Expressões legais

s.beer é um objeto

beer e s.bar

é um objeto Bar

Note OQL

usa aspas.

Exemplo

  • Obtenha o menu do Joe’s Bar.

SELECT s.beer.name, s.price

FROM Sells s

WHERE s.bar.name = “Joe’s Bar”

slide64

b.beersSold é o conjunto de objetos Sell,

e s é um objeto Sell que envolve o

Joe’s Bar.

Exemplo 2

  • Esta query tambémobtém Joe’s menu:

SELECT s.beer.name, s.price

FROM Bars b, b.beersSold s

WHERE b.name = “Joe’s Bar”

slide65

DicaparaUso de Path Expressions

  • Se uma path expression denota um objeto, vocêestendê-lo com outro . e umapropriedadedaqueleobjeto.
    • Exemplo: s, s.bar, s.bar.name .
  • Se uma path expression denotaumacoleção de objetos, você NÃO estendê-lo, maspodeusá-lo nacláusula FROM.
    • Exemplo: b.beersSold .
slide66

O Result Type

  • Por default, o tipo do resultado de um select-from-where é um Bag of Structs.
    • Struct tem um campo paracadatermosdacláusula SELECT. Seusnomes e tipossãoobtidos do ;ultimo nomena path expression.
  • Se SELECT tem apenas um termo, tecnicamente o result é um one-field struct.
slide67

Exemplo: Result Type

SELECT s.beer.name, s.price

FROM Bars b, b.beersSold s

WHERE b.name = “Joe’s Bar”

  • Tem tipo:

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

slide68

Renomeandoos Campos

  • Para modificarosnomes dos campos, preceda-ospelonome e : .
  • Exemplo:

SELECT beer: s.beer.name, s.price

FROM Bars b, b.beersSold s

WHERE b.name = “Joe’s Bar”

  • Result type é:

Bag(Struct(beer: string, price: real)).

slide69

Produzindo um Set of Structs

  • Adicione DISTINCT no SELECT paraeliminarduplicatas.
  • Exemplo:

SELECT DISTINCT s.beer.name, s.price

FROM Bars b, b.beersSold s

WHERE b.name = “Joe’s Bar”

  • Result type é:

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

slide70

Subqueries

  • Umaexpressão select-from-where podeconterparêntesis e usadocomoumasubquery de váriasmaneiras, como:
    • Numacláusula FROM, comoumacoleção.
    • Emexpressões EXISTS e FOR ALL.
slide71

Bag de objetos Beer

Para as beers vendidas por

Joe

Exemplo: Subqueryem FROM

  • Encontreosfabricantes de cervejasvendidaspor Joe’s:

SELECT DISTINCT b.manf

FROM (

SELECT s.beer FROM Sells s

WHERE s.bar.name = “Joe’s Bar”

) b

slide72

Quantificadores

  • Duasexpressõesbooleanasparausoemcláusulas WHERE:

FOR ALL x IN <collection> : <condition>

EXISTS x IN <collection> : <condition>

  • True ssstodosmembros (resp. pelomenos um membro) dacoleçãosatisfaz a condição.
slide73

Ao menos um objeto Sell para bar

b tem preço acima de $5.

Exemplo: EXISTS

  • Encontretodososnomes de bares quevendemaomenosumacervejapormais de $5.

SELECT b.name FROM Bars b

WHERE EXISTS s IN b.beersSold :

s.price > 5.00

slide74

Bag de objetos Beer

Para todas as beers

vendidas pelo bar b

por mais de $5.

Exemplo 2

  • Encontreosnome de todosos bares nosquais as únicascervejasqueelesvendempormais de $5 sãofabricadaspor Pete’s.

SELECT b.name FROM Bars b

WHERE FOR ALL be IN (

SELECT s.beer FROM b.beersSold s

WHERE s.price > 5.00

) : be.manf = “Pete’s”

slide75

Bag of structs com os preços

para as beers vendidas por Joe’s.

Agregações

  • AVG, SUM, MIN, MAX, e COUNT se aplicam a qualquercoleçãoondefaçasentido.
  • Exemplo: Encontre e atribua a x o preçomédio de cervejasem Joe’s:

x = AVG(

SELECT s.price FROM Sells s

WHERE s.bar.name = “Joe’s Bar”

);

exemplo 2 esquema de filmes
Exemplo 2: Esquema de Filmes

Class Filme

(extent Filmes key (tiitulo, ano))

{

attribute string titulo;attributeinteger ano;attributeintegerduracao;attributeenumTipoFilme (cores, pretoebranco) tipo;relationship Set <Estrela> estrelas

inverse Estrela::estreladoEm;relationshipEstudioproduzidoPor

inverse Studio::produziu;floatduaracaoEmHoras() raises (duracaoNãoEncontrada);voidnomesEstrelas(out Set<String>);voidoutrosFilmes (in Estrela, out Set<Filme>) raises (notFound);

};

exemplo 2 esquema de filmes77
Exemplo 2: Esquema de Filmes

Class Estrela

(extent Estrelas key nome)

{

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

inverse Filme::estrelas;

};

exemplo 2 esquema de filmes78
Exemplo 2: Esquema de Filmes

Class Estudio

(extent Estudios key nome)

{

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

inverse Filme::produzidoPor;

};

slide79

Consultas 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.ano

FROM Filmes f

WHERE f.título = "E o vento levou?"

slide80

Consultas Inter-Classes

  • Quais os nomes das estrelas do filme "Casablanca"?
    • Note o tratamento unificado para atributos e relacionamentos

SELECT e.nome

FROM Filmes f, f.estrelado_por e

WHERE 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

slide81

Consultas Com Mé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.ano

FROM Filmes f

WHERE f.duração_em_horas( ) > 2.0;

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

path expressions
Path Expressions
  • 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
slide83
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
slide84
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?
express es oql
Expressões OQL
  • 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
slide86
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
elimina o de duplicatas
Eliminação de Duplicatas

SELECT DISTINCT e.nome

FROM Filmes f, f.estrelado_por e

WHERE f.realizado_por.nome = "Disney"

objetos complexos
Objetos Complexos

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

sub consultas
Sub-consultas

SELECT DISTINCT e.nome

FROM (SELECT f

FROM Filmes f

WHERE f.realizado_por.nome =

"Disney") d, d.estrelado_por e

resultado como lista
Resultado como Lista

SELECT f

FROM Filmes f

WHERE f.realizado_por.nome = "Disney"

ORDER BY f.duração, f.título

express es com quantificadores
Expressões com Quantificadores
  • 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"

slide92
EXISTS x IN C : C(x)

SELECT e

FROM Estrelas e

WHERE EXISTS f IN e.estrelou_em :

f.realizado_por.nome = "Disney"

express es com agrega o
Expressões com Agregação
  • 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)...

express es com group by
Expressões com GROUP BY
  • 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
slide95
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)

slide96
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

operadores sobre cole es
Operadores sobre Coleções
  • 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")

vari veis hospedeiras binding
Variáveis Hospedeiras (Binding)

Set<Filme> Velhos_filmes

Velhos_filmes = SELECT DISTINCT f

FROM Filmes f

WHERE f.ano < 1920;

slide99
List<Filme> Minha_lista

Minha_lista = SELECT f

FROM Filmes f

ORDER BY f.título, f.ano

extraindo o elemento de uma cole o unit ria
Extraindo o Elemento de uma Coleção Unitária

Filme Meu_filme

Meu_filme = ELEMENT(SELECT f

FROM Filmes f

WHERE f.título = "E o Vento Levou")

exerc cios
Exercícios
  • Considere a classe
slide102
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;

...;

}

slide104
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?
slide105
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?
omiss es da linguagem oql
Omissões da Linguagem OQL
  • Não oferece abstrações como visões SQL
  • Linguagem de consulta stricto sensu