sgbdoo padr o odmg n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
SGBDOO - Padrão ODMG PowerPoint Presentation
Download Presentation
SGBDOO - Padrão ODMG

Loading in 2 Seconds...

play fullscreen
1 / 72

SGBDOO - Padrão ODMG - PowerPoint PPT Presentation


  • 88 Views
  • Uploaded on

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

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

PowerPoint Slideshow about 'SGBDOO - Padrão ODMG' - lou


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

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


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
sgbdoo padr o odmg
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
    • Ligações (bindings) com LPOO
      • C++, Smalltalk e Java

3. Padrão ODMG

sgbdoo padr o odmg arquitetura

Declarações ODL

Aplicação em LPOO

Compilador

Processador

ODL

Runtime

SGBDOO

Binário da

Aplicação

metadados

Linker

BD

Aplicação Executável

SGBDOO - Padrão ODMG Arquitetura

3. Padrão ODMG

modelo de objetos odmg tipos
Modelo 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

modelo de objetos odmg tipos1

especificação

implementação

Java

implementação

C++

Modelo 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

3. Padrão ODMG

modelo de objetos odmg tipos2

interface classe

literal

operações (comportamento)

estado

(propriedades)

Modelo de Objetos ODMGTipos
  • 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};

3. Padrão ODMG

modelo de objetos odmg tipos3
Modelo de Objetos ODMGTipos
  • 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

modelo de objetos odmg tipos heran 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

Modelo de Objetos ODMGTipos - Herança

Empregado

Professor

Professor Titular

3. Padrão ODMG

modelo de objetos odmg tipos heran a1
Modelo de Objetos ODMGTipos - Herança
  • 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;...};

herança extends

(estado + comportamento)

herança IS-A

(de comportamento)

3. Padrão ODMG

modelo de objetos odmg tipos4
Modelo de Objetos ODMGTipos
  • 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

modelo de objetos odmg tipos5
Modelo de Objetos ODMGTipos
  • 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

modelo de objetos odmg tipos6
Modelo de Objetos ODMGTipos
  • 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

3 1 modelo de objetos odmg tipos
3.1 Modelo de Objetos ODMGTipos
  • 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

modelo de objetos odmg tipos7
Modelo de Objetos ODMGTipos
  • 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

modelo de objetos odmg tipos8
Modelo de Objetos ODMGTipos
  • 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

linguagem de defini o odl estado e comportamento de tipos
Linguagem de Definição - ODLEstado e Comportamento de tipos
  • 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

};

atributo literal atômico

atributo objeto

(referência a um OID)

3. Padrão ODMG

linguagem de defini o odl estado e comportamento de tipos1
Linguagem 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

linguagem de defini o odl estado e comportamento de tipos2
Linguagem de Definição - ODLEstado e Comportamento de tipos
  • Estado

interface Professor {

...

relationshipSet<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

linguagem de defini o odl estado e comportamento de tipos3
Linguagem de Definição - ODLEstado e Comportamento de tipos
  • Atributo Referência
    • referência a um objeto (relacionamento unidirecional)
    • não é relacionamento ODMG

interface Pessoa{

attributeshort idade;

attributestring nome;

attributeenum sexo (masculino, feminino);

attribute address home_address;

attributeset <Phone_no> phones;

attribute Department dept

};

atributo objeto

(referência a um objeto - OID)

3. Padrão ODMG

linguagem de defini o odl estado e comportamento de tipos4
Linguagem 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

linguagem de defini o odl exemplo odl universidade
Linguagem de Definição - ODLExemplo ODL - Universidade

Salário

Estudante

Empregado

<<extends>>

<<extends>>

Professor

Monitor

IF_Estudante

auxilia

pré-req

matrícula

Disciplina

Parte

partes

ministra

3. Padrão ODMG

linguagem de defini o odl exemplo odl universidade1
Linguagem de Definição - ODLExemplo ODL - Universidade

class Disciplina

(extent disciplinas)

{

attributestring nome;

attributestring numero;

relationshiplist<Parte> asPartes

inverse Parte:: aDiscip;

relationshipset<Disciplina> temPreReq

inverse Disciplina:: ePreReq;

relationshipset<Disciplina> ePreReq

inverse Disciplina:: temPreReq;

relationshipset<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

slide22

Linguagem de Definição - ODLExemplo ODL - Universidade

  • class Parte
  • (extent partes)
  • {
  • attributestring numero;
  • relationship Monitor oMonitor
  • inverse Monitor:: asPartes;
  • relationship ProfessoroProf
  • inverse Professor:: asPartes;
  • relationship Disciplina aDiscip
  • inverse Disciplina:: asPartes;
  • };

3. Padrão ODMG

slide23

Linguagem de Definição - ODLExemplo ODL - Universidade

  • class Salario
  • {
  • attributefloat base;
  • attributefloat hora_extra;
  • attributefloat bonus;
  • };

3. Padrão ODMG

slide24

Linguagem de Definição - ODLExemplo ODL - Universidade

  • class Empregado
  • (extent empregados)
  • {
  • attributestring nome;
  • attributeshort id;
  • relationship Salario oSalario;
  • void contratar();
  • void demitir() raises (não_existe_emp);
  • };

3. Padrão ODMG

slide25

Linguagem de Definição - ODLExemplo ODL - Universidade

  • class Professor
  • (extent professores)
  • {
  • attributeenum
  • Nivel(titular, adjunto, assistente) nivel;
  • relationship set<Parte> asPartes
  • inverse Parte :: oProf;
  • void promocao() raises (inelegivel_promo);
  • };

3. Padrão ODMG

slide26

Linguagem de Definição - ODLExemplo ODL - Universidade

  • interface IF_Estudante
  • {
  • struct Endereco {
  • string casa;
  • string numero;}
  • attribute Endereco end_dorm;
  • attributestring nome;
  • attributestring id;
  • relationshipset<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

slide27

3.2 Linguagem de Definição - ODLExemplo ODL - Universidade

  • class Monitor extends Empregado : IF_Estudante
  • {
  • attribute Endereco end_dorm;
  • attributestring nome;
  • attributestring id;
  • relationshipset<Disciplina> asDiscip;
  • inverse Disciplina :: osEstud;
  • relationshipset<Parte> asPartes;
  • inverse Parte :: oMonitor;
  • );
  • class Estudante : IF_Estudante
  • (extent estudantes)
  • {
  • attribute Endereco end_dorm;
  • attributestring nome;
  • attributestring id;
  • relationshipset<Disciplina> asDiscip;
  • inverse Disciplina :: osEstud;
  • };

estado é redefinido,

já que IF_Estudante é

uma interface (não

especifica estado)

3. Padrão ODMG

slide28

3.2 Linguagem de Definição - ODLExemplo ODL - BD Genealogia

class Pessoa

(extent pessoas)

{

attributestring nome;

attributestruct Address

{unsigned short numero, string rua, Cidade cidade} endereco;

relationship Pessoa conjuge inverse Pessoa :: conjuge;

relationshipset<Pessoa> filhos inverse Pessoa :: pais;

relationshiplist<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

slide29

3.2 Linguagem de Definição - ODLExemplo ODL - BD Genealogia

class Cidade

(extent cidades

key cep)

{

attributeunsigned short cep;

attribute string nome;

attribute set<Pessoa> população;

};

3. Padrão ODMG

exerc cio odl criar as classes
Exercício - ODLCriar as Classes

Pessoa

Funcionário

Aluno

n

n

1

usa

usa

gerencia

1

n

Escritório

Prédio

Sala

n

n

n

Sala de Aula

comp.

de

3 3 linguagem de consulta oql v is 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

3 3 linguagem de consulta oql v is o geral1
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

3 3 linguagem de consulta oql vis o geral
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

Pessoa

Empregado

subordinados

nome

data_nasc

sexo

salário

0..*

nível()

idade()

3. Padrão ODMG

slide34

3.3. Linguagem de Consulta OQL Visão Geral

  • Conjunto no resultado
    • select distinct p.idade
    • from Pessoas p
    • where 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. Padrão ODMG

slide35

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
    • 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

slide36

3.3. Linguagem de Consulta OQL Visão Geral

  • 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

    • 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

slide37

3.3. Linguagem de Consulta OQL Visão Geral

  • 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

Empregado é especialização de pessoa

herança de propriedades

distinct = set

consulta aninhada no

resultado

relacionamento subordinados de emp

retorna conjunto de subordinados

sem distinct = bag

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral1
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

    • Obtém a idade e o sexo de cada empregado de nível 10 com salário > 1000

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral2
3.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

3 3 linguagem de consulta oql vis o geral3
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

select Pessoa(nome:..., data_nasc:...)...

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral4
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

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

3 3 linguagem de consulta oql vis o geral5
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
    • Forma correta:

select filho.nome

from pess.filhos as filho

    • Resultado: bag<string>

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral6
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
    • 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

slide44

3.3. Linguagem de Consulta OQL Visão Geral

  • Cláusula WHERE - relação entre coleções
    • 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

slide45

3.3. Linguagem de Consulta OQL Visão Geral

  • Cláusula WHERE - Junção
    • select pess
    • from Pessoas pess, Cidades cid
    • where 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 geral7
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

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral8
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”

    • 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

whereis_defined(emp.endereco.cidade)

3. Padrão ODMG

slide48

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)
    • Exemplo:
    • selectmax( select filho.idade
    • from pess.filhos filho)
    • from Pessoas pess
    • where pess.nome = “José da Silva”

referência a uma

operação

3. Padrão ODMG

slide49

3.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.rua
    • from Pessoas pess
    • where pess.vive_em(“Curitiba”) and
    • count(pess.filhos) > 0

referência a uma

operação

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral9

Pessoa

atividades()

Estudante

Empregado

atividades()

média()

atividades()

3.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

3. Padrão ODMG

3 3 linguagem de consulta oql vis o geral10

Pessoa

atividades()

Estudante

Empregado

atividades()

média()

atividades()

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

select ((Estudante)pess).média

from Pessoas pess

where “estudar” in pess.atividades

3. Padrão ODMG

3 3 linguagem de consulta oql vis o detalhada
3.3. Linguagem de Consulta OQLVisã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

3 3 linguagem de consulta oql vis o detalhada1
3.3. Linguagem de Consulta OQLVisã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

3 3 linguagem de consulta oql vis o detalhada2
3.3. Linguagem de Consulta OQLVisão Detalhada
  • 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 detalhada3
3.3. Linguagem de Consulta OQLVisã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
      • Extent da classe: Estudantes
      • nome definido para o objeto: Presidente

3. Padrão ODMG

3 3 linguagem de consulta oql vis o detalhada4
3.3. Linguagem de Consulta OQLVisão Detalhada
  • 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. Padrão ODMG

3 3 linguagem de consulta oql v is 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.3. Linguagem de Consulta OQL Visão Detalhada

3. Padrão ODMG

3 3 linguagem de consulta oql v is o detalhada1
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*”

3.3. Linguagem de Consulta OQL Visão Detalhada

3. Padrão ODMG

3 3 linguagem de consulta oql vis o detalhada5
3.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

3 3 linguagem de consulta oql vis o detalhada6
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 != ““

    • Quantificador Existencial (exists)

exists disc in EstudFulano.asDiscip

exists part in disc.asPartes: part.oProf.nome=“Codd”

select disc.nome

from disciplinas disc

where exists

(select part.numero

from part in disc.asPartes

where part.oProf.nome=“Codd”)

3. Padrão ODMG

3 3 linguagem de consulta oql vis o detalhada7
3.3. Linguagem de Consulta OQLVisã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!)
      • 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

slide62

3.3. Linguagem de Consulta OQLVisão Detalhada

  • 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 parte
    • where parte.oProf.nivel = “Titular”

3. Padrão ODMG

slide63

3.3. Linguagem de Consulta OQLVisão Detalhada

  • Select-From-Where
    • Uso de variáveis de iteração no from
    • 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

slide64

3.3. Linguagem de Consulta OQLVisã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
    • Resultado:
    • set<struct(niv:enum, partition:bag<struct(prof:Professor)>)>

partition

niv

prof

titular

prof

...

partition

niv

prof

adjunto

prof

...

...

3. Padrão ODMG

slide65

3.3. Linguagem de Consulta OQLVisão Detalhada

  • Cláusula Group by
    • select departamento,
    • sal_med:avg( select part.salario
    • from partition as part)
    • from Empregados emp
    • groupby departamento:emp.deptno
    • having avg( select part.salario
    • from partition as part)> 3000

3. Padrão ODMG

3 3 linguagem de consulta oql vis o detalhada8
3.3. Linguagem de Consulta OQLVisã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

3 3 linguagem de consulta oql vis o detalhada9
3.3. Linguagem de Consulta OQLVisã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)

First(element( select disc from Disciplinas disc

where 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

slide68

3.3. Linguagem de Consulta OQLVisã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 {<,<=,>,>=}
        • set(1,2,3) < set (3,4,2,1) retorna true

3. Padrão ODMG

slide69

3.3. Linguagem de Consulta OQLVisã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)

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

slide70

3.3. Linguagem de Consulta OQLVisão Detalhada

  • Type Casting
    • Considere a consulta abaixo:
    • select e.oSalario
    • from Estudantes e
    • where 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).oSalario
    • from Estudantes e
    • where e in (select part.oMonitor from Partes part)

3. Padrão ODMG

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
exerc cio oql bd geneal gico
Exercí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