sgbdoo - padrão odmg
DESCRIPTION
SGBDOO - Padrão ODMG. Componentes: Modelo de objetos Linguagem de especificação dos objetos ODL - Object Definition Language Linguagem de Consulta OQL - Object Query Language Declarativa, não procedural para consulta e atualização da base de dados Baseada no SQL - PowerPoint PPT PresentationTRANSCRIPT
Info
rmá
tica
UF
PA
BDOO
1
SGBDOO - Padrão ODMGSGBDOO - Padrão ODMG
Componentes:– Modelo de objetos– Linguagem de especificação dos objetos
ODL - Object Definition Language
– Linguagem de Consulta 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
Info
rmá
tica
UF
PA
BDOO
2
SGBDOO - Padrão ODMG ArquiteturaArquiteturaSGBDOO - Padrão ODMG ArquiteturaArquitetura
Declarações ODL
ProcessadorODL
BD
metadados
Aplicação em LPOO
Compilador
Binário daAplicação
RuntimeSGBDOO
Linker
Aplicação Executável
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
3
Modelo de Objetos ODMGTiposModelo de Objetos ODMGTipos
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– Definido pelo conjunto de propriedades: atributos e
relacionamentos
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
4
Modelo de Objetos ODMGTiposModelo de Objetos ODMGTipos
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 cada uma define como as operações
estão implementadas e outros detalhes internos especificaçãoespecificação
implementaçãoC++
implementaçãoC++
implementação Java
implementação Java
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
5
Modelo de Objetos ODMG Tipos
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 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};
literalinterface classe
operações (comportamento)
estado(propriedades) 3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
6
Modelo de Objetos ODMG Tipos
Modelo de Objetos ODMG Tipos
Tipos de Especificações (cont.)
– Definição de Classe 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
Info
rmá
tica
UF
PA
BDOO
7
Modelo de Objetos ODMG Tipos - HerançaHerançaModelo de Objetos ODMG Tipos - HerançaHerança
Herança IS-A (é um)– Exemplos:
interface Empregado {...};
interface Professor: Empregado {...};
class Professor_Titular: Professor {...};
– 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
Empregado
Professor
Professor Titular
Info
rmá
tica
UF
PA
BDOO
8
Herança de Estado (extends)– Semelhante a herança em LPOO– Não admite herança múltipla– Somente entre classes:
class Pessoa {
attribute string nome;
attribute Date dataNasc};
class EmpregadoPess extends Pessoa : Empregado {
attribute Date dataContr;
attribute Currency sal;...};
Modelo de Objetos ODMG Tipos - HerançaHerançaModelo de Objetos ODMG Tipos - HerançaHerança
herança extends(estado + comportamento)
herança IS-A(de comportamento)
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
9
Modelo de Objetos ODMG Tipos
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– 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
Info
rmá
tica
UF
PA
BDOO
10
Modelo de Objetos ODMG Tipos
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– identificador fornecido pelo usuário– serve para dar nomes a objetos “raiz”
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
11
Modelo de Objetos ODMG Tipos
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”) sem ordenação e admite duplicatas
– List <t> (lista ordenada) com ordenação e admite duplicatas
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
12
3.1 Modelo de Objetos ODMG Tipos
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)– Date, Interval, Time, TimeStamp
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
13
Modelo de Objetos ODMG Tipos
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 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
Info
rmá
tica
UF
PA
BDOO
14
Modelo de Objetos ODMG Tipos
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,...
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
15
Estado– Atributo
valor pertence a um tipo não tem propriedade nem participa de relacionamentos não pode ser especializado
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
};
Linguagem de Definição - ODLEstado e Comportamento de tiposLinguagem de Definição - ODLEstado e Comportamento de tipos
3. Padrão ODMG
atributo literal atômico
atributo objeto (referência a um OID)
Info
rmá
tica
UF
PA
BDOO
16
Linguagem de Definição - ODLEstado e Comportamento de tiposLinguagem de Definição - ODLEstado e Comportamento de tipos
Estado– Relacionamento
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
Info
rmá
tica
UF
PA
BDOO
17
Linguagem de Definição - ODLEstado e Comportamento de tiposLinguagem de Definição - ODLEstado e Comportamento de tipos
Estado
interface Professor {...relationship Set<Curso> ministra
inverse Curso :: ehministrado_por;...};
interface Curso {...relationship Professor eh_ministrado_por
inverse Professor::ministra;...};
3. Padrão ODMG
para um
para muitos (set)
Info
rmá
tica
UF
PA
BDOO
18
Linguagem de Definição - ODLEstado e Comportamento de tiposLinguagem de Definição - ODLEstado e Comportamento de tipos
Atributo Referência– 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
Info
rmá
tica
UF
PA
BDOO
19
Linguagem de Definição - ODLEstado e Comportamento de tiposLinguagem de Definição - ODLEstado 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: 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
Info
rmá
tica
UF
PA
BDOO
20
Linguagem de Definição - ODLExemplo ODL - UniversidadeLinguagem de Definição - ODLExemplo ODL - Universidade
Disciplina
Estudante
IF_Estudante
Parte
Monitor Professor
Empregado
Salário
<<extends>> <<extends>>
auxiliamatrícula
ministra
pré-req
partes
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
21
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
class Disciplina(extent disciplinas){
attribute string nome;attribute string numero;
relationship list<Parte> asPartesinverse Parte:: aDiscip;
relationship set<Disciplina> temPreReqinverse Disciplina:: ePreReq;
relationship set<Disciplina> ePreReqinverse Disciplina:: temPreReq;
relationship set<IF_Estudante> osEstudinverse 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
Info
rmá
tica
UF
PA
BDOO
22
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
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
23
class Salario
{
attribute float base;
attribute float hora_extra;
attribute float bonus;
};
3. Padrão ODMG
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
24
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
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
25
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
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
26
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
Linguagem de Definição - ODL Exemplo ODL - Universidade
Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
27
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;
inverse Parte :: oMonitor;);class Estudante : IF_Estudante(extent estudantes){
attribute Endereco end_dorm;attribute string nome;attribute string id;relationship set<Disciplina> asDiscip;
inverse Disciplina :: osEstud;}; 3. Padrão ODMG
estado é redefinido,já que IF_Estudante éuma interface (nãoespecifica estado)
3.2 Linguagem de Definição - ODL Exemplo ODL - Universidade
3.2 Linguagem de Definição - ODL Exemplo ODL - Universidade
Info
rmá
tica
UF
PA
BDOO
28
class Pessoa(extent pessoas){
attribute string nome;attribute struct Address
{unsigned short numero, string rua, Cidade cidade} endereco;
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);};
class Pessoa(extent pessoas){
attribute string nome;attribute struct Address
{unsigned short numero, string rua, Cidade cidade} endereco;
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
3.2 Linguagem de Definição - ODL Exemplo ODL - BD Genealogia
3.2 Linguagem de Definição - ODL Exemplo ODL - BD Genealogia
Info
rmá
tica
UF
PA
BDOO
293. Padrão ODMG
class Cidade (extent cidades key cep){attribute unsigned short cep;attribute string nome;attribute set<Pessoa> população;
};
class Cidade (extent cidades key cep){attribute unsigned short cep;attribute string nome;attribute set<Pessoa> população;
};
3.2 Linguagem de Definição - ODL Exemplo ODL - BD Genealogia
3.2 Linguagem de Definição - ODL Exemplo ODL - BD Genealogia
Info
rmá
tica
UF
PA
BDOO
30
Exercício - ODLCriar as Classes
Exercício - ODLCriar as Classes
Pessoa
Funcionário Aluno
Prédio SalaEscritório
Sala de Aula
usa
n
n
comp.de
n n
gerencia1
n
usa
n
1
Info
rmá
tica
UF
PA
BDOO
31
3.3. Linguagem de Consulta OQL Visão Geral
3.3. Linguagem de Consulta OQL Visão Geral
Características de OQL - Object Query Language– linguagem associativa de consultas
a consulta é especificada no SGBD através de uma expressão SGBD passa ao usuário apenas os objetos que resolvem a
consulta
– 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
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
32
3.3. Linguagem de Consulta OQL Visão Geral
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
– Objeto consultado: coleções objetos com nomes (pontos de entrada no BD) extensões de classes (extent)
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
33
3.3. Linguagem de Consulta OQL Visão Geral3.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
3. Padrão ODMG
Pessoa
nomedata_nascsexo
idade()
Empregado
saláriosubordinados
nível()
subordinação
0..*
1
Info
rmá
tica
UF
PA
BDOO
343. Padrão ODMG
Conjunto no resultado
select distinct p.idadefrom Pessoas pwhere p.nome = “José”
– 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.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
353. Padrão ODMG
Estrutura no resultado, uso de operação
select distinct struct (id:p.idade, sx:p.sexo)from Pessoas p
– 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.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
36
Consulta aninhada no resultadoselect 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
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
37
Consulta aninhada no resultado
select distinct struct (nome:emp.nome, altos_emp:
(select s from emp.subordinados s where s.salario > 5000))
from Empregados emp
3. Padrão ODMG
Empregado é especialização de pessoa herança de propriedades
consulta aninhada noresultado
relacionamento subordinados de empretorna conjunto de subordinados
distinct = set
sem distinct = bag
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
38
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Consulta aninhada no fromselect 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
– Obtém a idade e o sexo de cada empregado de nível 10 com salário > 1000
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
39
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Consultas sem select– Nomes de objetos ou de extents podem ser usados
diretamente– Exemplos:
Obter o presidente:
Presidente Obter os subordinados do presidente:
Presidente.subordinados Obter o conjunto de todas as pessoas:
Pessoas
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
40
3.3. Linguagem de Consulta OQL Visão Geral3.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
select Pessoa(nome:..., data_nasc:...)...
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
41
3.3. Linguagem de Consulta OQL Visão Geral3.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
3. Padrão ODMG
uma pessoa
outra pessoa, obtida pornavegação de relacionamento
um atributo endereço
uma cidade, navegação de relacionamento
um atributo nome
Info
rmá
tica
UF
PA
BDOO
42
3.3. Linguagem de Consulta OQL Visão Geral3.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
– Forma correta:select filho.nomefrom pess.filhos as filho
– Resultado: bag<string>
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
43
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Cláusula From com várias coleções
select filho.endereçofrom Pessoas pess,
Pess.filhos filho
– Os dois elementos do from são interrelacionaods
– 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
Info
rmá
tica
UF
PA
BDOO
44
Cláusula WHERE - relação entre coleções
select fil.endereçofrom Pessoas pess, Pess.filhos filwhere 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
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
45
Cláusula WHERE - Junção
select pessfrom Pessoas pess, Cidades cidwhere pess.nome = cid.nome
– Obtém as pessoas cujo nome é idêntico a um nome de cidade
3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Info
rmá
tica
UF
PA
BDOO
46
3.3. Linguagem de Consulta OQL Visão Geral3.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
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
47
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Tratamento de valores vazios - (nil)
– Exemplo 1: obter os empregados de Curitibaselect empfrom Empregados empwhere emp.endereco.cidade = “Curitiba”
– Exemplo 2: erro - um dos empregados não possui endereçoselect emp.endereco.cidadefrom Empregados emp
– Exemplo 3: forma corretaselect emp.endereco.cidadefrom Empregados emp
where is_defined(emp.endereco.cidade)
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
48
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)
– Exemplo:
select max( select filho.idade
from pess.filhos filho)from Pessoas pesswhere pess.nome = “José da Silva”
3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
referência a umaoperação
Info
rmá
tica
UF
PA
BDOO
493. Padrão ODMG
referência a umaoperação
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Chamada de Operações
– Supor que– 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.ruafrom Pessoas pesswhere pess.vive_em(“Curitiba”) and count(pess.filhos) > 0
Info
rmá
tica
UF
PA
BDOO
50
3.3. Linguagem de Consulta OQL Visão Geral3.3. Linguagem de Consulta OQL Visão Geral
Polimorfismo– O método a ser chamado é decidido em tempo
de execução (late binding)
select pess.atividades
from Pessoas pess
Pessoa
atividades()
Empregado
atividades()
Estudante
atividades()média()
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
51
3.3. Linguagem de Consulta OQL Visão Geral3.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
select ((Estudante)pess).média
from Pessoas pess
where “estudar” in pess.atividades
Pessoa
atividades()
Empregado
atividades()
Estudante
atividades()média()
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
52
3.3. Linguagem de Consulta OQL Visão Detalhada
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:
da estrutura da consulta da definição de tipo dentro da consulta de tipos de objetos e literais consultados
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
53
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Consultas nomeadas– 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
Info
rmá
tica
UF
PA
BDOO
54
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
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
553. Padrão ODMG
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 Extent da classe: Estudantes nome definido para o objeto: Presidente
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
563. Padrão ODMG
Expressão elementar
– Variável de iteração Cláusula FROM
select ... from Pessoas as p
select ... from Pessoas p
select ... from p in Pessoas
p é uma variável de iteração pode ser usada como uma expressão elementar
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
57
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Construtor– Expressão que retorna uma nova instância de um tipo
– Exemplos: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
Info
rmá
tica
UF
PA
BDOO
58
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
3. Padrão ODMG
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*”
Info
rmá
tica
UF
PA
BDOO
59
3.3. Linguagem de Consulta OQL Visão Detalhada3.3. Linguagem de Consulta OQL Visão Detalhada
Expressões de Objeto– Referência a propriedades e operações
pess.nome
emp.chefe
emp.chefe.chefe
pess.idade
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
60
3.3. Linguagem de Consulta OQL Visão Detalhada3.3. Linguagem de Consulta OQL Visão Detalhada
Expressões de coleção– Quantificador Universal (for all)
for all est in Estudantes: est.id != ““
– Quantificador Existencial (exists)
exists disc in EstudFulano.asDiscipexists part in disc.asPartes:
part.oProf.nome=“Codd”
select disc.nomefrom disciplinas discwhere exists
(select part.numero from part in disc.asPartes
where part.oProf.nome=“Codd”)3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
61
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
3. Padrão ODMG
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!) 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)
Info
rmá
tica
UF
PA
BDOO
623. Padrão ODMG
Select-From-Where– Uso de variáveis de iteração no from
from Estudantes as est
select Professor_aluno:struct (estudante:est_nome, professor:parte.oProf.nome)
from Estudantes as est, est.asDiscip as disc, disc.asPartes as partewhere parte.oProf.nivel = “Titular”
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
633. Padrão ODMG
Select-From-Where– Uso de variáveis de iteração no from
select *from Estudantes as est, est.asDiscip as disc, disc.asPartes as partewhere 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.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
643. Padrão ODMG
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 profgroup by niv:nível
Resultado:set<struct(niv:enum, partition:bag<struct(prof:Professor)>)>
titular
niv partitionprof
prof...
adjunto
niv partitionprof
prof...
...
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
653. Padrão ODMG
Cláusula Group by
select 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
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
66
3.3. Linguagem de Consulta OQL Visão Detalhada
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)
3. Padrão ODMG
Info
rmá
tica
UF
PA
BDOO
67
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Expressões de Coleção Indexada
element( select disc from Disciplinas discwhere 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)
First(element( select disc from Disciplinas discwhere 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
Info
rmá
tica
UF
PA
BDOO
68
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 {<,<=,>,>=}
set(1,2,3) < set (3,4,2,1) retorna true
3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
69
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)
element(select p from professores p where p.nome = “Codd”)
Conversão de lista para conjuntolisttoset(list(1,2,3))
Remoção de duplicatasdistinct(list(1,2,2,3)) retorna set(1,2,3)
“Achatamento” de coleçõesflatten(list(1,2,3),set(3,2,5,6),set(7)) retorna set(1,2,3,5,6,7)
3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
70
Type Casting– Considere a consulta abaixo:
select e.oSalariofrom Estudantes ewhere e in (select part.oMonitor from Partes part)
– Esta consulta resulta em erro:
– 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).oSalariofrom Estudantes ewhere e in (select part.oMonitor from Partes
part) 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Detalhada
3.3. Linguagem de Consulta OQL Visão Detalhada
Info
rmá
tica
UF
PA
BDOO
71
Exercício OQL Exercício OQL
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
Info
rmá
tica
UF
PA
BDOO
72
Exercício OQL - BD genealógicoExercício OQL - BD genealógico
select struct(nome: pess.nome, no_filhos: count(pess.filhos))
from Pessoas pess
where count(pess.filhos)>2
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