SGBDOO - Padrão ODMG

Componentes:
– Modelo de objetos
– Linguagem de especificação dos objetos

ODL - Object Definition Language
– Linguagem de Consulta


UFPA
Informática

OQL - Object Query Language
Declarativa, não procedural para consulta e atualização da
base de dados
Baseada no SQL
– Ligações (bindings) com LPOO

C++, Smalltalk e Java
3. Padrão ODMG
1
SGBDOO - Padrão ODMG
Arquitetura
Declarações ODL
Aplicação em LPOO
Processador
ODL
metadados
Compilador
Runtime
SGBDOO
Binário da
Aplicação
UFPA
Informática
Linker
BD
Aplicação Executável
3. Padrão ODMG
2
Modelo de Objetos ODMG
Tipos

Primitivas básicas:
– Objeto: possui identificador único
– Literal: não possui identificador
– Tanto objetos quanto literais podem ser categorizados
por um tipo

Estado de Objeto
UFPA
Informática
– Definido pelo conjunto de propriedades: atributos e
relacionamentos
3. Padrão ODMG
3
Modelo de Objetos ODMG
Tipos

Tipo: dois aspectos
– uma especificação externa - definição abstrata de



operações que podem ser chamadas
propriedades de cada objeto
exceções que podem ser sinalizadas
– uma ou mais implementações
UFPA
Informática

cada uma define como as operações
estão implementadas e outros
detalhes internos
especificação
implementação
C++
implementação
Java
3. Padrão ODMG
4
Modelo de Objetos ODMG
Tipos

Tipos de Especificações
– Definição de Interface


define apenas comportamento e não possui instâncias
ex.: interface Empregado {...};
– Definição de literal


UFPA
Informática

define apenas estado e possui instâncias
inclui a definição do tipo struct e dos tipos primitivos boolean,
char, short, long, float, double, octet, string, any
ex.: struct Complexo {float re; float mi};
interface classe
literal
operações
estado
(comportamento) (propriedades)
3. Padrão ODMG
5
Modelo de Objetos ODMG
Tipos

Tipos de Especificações (cont.)
– Definição de Classe



UFPA
Informática

define comportamento e estado
possui instâncias
ex.: class Pessoa {...};
Tipos de Implementação
– Representação da especificação em uma linguagem
específica de programação
– Definição de um método para cada operação abstrata
definida na especificação
3. Padrão ODMG
6
Modelo de Objetos ODMG
Tipos - Herança
Empregado

Herança IS-A (é um)
– Exemplos:
interface Empregado {...};
interface Professor: Empregado {...};
class Professor_Titular: Professor {...};
Professor
Professor Titular
UFPA
Informática
– Pode haver herança múltipla
– Apenas a interface é herdada (comportamento)


classes podem herdar de interfaces
interfaces podem herdar de interfaces
3. Padrão ODMG
7
Modelo de Objetos ODMG
Tipos - Herança

Herança de Estado (extends)
– Semelhante a herança em LPOO
– Não admite herança múltipla
– Somente entre classes:
UFPA
Informática
class Pessoa {
attribute string nome;
attribute Date dataNasc};
herança extends
(estado + comportamento)
class EmpregadoPess extends Pessoa : Empregado {
attribute Date dataContr;
herança IS-A
attribute Currency sal;...};
(de comportamento)
3. Padrão ODMG
8
Modelo de Objetos ODMG
Tipos

Extensão de um tipo (extent)
– conjunto de todas as instâncias do tipo que existem no BD
– equivalente ao conceito de tabela no modelo relacional
– lista mantida automaticamente pelo BD

Chave
UFPA
Informática
– apesar do modelo OO não conter o conceito de chave, ele é
útil em SGBD
– Chave = um ou mais atributos cujos valores identificam uma
instância dentro de uma extensão
3. Padrão ODMG
9
Modelo de Objetos ODMG
Tipos

Métodos do objeto
–
–
–
–

new( ): usado para criação de objetos
same_as( ): verifica se dois objetos tem o mesmo identificador
copy( ): faz uma cópia do objeto em questão
delete( ): remove o objeto da memória e do BD
Nome de Objeto
UFPA
Informática
– identificador fornecido pelo usuário
– serve para dar nomes a objetos “raiz”
3. Padrão ODMG
10
Modelo de Objetos ODMG
Tipos

Objetos persistentes e transientes
– objetos de mesmo tipo podem ser persistentes ou
transientes
– podem ser manipulados com as mesmas operações

Coleções:
– Set <t> (conjunto)

sem ordenação e sem duplicatas
– Bag <t> (“sacola”)
UFPA
Informática

sem ordenação e admite duplicatas
– List <t> (lista ordenada)

com ordenação e admite duplicatas
3. Padrão ODMG
11
3.1 Modelo de Objetos ODMG
Tipos

Coleções:
– Array <t> (arranjo)


com ordenação e admite duplicatas
localiza elementos por posição
– Dictionary <t,v> (lista indexada)



com ordenação e admite duplicatas
localização por chave associada a cada elemento
Tipos estruturados (structured_object)
UFPA
Informática
– Date, Interval, Time, TimeStamp
3. Padrão ODMG
12
Modelo de Objetos ODMG
Tipos

Literal
– atomic literal


boolean, char, short, long, float, double, octet, string, any
enum (enumeração)
– attribute enum sexo (masculino, feminino)
– collection literal


UFPA
Informática

sem OID
set, bag, list, array, dictionary
tipo Table (tabela)
– equivalente a uma tabela no modelo relacional
– mesmo que uma coleção de struct
3. Padrão ODMG
13
Modelo de Objetos ODMG
Tipos

Literal
– structured literal


Pré-definidos: date, interval, time, timestamp
Definidos pelo usuário:
struct endereço{
string rua;
string no;
string complemento}
– null literal
exemplo: nullable_float, nullable_set,...
UFPA
Informática

3. Padrão ODMG
14
Linguagem de Definição - ODL
Estado e Comportamento de tipos

Estado
– Atributo



valor pertence a um tipo
não tem propriedade nem participa de relacionamentos
não pode ser especializado
UFPA
Informática
atributo literal atômico
interface Pessoa{
attribute short idade;
attribute string nome;
attribute enum sexo (masculino, feminino);
attribute address home_address;
attribute set <Phone_no> phones;
attribute Department dept
atributo objeto
(referência a um OID)
};
3. Padrão ODMG
15
Linguagem de Definição - ODL
Estado e Comportamento de tipos

Estado
– Relacionamento




UFPA
Informática


somente relacionamentos binários: 1:1, 1:n, m:n
definido sobre dois tipos
cada tipo participante tem que possuir OID (literais não
participam)
relacionamento não é um objeto
relacionamento é definido implicitamente por caminhos de
travessia entre objetos
integridade referencial é mantida automaticamente pelo SGBD
3. Padrão ODMG
16
Linguagem de Definição - ODL
Estado e Comportamento de tipos

Estado
UFPA
Informática
interface Professor {
...
relationship Set<Curso> ministra
inverse Curso :: ehministrado_por;
...};
interface Curso {
...
relationship Professor eh_ministrado_por
inverse Professor::ministra;
...};
para muitos (set)
para um
3. Padrão ODMG
17
Linguagem de Definição - ODL
Estado e Comportamento de tipos

Atributo Referência
UFPA
Informática
– referência a um objeto (relacionamento unidirecional)
– não é relacionamento ODMG
interface Pessoa{
attribute short idade;
attribute string nome;
attribute enum sexo (masculino, feminino);
attribute address home_address;
attribute set <Phone_no> phones;
attribute Department dept
};
atributo objeto
(referência a um objeto - OID)
3. Padrão ODMG
18
Linguagem de Definição - ODL
Estado e Comportamento de tipos

Operações
– Além de atributos e relacionamentos, o restante da
especificação do tipo contém um conjunto de assinaturas de
operação
– Assinatura de operação:



UFPA
Informática

nome da operação
nome e tipo de cada argumento
tipo de valor retornado
exceções que podem ser sinalizadas pela operação
3. Padrão ODMG
19
Linguagem de Definição - ODL
Exemplo ODL - Universidade
Salário
Estudante
Empregado
<<extends>>
Monitor
IF_Estudante
UFPA
Informática
préreq
<<extends>>
Professor
auxilia
matrícula
Disciplina
partes
Parte
ministra
3. Padrão ODMG
20
Linguagem de Definição - ODL
Exemplo ODL - Universidade
class Disciplina
(extent disciplinas)
{
attribute string nome;
attribute string numero;
UFPA
Informática
relationship list<Parte> asPartes
inverse Parte:: aDiscip;
relationship set<Disciplina> temPreReq
inverse Disciplina:: ePreReq;
relationship set<Disciplina> ePreReq
inverse Disciplina:: temPreReq;
relationship set<IF_Estudante> osEstud
inverse ID_Estudante::asDiscip;
boolean oferecer (in unsigned short semestre) raises (ja_oferec);
boolean cancelar (in unsigned short semestre) raises (nao_oferec);
};
3. Padrão ODMG
21
Linguagem de Definição - ODL
Exemplo ODL - Universidade
UFPA
Informática
class Parte
(extent partes)
{
attribute string numero;
relationship Monitor oMonitor
inverse Monitor:: asPartes;
relationship Professor oProf
inverse Professor:: asPartes;
relationship Disciplina aDiscip
inverse Disciplina:: asPartes;
};
3. Padrão ODMG
22
Linguagem de Definição - ODL
Exemplo ODL - Universidade
class Salario
{
attribute float base;
attribute float hora_extra;
attribute float bonus;
UFPA
Informática
};
3. Padrão ODMG
23
Linguagem de Definição - ODL
Exemplo ODL - Universidade
UFPA
Informática
class Empregado
(extent empregados)
{
attribute string nome;
attribute short id;
relationship Salario oSalario;
void contratar();
void demitir() raises (não_existe_emp);
};
3. Padrão ODMG
24
Linguagem de Definição - ODL
Exemplo ODL - Universidade
UFPA
Informática
class Professor
(extent professores)
{
attribute enum
Nivel(titular, adjunto, assistente) nivel;
relationship set<Parte> asPartes
inverse Parte :: oProf;
void promocao() raises (inelegivel_promo);
};
3. Padrão ODMG
25
Linguagem de Definição - ODL
UFPA
Informática
Exemplo ODL - Universidade
interface IF_Estudante
{
struct Endereco {
string casa;
string numero;}
attribute Endereco end_dorm;
attribute string nome;
attribute string id;
relationship set<Disciplina> asDiscip;
inverse Disciplina :: osEstud;
boolean inscreve_disc(in Disciplina discip)
raises (sem_pre_req, sem_vagas);
void cancela_disc(in Disciplina discip)
raises (não_inscrito);
);
3. Padrão ODMG
26
3.2 Linguagem de Definição - ODL
UFPA
Informática
Exemplo ODL - Universidade
class Monitor extends Empregado : IF_Estudante
{
attribute Endereco end_dorm;
attribute string nome;
attribute string id;
relationship set<Disciplina> asDiscip;
inverse Disciplina :: osEstud;
relationship set<Parte> asPartes;
estado é redefinido,
inverse Parte :: oMonitor;
já que IF_Estudante é
);
uma interface (não
class Estudante : IF_Estudante
especifica estado)
(extent estudantes)
{
attribute Endereco end_dorm;
attribute string nome;
attribute string id;
relationship set<Disciplina> asDiscip;
inverse Disciplina :: osEstud;
3. Padrão ODMG
27
};
3.2 Linguagem de Definição - ODL
Exemplo ODL - BD Genealogia
class Pessoa
(extent pessoas)
{
attribute string nome;
attribute struct Address
{unsigned short numero, string rua, Cidade cidade} endereco;
UFPA
Informática
relationship Pessoa conjuge inverse Pessoa :: conjuge;
relationship set<Pessoa> filhos inverse Pessoa :: pais;
relationship list<Pessoa> pais inverse Pessoa :: filhos;
void nascim (in string nome_pessoa;
boolean casamento (in string nome_pessoa)
raises (não_há_pessoa);
unsigned short descendentes (out set<Pessoa> todos_desc)
raises (não_há_pessoa);
};
3. Padrão ODMG
28
3.2 Linguagem de Definição - ODL
Exemplo ODL - BD Genealogia
UFPA
Informática
class Cidade
(extent cidades
key cep)
{
attribute unsigned short cep;
attribute string nome;
attribute set<Pessoa> população;
};
3. Padrão ODMG
29
Exercício - ODL
Criar as Classes
Pessoa
Funcionário
Aluno
n
n
1
gerencia
1
UFPA
Informática
n
Prédio
usa
usa
n
n
comp.
de
Escritório
n
Sala
Sala de Aula
30
3.3. Linguagem de Consulta OQL
Visão Geral

Características de OQL - Object Query
Language
– linguagem associativa de consultas


baseada no modelo de objetos do ODMG
baseada em SQL-92 com extensões de orientação a objetos
provê primitivas para manipular coleções
linguagem funcional com expressões aninhadas
UFPA
Informática
–
–
–
–
a consulta é especificada no SGBD através de uma expressão
SGBD passa ao usuário apenas os objetos que resolvem a
consulta
3. Padrão ODMG
31
3.3. Linguagem de Consulta OQL
Visão Geral

Características de OQL - Object Query
Language
– não é linguagem completa para desenvolvimento de
aplicações
– baseada no mesmo sistema de tipos de uma LPOO


consultas OQL podem ser embutidas na LPOO
consultas OQL podem chamar operações programadas na LPOO
– não possui comandos de alteração

uso da LPOO para alterações
UFPA
Informática
– Objeto consultado: coleções


objetos com nomes (pontos de entrada no BD)
extensões de classes (extent)
3. Padrão ODMG
32
3.3. Linguagem de Consulta OQL
Visão Geral

Modelo para exemplos:
– extent de Pessoa é pessoas
– extent de Empregado é empregados
– Presidente é nome de um objeto de pessoa
subordinação
1
UFPA
Informática
Pessoa
Empregado
nome
data_nasc
sexo
salário
idade()
nível()
subordinados
0..*
3. Padrão ODMG
33
3.3. Linguagem de Consulta OQL
Visão Geral

Conjunto no resultado
select distinct p.idade
from Pessoas p
where p.nome = “José”
UFPA
Informática
– Obtém um conjunto com as diferentes idades de pessoas com
nome = “José”
– o resultado é do tipo set<integer>
– cláusula distinct faz com que seja obtido set e não bag
3. Padrão ODMG
34
3.3. Linguagem de Consulta OQL
Visão Geral

Estrutura no resultado, uso de operação
select distinct struct (id:p.idade, sx:p.sexo)
from Pessoas p
UFPA
Informática
– Obtém um par com a idade e o sexo de cada pessoa
– o resultado é do tipo set<struct>
– uso da operação idade() na consulta OQL como se fosse
atributo
3. Padrão ODMG
35
3.3. Linguagem de Consulta OQL
Visão Geral

Consulta aninhada no resultado
UFPA
Informática
select distinct struct
(nome:emp.nome,
altos_emp:
(select s
from emp.subordinados s
where s.salario > 5000))
from Empregados emp
– Para cada empregado, obter um par formado por seu nome
e pelo conjunto dos empregados que a ele estão
subordinados e cujo salário é maior que 5.000
– tipo do resultado:

set<struct(nome:string, altos_emp:bag<Empregado>)>
3. Padrão ODMG
36
3.3. Linguagem de Consulta OQL
Visão Geral

Consulta aninhada no resultado
distinct = set
Empregado é especialização de pessoa
herança de propriedades
UFPA
Informática
consulta aninhada no
select distinct struct
resultado
(nome:emp.nome,
relacionamento
subordinados de emp
altos_emp:
retorna conjunto de
sem distinct = bag
(select s
subordinados
from emp.subordinados s
where s.salario > 5000))
from Empregados emp
3. Padrão ODMG
37
3.3. Linguagem de Consulta OQL
Visão Geral

Consulta aninhada no from
select struct (id:emp_grad.idade, sx:emp_grad.sexo)
from
(select emp
from Empregados emp
where emp.nível = 10) as emp_grad
where emp_grad.salario > 1000
UFPA
Informática
– Obtém a idade e o sexo de cada empregado de nível 10
com salário > 1000
3. Padrão ODMG
38
3.3. Linguagem de Consulta OQL
Visão Geral

Consultas sem select
– Nomes de objetos ou de extents podem ser usados
diretamente
– Exemplos:


UFPA
Informática

Obter o presidente:
Presidente
Obter os subordinados do presidente:
Presidente.subordinados
Obter o conjunto de todas as pessoas:
Pessoas
3. Padrão ODMG
39
3.3. Linguagem de Consulta OQL
Visão Geral

Objetos e literais no resultado da
consulta
– OID do objeto pode ser

OID do objeto no BD
select emp from Empregados...

OID gerado pelo processador de consultas
UFPA
Informática
select Pessoa(nome:..., data_nasc:...)...
3. Padrão ODMG
40
3.3. Linguagem de Consulta OQL
Visão Geral

Expressões de caminho - path
expression
– notações:


pess.conjuge
pess->conjuge
– exemplo (BD genealógico)
pess.conjuge.endereco.cidade.nome
UFPA
Informática
um atributo nome
uma cidade, navegação
de relacionamento
um atributo endereço
outra pessoa, obtida por
navegação de relacionamento
uma pessoa
3. Padrão ODMG
41
3.3. Linguagem de Consulta OQL
Visão Geral

Path Expressions e relacionamentos
N:N
– pess.filhos.nome
– consulta incorreta pois:


pess.filhos é um conjunto de pessoas (set<Pessoa>)
a lista não tem o atributo nome, e sim cada elemento da lista
UFPA
Informática
– Forma correta:
select filho.nome
from pess.filhos as filho
– Resultado: bag<string>
3. Padrão ODMG
42
3.3. Linguagem de Consulta OQL
Visão Geral

Cláusula From com várias coleções
select filho.endereço
from Pessoas pess,
Pess.filhos filho
– Os dois elementos do from são interrelacionaods
UFPA
Informática
– Pessoas pess indica que a consulta varre todo o extent de
Pessoa
– pess.filhos filho indica que, para cada pessoa pess, será
varrido o conjunto de seus filhos (pess.filhos)
3. Padrão ODMG
43
3.3. Linguagem de Consulta OQL
Visão Geral

Cláusula WHERE - relação entre coleções
UFPA
Informática
select fil.endereço
from Pessoas pess,
Pess.filhos fil
where pess.endereco.rua= “Beco das Tamancas”
and count(pess.filhos) > 1
and pess.endereco.cidade = fil.endereco.cidade
– Obtém o conjunto de endereços dos filhos de pessoas com mais
de um filho que vivem (pais) no Beco das Tamancas e cujos
filhos vivem na mesma cidade
3. Padrão ODMG
44
3.3. Linguagem de Consulta OQL
Visão Geral

Cláusula WHERE - Junção
select
from
where
pess
Pessoas pess, Cidades cid
pess.nome = cid.nome
UFPA
Informática
– Obtém as pessoas cujo nome é idêntico a um nome de
cidade
3. Padrão ODMG
45
3.3. Linguagem de Consulta OQL
Visão Geral

Tratamento de valores vazios - (nil)
– o resultado do acesso a nil é UNDEFINED
– Regras:
. ou -> aplicado sobre UNDEFINED resulta UNDEFINED

comparação (=, !=, <,...) com operandos UNDEFINED resulta em
FALSE

is_defined(predicado) e is_undefined(predicado) testam se um
predicado é definido ou não

qualquer outra operação sobre UNDEFINED resulta em erro de
execução
UFPA
Informática

3. Padrão ODMG
46
3.3. Linguagem de Consulta OQL
Visão Geral

Tratamento de valores vazios - (nil)
– Exemplo 1: obter os empregados de Curitiba
select emp
from Empregados emp
where emp.endereco.cidade = “Curitiba”
UFPA
Informática
– Exemplo 2: erro - um dos empregados não possui endereço
select emp.endereco.cidade
from Empregados emp
– Exemplo 3: forma correta
select emp.endereco.cidade
from Empregados emp
where is_defined(emp.endereco.cidade)
3. Padrão ODMG
47
3.3. Linguagem de Consulta OQL
Visão Geral

Chamada de Operações
– Operações podem ser referenciadas na mesma posição em
que atributos são usados
– o usuário não necessita saber se a chamada é a um atributo
ou método (a menos que existam parâmetros)
referência a uma
operação
– Exemplo:
select max(
select filho.idade
UFPA
Informática
from pess.filhos filho)
from Pessoas pess
where pess.nome = “José da Silva”
3. Padrão ODMG
48
3.3. Linguagem de Consulta OQL
Visão Geral

Chamada de Operações
– Supor que
UFPA
Informática
– primogênito() é um método de pessoa que retorna uma instância
de pessoa
– vive_em(string) retorna true se a pessoa vive na cidade dada
como parâmetro
select pess.primogenito.endereco.rua
from Pessoas pess
where pess.vive_em(“Curitiba”) and
count(pess.filhos) > 0
referência a uma
operação
3. Padrão ODMG
49
3.3. Linguagem de Consulta OQL
Visão Geral

Polimorfismo
– O método a ser chamado é decidido em tempo
de execução (late binding)
Pessoa
UFPA
Informática
select pess.atividades
from Pessoas pess
atividades()
Empregado
Estudante
atividades()
atividades()
média()
3. Padrão ODMG
50
3.3. Linguagem de Consulta OQL
Visão Geral
Definição estática de classe
– Type casting
– indicação de que um objeto pertence a uma
subclasse específica
UFPA
Informática
select ((Estudante)pess).média
from Pessoas pess
where “estudar” in pess.atividades
Pessoa
atividades()
Empregado
Estudante
atividades()
atividades()
média()
3. Padrão ODMG
51
3.3. Linguagem de Consulta OQL
Visão Detalhada

OQL é linguagem funcional e tipada
– cada expressão envolve um operador e seus operandos
tipados
– uma expressão (consulta) retorna um objeto ou um literal
– operandos podem ser expressões
– uma expressão tem um tipo (estático) derivado:


UFPA
Informática

da estrutura da consulta
da definição de tipo dentro da consulta
de tipos de objetos e literais consultados
3. Padrão ODMG
52
3.3. Linguagem de Consulta OQL
Visão Detalhada

Consultas nomeadas
UFPA
Informática
– consultas usadas frequentemente podem ser armazenadas no
BD sob um nome (visão em SQL)
– consultas nomeadas podem ter parâmetros
– Exemplo:
define idade_de(x) as
select pess.idade
from Pessoas pess
where pess.nome = x
– Uso: idade_de(“Jose da Silva”)
3. Padrão ODMG
53
3.3. Linguagem de Consulta OQL
Visão Detalhada
UFPA
Informática

Tipos de expressões OQL
–
–
–
–
–
–
–
–
–
–
Expressão elementar
Construtor
Expressão de tipo atômico
Expressão de objeto
Expressão de coleção
Select-from-where
Operadores Group by e Order by
Expressão de coleção indexada
Operação de coleção
Chamada de função
3. Padrão ODMG
54
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressão elementar
– Literal Atômico






referência vazia: nil
boolean: true false
integer: 27 3789
Float: 3.14 345.55e-2
Character: ‘x’
String: “João”
– Objeto nomeado

Estudantes
Presidente
UFPA
Informática

Extent da classe:
nome definido para o objeto:
3. Padrão ODMG
55
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressão elementar
– Variável de iteração

Cláusula FROM
select ... from Pessoas as p
select ... from Pessoas p
UFPA
Informática
select ... from p in Pessoas


p é uma variável de iteração
pode ser usada como uma expressão elementar
3. Padrão ODMG
56
3.3. Linguagem de Consulta OQL
Visão Detalhada

Construtor
– Expressão que retorna uma nova instância de um tipo
– Exemplos:
UFPA
Informática
Empregado (nome:”José da Silva”,
sexo:”M”
data_nasc:”13/9/98”
salario: 325
chefe: Presidente)
struct(nome:”José da Silva”, sexo:”M”)
set(1,2,4)
list(1,4,3,6)
list(3..5)
bag(1,5,6,8)
array(1,4,6)
3. Padrão ODMG
57
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressão de tipo atômico
– retorna um objeto atômico
– Operadores unários:


+, -, abs, not
Exemplo: +5, not(salario > 10)
– Operadores binários
aritméticos: +, -, *, /, mod
 relacionais: =, !=, <, <=,>,>=
 booleanos: and, or
 string: ||, + (concatenação), like
– Exemplos:
 “José”|| “Silva” ou “José” + “Silva”
 “s” in “José”
 “José”3 retorna “s”
 “José”[2:4] retorna “osé”
 nome like “J?s*”
UFPA
Informática

3. Padrão ODMG
58
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressões de Objeto
– Referência a propriedades e operações
UFPA
Informática
pess.nome
emp.chefe
emp.chefe.chefe
pess.idade
3. Padrão ODMG
59
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressões de coleção
– Quantificador Universal (for all)
for all est in Estudantes: est.id != ““
UFPA
Informática
– Quantificador Existencial (exists)
exists
disc in EstudFulano.asDiscip
exists part in disc.asPartes: part.oProf.nome=“Codd”
select
from
where
disc.nome
disciplinas disc
exists
(select part.numero
from part in disc.asPartes
where part.oProf.nome=“Codd”)
3. Padrão ODMG
60
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressões de Coleção
– Teste de contenção em coleção
pess in Pessoas
– Funções de Agregação (mesmas do SQL, porém ortogonais!)


UFPA
Informática

min, max, count, sum, avg
Sintaxe:
– <oper> (<e>) onde <e> é uma expressão que retorna uma
coleção
Exemplos:
max(select salário from Professores)
sum(select salário from Professores)
avg(select salário from Professores)
count(Professores)
3. Padrão ODMG
61
3.3. Linguagem de Consulta OQL
Visão Detalhada

Select-From-Where
– Uso de variáveis de iteração no from
from Estudantes as est
select
from
UFPA
Informática
where
Professor_aluno:struct (estudante:est_nome,
professor:parte.oProf.nome)
Estudantes as est,
est.asDiscip as disc,
disc.asPartes as parte
parte.oProf.nivel = “Titular”
3. Padrão ODMG
62
3.3. Linguagem de Consulta OQL
Visão Detalhada
 Select-From-Where
– Uso de variáveis de iteração no from
UFPA
Informática
select *
from Estudantes as est,
est.asDiscip as disc,
disc.asPartes as parte
where parte.oProf.nivel = “Titular”
– retorna triplas formadas por um estudante, uma disciplina e
uma parte de tipo:
bag<struct(est:Estudante, disc:Disciplina, parte:Parte)>
3. Padrão ODMG
63
3.3. Linguagem de Consulta OQL
Visão Detalhada

Cláusula Group by
– Resultado é um struct que contém as variáveis de
agrupamento e uma coleção com as instâncias de valor
comum

Exemplos:
select
*
from
Professores prof
group by niv:nível
partition
niv
prof
titular
prof
...
partition
niv
prof
adjunto
prof
UFPA
Informática
...
...
Resultado:
set<struct(niv:enum, partition:bag<struct(prof:Professor)>)>
3. Padrão ODMG
64
3.3. Linguagem de Consulta OQL
Visão Detalhada
 Cláusula
Group by
departamento,
sal_med:avg( select part.salario
from partition as part)
from
Empregados emp
group by departamento:emp.deptno
having avg(
select part.salario
from partition as part)> 3000
UFPA
Informática
select
3. Padrão ODMG
65
3.3. Linguagem de Consulta OQL
Visão Detalhada

Cláusula Order by
– Resultado: lista
– Exemplo:
select pess
from
Pessoas pess
order by pess.idade, pess.nome

Expressões de Coleção Indexada
– Obtendo o i-ésimo elemento de uma lista
list(a,b,c,d) [1]
retorna ‘b’ (primeiro elemento é indexado por 0)
UFPA
Informática

3. Padrão ODMG
66
3.3. Linguagem de Consulta OQL
Visão Detalhada

Expressões de Coleção Indexada
element( select disc from Disciplinas disc
where

disc.nome = “Cálculo” and
disc.numero = “101”).temPreReq [2]
retorna o terceiro pré-requisito de Cálculo 101
– Obtendo o primeiro ou último elemento de uma lista (first/last)
UFPA
Informática
First(element(
select
where
disc from Disciplinas disc
disc.nome = “Cálculo” and
disc.numero = “101”).temPreReq)
– Concatenando listas
list(1,2) + list(2,3) retorna list(1,2,2,3)
3. Padrão ODMG
67
3.3. Linguagem de Consulta OQL
Visão Detalhada

Operações sobre coleções
– Union, Intersect, Except
bag (2,3,3) union bag(3,3,2)
retorna bag(2,3,3,3,3,2)
bag (2,3,3) intersect bag(3,3,2)
retorna bag(2,3)
Estudante except Monitor
– Inclusão de coleções {<,<=,>,>=}
retorna true
UFPA
Informática
set(1,2,3) < set (3,4,2,1)
3. Padrão ODMG
68
3.3. Linguagem de Consulta OQL
Visão Detalhada

Operações sobre coleções
– Expressões de conversão

element (t) resulta no único elemento da coleção operando (Caso
a coleção contenha mais que um elemento resulta em erro)
UFPA
Informática
element(select p from professores p where p.nome = “Codd”)

Conversão de lista para conjunto
listtoset(list(1,2,3))

Remoção de duplicatas
distinct(list(1,2,2,3)) retorna set(1,2,3)

“Achatamento” de coleções
flatten(list(1,2,3),set(3,2,5,6),set(7))
retorna set(1,2,3,5,6,7)
3. Padrão ODMG
69
3.3. Linguagem de Consulta OQL
Visão Detalhada

Type Casting
– Considere a consulta abaixo:
select
from
where
e.oSalario
Estudantes e
e in (select part.oMonitor from Partes part)
– Esta consulta resulta em erro:
UFPA
Informática
– O SGBD não tem como verificar que todo estudante em
questão é um monitor e por isso possui um salário
– Solução: type casting
select (Empregado)e).oSalario
from Estudantes e
where e in (select part.oMonitor from Partes part)
3. Padrão ODMG
70
Exercício OQL


UFPA
Informática

Obter nome das pessoas e quantidade de
filhos que a pessoa tem para aquelas que
têm mais de 2 filhos
Obter as idades das pessoas e todas as
pessoas do sexo feminino que possuem
aquela idade.
Mesma consulta anterior mas apenas para
idades com mais de 10 pessoas
71
Exercício OQL - BD genealógico
select struct(nome: pess.nome, no_filhos: count(pess.filhos))
from Pessoas pess
where count(pess.filhos)>2
UFPA
Informática
select *
from Pessoas pess
where pess.sexo = ‘F’
group by id: pess.idade
select *
from Pessoas pess
where pess.sexo = ‘F’
group by id: pess.idade
having count(partition) > 10
72
Download

Padrão ODMG