SGBDOO - Padrão ODMG

72
Informática UFPA B D O O 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

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 Presentation

Transcript of SGBDOO - Padrão ODMG

Page 1: SGBDOO - Padrão ODMG

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

Page 2: SGBDOO - 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

Page 3: SGBDOO - 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

Page 4: SGBDOO - 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

Page 5: SGBDOO - 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

Page 6: SGBDOO - 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

Page 7: SGBDOO - 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

Page 8: SGBDOO - Padrão ODMG

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

Page 9: SGBDOO - 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

Page 10: SGBDOO - 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

Page 11: SGBDOO - 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

Page 12: SGBDOO - 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

Page 13: SGBDOO - 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

Page 14: SGBDOO - 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

Page 15: SGBDOO - 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)

Page 16: SGBDOO - Padrão ODMG

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

Page 17: SGBDOO - 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)

Page 18: SGBDOO - Padrão ODMG

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

Page 19: SGBDOO - 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

Page 20: SGBDOO - 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

Page 21: SGBDOO - 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

Page 22: SGBDOO - 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

Page 23: SGBDOO - Padrão ODMG

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

Page 24: SGBDOO - Padrão ODMG

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

Page 25: SGBDOO - Padrão ODMG

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

Page 26: SGBDOO - Padrão ODMG

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

Page 27: SGBDOO - Padrão ODMG

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

Page 28: SGBDOO - Padrão ODMG

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

Page 29: SGBDOO - Padrão ODMG

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

Page 30: SGBDOO - Padrão ODMG

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

Page 31: SGBDOO - Padrão ODMG

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

Page 32: SGBDOO - 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

Page 33: SGBDOO - 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

Page 34: SGBDOO - Padrão ODMG

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

Page 35: SGBDOO - Padrão ODMG

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

Page 36: SGBDOO - Padrão ODMG

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

Page 37: SGBDOO - Padrão ODMG

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

Page 38: SGBDOO - Padrão ODMG

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

Page 39: SGBDOO - 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

Page 40: SGBDOO - 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

Page 41: SGBDOO - 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

Page 42: SGBDOO - Padrão ODMG

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

Page 43: SGBDOO - 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

Page 44: SGBDOO - 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

Page 45: SGBDOO - Padrão ODMG

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

Page 46: SGBDOO - Padrão ODMG

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

Page 47: SGBDOO - 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

Page 48: SGBDOO - 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

Page 49: SGBDOO - Padrão ODMG

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

Page 50: SGBDOO - Padrão ODMG

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

Page 51: SGBDOO - 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

Page 52: SGBDOO - 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

Page 53: SGBDOO - 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

Page 54: SGBDOO - 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

Page 55: SGBDOO - Padrão ODMG

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

Page 56: SGBDOO - Padrão ODMG

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

Page 57: SGBDOO - Padrão ODMG

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

Page 58: SGBDOO - 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*”

Page 59: SGBDOO - Padrão ODMG

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

Page 60: SGBDOO - 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

Page 61: SGBDOO - 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)

Page 62: SGBDOO - Padrão ODMG

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

Page 63: SGBDOO - Padrão ODMG

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

Page 64: SGBDOO - Padrão ODMG

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

Page 65: SGBDOO - Padrão ODMG

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

Page 66: SGBDOO - Padrão ODMG

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

Page 67: SGBDOO - 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

Page 68: SGBDOO - 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

Page 69: SGBDOO - Padrão ODMG

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

Page 70: SGBDOO - Padrão ODMG

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

Page 71: SGBDOO - Padrão ODMG

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

Page 72: SGBDOO - Padrão ODMG

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