INE 5613 Projeto de Bancos de Dados

Propaganda
ODMG - Object Database
Management Group
• Padrão para SGBDOO
• Consórcio de pesquisadores e fabricantes
• Objetivo
– integração e padronização de funcionalidades de
BD a uma LPOO
• Componentes do padrão
– modelo de objetos
– linguagem de definição de dados (ODL)
– linguagem de consulta (OQL)
Modelo de Objetos e ODL
• Modelo de objetos – conceitos
– dados (objetos e literais)
– tipos (interfaces, classes de objetos e literais)
– herança
– OID e chave
• Especificados em ODL
Dados
• Duas formas de dados são possíveis
– objetos e literais
• Objetos
– possuem valor e OID
– são instâncias de classes
• Literais
– possuem valor e não possuem OID
– não são instâncias de uma classe
• objetos isolados
• objetos componentes de outros objetos
Literais
• Três tipos
– atômicos, estruturados e de coleção
• Literais atômicos
– tipos de dados básicos (predefinidos)
• boolean, char, short, long, float, double, string, ...
• Literais estruturados
– tipos de dados estruturados (alguns predefinidos)
• date, time, timestamp, ... ou definidos pelo usuário
• Literais de coleção
– tipos de agrupamento de dados (predefinidos)
• set<t>, bag<t>, array<t>, ...
– t é tipo de objeto ou valor
Definição de Dados - ODL
•
Três formas
– interface, literal ou classe
•
Interface
– define apenas comportamento (assinatura)
– não possui instâncias
•
Literal
– define apenas propriedades
– possui instâncias (sem OID)
•
Classe
– define propriedades e comportamento
– possui instâncias (com OID - objetos)
Interfaces e Literais em ODL
interface Pessoa {
short idade();
boolean ehMenor();
void casou(Pessoa p) raises(jahEhCasado);
...
};
struct Endereço {
attribute string rua;
attribute short número;
attribute string cidade;
};
set<Endereço> EndereçosAmigos;
Endereço MeuEndereço;
Classes em ODL
class Departamento (extent Departamentos) {
attribute string nome;
attribute short código;
attribute Endereço localização;
attribute struct atendimento{
horaInício time, horaTérmino time} horário;
attribute Empregado chefe;
relationship set<Empregado> funcionários
inverse Empregado:: depto;
void adicionaEmp(short RG) raises (jahTrabalha,
RGInexistente);
...
atributo literal estruturado
};
conjunto de instâncias
atributo de referência a objeto
atributo literal atômico
relacionamento
Herança
• Duas formas
– herança IS-A
– herança extends
• Herança IS-A
– herança de interface
– pode ser interfaceinterface ou interfaceclasse
– permite herança múltipla
• Herança extends
– herança de propriedades
– ocorre somente entre classes (classeclasse)
– não permite herança múltipla
Herança em ODL
Classe Empregado (extent Empregados) {
attribute short RG;
attribute string nome;
attribute enum gênero{M,F} sexo;
attribute Date DN;
attribute Endereço residência;
attribute float salário;
relationship Departamento depto
inverse Departamento:: funcionários;
...
}; herança extends
Classe Professor (extent Professores)
extends Empregado : Pessoa
{ herança IS-A
attribute string titulação;
attribute string areaAtuação;
...
};
OID e Chave
• OID
– identificador do objeto
• Chave
– uma ou mais propriedades cujos valores devem
ser únicos
class Departamentos
( extent todosDeptos
key código)
{
attribute string nome;
attribute short código;
...
};
class Cidades
(key (estado,nome))
{
attribute string estado;
attribute string nome;
...
}
Exemplo – Pacientes em ODL
class Paciente (extent Pacientes key CPF) {
attribute long CPF;
attribute long RG;
attribute string nome;
relationship Leito leito
inverse Leito:: paciente;
attribute struct responsabilidade {
relationship Médico médico
inverse Médico:: responsável,
horárioVisita time} responsável;
relationship set<Médico> tratamento
inverse Médico:: tratamento;
};
Exemplo – Médicos em ODL
class Médico (extent Médicos key CRM) {
attribute long CRM;
attribute string nome;
attribute float salário;
attribute Especialidade atuação;
attribute set<Especialidade> formação;
relationship set<Paciente> responsável
inverse Paciente:: responsável.médico;
relationship set<Paciente> tratamento
inverse Paciente:: tratamento;
};
Consultas em BDOOs
• Duas abordagens
– navegacional
• navegação entre objetos através de suas referências
(controlada pelo programa da aplicação ou SGBDOO)
– declarativa
• uso de uma linguagem de consulta do SGBDOO
• violação de encapsulamento
– maior flexibilidade para formulação de consultas
• Não há DML, apenas linguagem de consulta
– métodos implementam operações de atualização
• Linguagem de consulta do padrão ODMG
– OQL (Object Query Language)
OQL
• Linguagem de consulta declarativa
• Extensão da linguagem SQL com suporte
ao tratamento de
– objetos complexos
– junções por valor ou por OID
– invocação de métodos
• suporta late binding (polimorfismo)
– herança
Ponto de Partida de uma Consulta
• Objeto ou conjunto de objetos
– extensão de classe (extent)
– literal ou conjunto de literais
select e.nome
from e in Empregados
variável de iteração
select e.rua
from e in EndereçosAmigos
MeuEndereço
Resultados de Consultas
• Literais, objetos, conjuntos de literais ou de
objetos
conjunto de objetos
select e.*
from e in Empregados
literal
MeuEndereço
select struct (
conjunto de literais (estrutura complexa)
nome: d.nome
empsRicos:(select e.*
from e in d.funcionários
where e.salário > 5000))
from d in Departamentos
Expressões de Caminho
• Permitem a navegação entre objetos
– caminhamento através de atributos de referência
e relacionamentos
– utiliza-se a notação de ponto (“.”)
• Exemplo
select p.nome, p.titulação
from p in Professores
where p.depto.código = ‘INE’
Expressões de Caminho
• Variáveis de iteração são definidas para a
navegação em coleções de objetos
referenciados (referências 1:N)
– a variável de iteração associa-se com cada elemento da
coleção referenciada
• Exemplo
select f.nome
from d in Departamentos, f in d.funcionários
where d.código = ‘INE’
and f.salário > 5000
Junções
• Junções entre conjuntos de objetos ou de
literais são permitidas, como em BDRs
• Junções de objetos tanto por valor quanto
por OID são permitidas
• Exemplo
select c1.nome
from c in Cidades, c1 in Cidades
where c1.estado = c.estado
and c.nome = ‘Florianopólis’
and c.estado = ‘SC’
Invocação de Métodos
• Métodos podem ser declarados em consultas
da mesma forma que propriedades
• Exemplos
select e.nome
from e in Empregados
where e.idade > 50
select d.código, d.nroHorasAtendimento
from d in Departamentos
Consultas em Hierarquias de
Classes
• Consultas aplicadas a uma classe processam
objetos da classe e de suas subclasses
• Restrições podem ser especificadas
• Exemplo
select (Professores, Pesquisadores)e.nome
from e in Empregados
where e.salário > 3000
Funções de Agregação
• Aplicadas sobre qualquer conjunto de dados
• Exemplos
avg(select p.salário
from p in Professores
where p.depto.código = ‘INE’)
select d.código, d.nome
from d in Departamentos
where count (d.funcionários) > 30
Download