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

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

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

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