SGBDOO - Padr - PowerPoint PPT Presentation

1 / 72
About This Presentation
Title:

SGBDOO - Padr

Description:

Title: Bancos de Dados Orientados a Objetos Author: Rodrigo Reis Last modified by: CCEN Created Date: 9/27/1999 12:37:02 PM Document presentation format – PowerPoint PPT presentation

Number of Views:61
Avg rating:3.0/5.0
Slides: 73
Provided by: Rodrig102
Category:
Tags: sgbdoo | padr | sgbd

less

Transcript and Presenter's Notes

Title: SGBDOO - Padr


1
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
2
SGBDOO - Padrão ODMG Arquitetura
3. Padrão ODMG
3
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
4
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
5
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

3. Padrão ODMG
6
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
7
Modelo de Objetos ODMG Tipos - Herança
Empregado
  • 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

Professor
Professor Titular
3. Padrão ODMG
8
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
  • 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
9
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
10
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
11
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 lttgt (conjunto)
  • sem ordenação e sem duplicatas
  • Bag lttgt (sacola)
  • sem ordenação e admite duplicatas
  • List lttgt (lista ordenada)
  • com ordenação e admite duplicatas

3. Padrão ODMG
12
3.1 Modelo de Objetos ODMG Tipos
  • Coleções
  • Array lttgt (arranjo)
  • com ordenação e admite duplicatas
  • localiza elementos por posição
  • Dictionary ltt,vgt (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
13
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
14
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
15
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 ltPhone_nogt phones
  • attribute Department dept

atributo literal atômico
atributo objeto (referência a um OID)
3. Padrão ODMG
16
Linguagem de Definição - ODLEstado e
Comportamento de tipos
  • Estado
  • Relacionamento
  • somente relacionamentos binários 11, 1n, mn
  • 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
17
Linguagem de Definição - ODLEstado e
Comportamento de tipos
  • Estado
  • interface Professor
  • ...
  • relationship SetltCursogt ministra
  • inverse Curso ehministrado_por
  • ...
  • interface Curso
  • ...
  • relationship Professor eh_ministrado_por
  • inverse Professorministra
  • ...

para muitos (set)
para um
3. Padrão ODMG
18
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
  • attribute short idade
  • attribute string nome
  • attribute enum sexo (masculino, feminino)
  • attribute address home_address
  • attribute set ltPhone_nogt phones
  • attribute Department dept

atributo objeto (referência a um objeto - OID)
3. Padrão ODMG
19
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
20
Linguagem de Definição - ODLExemplo ODL -
Universidade
Salário
Estudante
Empregado
ltltextendsgtgt
ltltextendsgtgt
IF_Estudante
Monitor
Professor
auxilia
pré-req
matrícula
Disciplina
Parte
partes
ministra
3. Padrão ODMG
21
Linguagem de Definição - ODL Exemplo ODL -
Universidade
  • class Disciplina
  • (extent disciplinas)
  • attribute string nome
  • attribute string numero
  • relationship listltPartegt asPartes
  • inverse Parte aDiscip
  • relationship setltDisciplinagt temPreReq
  • inverse Disciplina ePreReq
  • relationship setltDisciplinagt ePreReq
  • inverse Disciplina temPreReq
  • relationship setltIF_Estudantegt osEstud
  • inverse ID_EstudanteasDiscip
  • boolean oferecer (in unsigned short semestre)
    raises (ja_oferec)
  • boolean cancelar (in unsigned short semestre)
    raises (nao_oferec)

3. Padrão ODMG
22
Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Parte (extent partes) attribute string
numero relationship Monitor oMonitor inverse
Monitor asPartes relationship Professor
oProf inverse Professor asPartes relationshi
p Disciplina aDiscip inverse Disciplina
asPartes
3. Padrão ODMG
23
Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Salario attribute float
base attribute float hora_extra attribute
float bonus
3. Padrão ODMG
24
Linguagem de Definição - ODL Exemplo ODL -
Universidade
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
25
Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Professor (extent professores) attribute
enum Nivel(titular, adjunto, assistente)
nivel relationship setltPartegt
asPartes inverse Parte oProf void
promocao() raises (inelegivel_promo)
3. Padrão ODMG
26
Linguagem de Definição - ODL Exemplo ODL -
Universidade
interface IF_Estudante struct Endereco
string casa string numero attribute
Endereco end_dorm attribute string
nome attribute string id relationship
setltDisciplinagt 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
27
3.2 Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Monitor extends Empregado
IF_Estudante attribute Endereco
end_dorm attribute string nome attribute
string id relationship setltDisciplinagt
asDiscip inverse Disciplina
osEstud relationship setltPartegt
asPartes inverse Parte oMonitor ) class
Estudante IF_Estudante (extent
estudantes) attribute Endereco
end_dorm attribute string nome attribute
string id relationship setltDisciplinagt
asDiscip inverse Disciplina osEstud
estado é redefinido, já que IF_Estudante é uma
interface (não especifica estado)
3. Padrão ODMG
28
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 relationship Pessoa conjuge
inverse Pessoa conjuge relationship
setltPessoagt filhos inverse Pessoa
pais relationship listltPessoagt 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 setltPessoagt
todos_desc) raises (não_há_pessoa)
3. Padrão ODMG
29
3.2 Linguagem de Definição - ODL Exemplo ODL -
BD Genealogia
class Cidade (extent cidades key
cep) attribute unsigned short cep attribute
string nome attribute setltPessoagt população
3. Padrão ODMG
30
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
31
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
32
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
33
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
34
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 setltintegergt
  • cláusula distinct faz com que seja obtido set e
    não bag

3. Padrão ODMG
35
3.3. Linguagem de Consulta OQL Visão Geral
  • Estrutura no resultado, uso de operação
  • select distinct struct (idp.idade, sxp.sexo)
  • from Pessoas p
  • Obtém um par com a idade e o sexo de cada pessoa
  • o resultado é do tipo setltstructgt
  • uso da operação idade() na consulta OQL como se
    fosse atributo

3. Padrão ODMG
36
3.3. Linguagem de Consulta OQL Visão Geral
  • Consulta aninhada no resultado
  • select distinct struct
  • (nomeemp.nome,
  • altos_emp
  • (select s
  • from emp.subordinados s
  • where s.salario gt 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
  • setltstruct(nomestring, altos_empbagltEmpregadogt)gt

3. Padrão ODMG
37
3.3. Linguagem de Consulta OQL Visão Geral
  • Consulta aninhada no resultado
  • select distinct struct
  • (nomeemp.nome,
  • altos_emp
  • (select s
  • from emp.subordinados s
  • where s.salario gt 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
38
3.3. Linguagem de Consulta OQL Visão Geral
  • Consulta aninhada no from
  • select struct (idemp_grad.idade,
    sxemp_grad.sexo)
  • from (select emp
  • from Empregados emp
  • where emp.nível 10) as emp_grad
  • where emp_grad.salario gt 1000
  • Obtém a idade e o sexo de cada empregado de nível
    10 com salário gt 1000

3. Padrão ODMG
39
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
40
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
41
3.3. Linguagem de Consulta OQL Visão Geral
  • Expressões de caminho - path expression
  • notações
  • pess.conjuge
  • pess-gtconjuge
  • 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
42
3.3. Linguagem de Consulta OQL Visão Geral
  • Path Expressions e relacionamentos NN
  • pess.filhos.nome
  • consulta incorreta pois
  • pess.filhos é um conjunto de pessoas
    (setltPessoagt)
  • 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 bagltstringgt

3. Padrão ODMG
43
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
44
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) gt 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
45
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
46
3.3. Linguagem de Consulta OQL Visão Geral
  • Tratamento de valores vazios - (nil)
  • o resultado do acesso a nil é UNDEFINED
  • Regras
  • . ou -gt aplicado sobre UNDEFINED resulta
    UNDEFINED
  • comparação (, !, lt,...) 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
47
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
  • where is_defined(emp.endereco.cidade)

3. Padrão ODMG
48
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
  • select max( 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
49
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) gt 0

referência a uma operação
3. Padrão ODMG
50
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
51
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
52
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
53
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
54
3.3. Linguagem de Consulta OQL Visã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
55
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
  • Extent da classe Estudantes
  • nome definido para o objeto Presidente

3. Padrão ODMG
56
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
  • select ... from p in Pessoas
  • p é uma variável de iteração
  • pode ser usada como uma expressão elementar

3. Padrão ODMG
57
3.3. Linguagem de Consulta OQL Visão Detalhada
  • Construtor
  • Expressão que retorna uma nova instância de um
    tipo
  • Exemplos
  • Empregado (nomeJosé da Silva,
  • sexoM
  • data_nasc13/9/98
  • salario 325
  • chefe Presidente)
  • struct(nomeJosé da Silva, sexoM)
  • 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
58
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 gt 10)
  • Operadores binários
  • aritméticos , -, , /, mod
  • relacionais , !, lt, lt,gt,gt
  • booleanos and, or
  • string , (concatenação), like
  • Exemplos
  • José Silva ou José Silva
  • s in José
  • José3 retorna s
  • José24 retorna osé
  • nome like J?s

3. Padrão ODMG
59
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
60
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.nomeCodd
  • select disc.nome
  • from disciplinas disc
  • where exists
  • (select part.numero
  • from part in disc.asPartes
  • where part.oProf.nomeCodd)

3. Padrão ODMG
61
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!)
  • min, max, count, sum, avg
  • Sintaxe
  • ltopergt (ltegt) onde ltegt é 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
62
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 Professor_alunostruct
    (estudanteest_nome, professorparte.oProf.nome
    )
  • from Estudantes as est,
  • est.asDiscip as disc,
  • disc.asPartes as parte
  • where parte.oProf.nivel Titular

3. Padrão ODMG
63
3.3. Linguagem de Consulta OQL Visã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
  • bagltstruct(estEstudante, discDisciplina,
    parteParte)gt

3. Padrão ODMG
64
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 nivnível
  • Resultado
  • setltstruct(nivenum, partitionbagltstruct(profPro
    fessor)gt)gt

partition
niv
prof
titular
prof
...
partition
niv
prof
adjunto
prof
...
...
3. Padrão ODMG
65
3.3. Linguagem de Consulta OQL Visão Detalhada
  • Cláusula Group by
  • select departamento,
  • sal_medavg( select part.salario
  • from partition as part)
  • from Empregados emp
  • group by departamentoemp.deptno
  • having avg( select part.salario
  • from partition as part)gt 3000

3. Padrão ODMG
66
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
67
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)
  • 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
68
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 lt,lt,gt,gt
  • set(1,2,3) lt set (3,4,2,1) retorna true

3. Padrão ODMG
69
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)
  • 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
70
3.3. Linguagem de Consulta OQL Visã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
71
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

72
Exercício OQL - BD genealógico
  • select struct(nome pess.nome, no_filhos
    count(pess.filhos))
  • from Pessoas pess
  • where count(pess.filhos)gt2
  • 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) gt 10
Write a Comment
User Comments (0)
About PowerShow.com